Guest User

Untitled

a guest
May 26th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.73 KB | None | 0 0
  1. ; Read Write procedures, version 20100915 (c) František Zbořil
  2. ;
  3.  
  4. %macro prologue 0
  5. mov ax,DATA
  6. mov ds,ax
  7. mov ax,stack
  8. mov ss,ax
  9. mov sp,stacktop
  10. %endmacro
  11.  
  12. %macro epilogue 0
  13. mov ah,4ch
  14. int 21h
  15. %endmacro
  16.  
  17. segment code
  18. ; Read
  19. Read_Char:
  20. pushf
  21. pusha
  22. mov dx,mess_ch
  23. mov ah,9
  24. int 21h
  25. mov ah,0ch ; Clear the Standard Input
  26. mov al,1 ; and Read Character
  27. int 21h ;
  28. or al,al
  29. jnz rchcont ; AL=ASCII_Character, AH=Scan_Code
  30. mov ah,1 ; Extended Char
  31. int 21h
  32. mov ah,al
  33. xor al,al ; AL=0, AH=Extended_ASCII_keystroke
  34. rchcont:
  35. mov [aux],ax
  36. popa
  37. mov ax,[aux]
  38. popf
  39. ret
  40.  
  41. Read_Byte:
  42. pushf
  43. pusha
  44. jmp rbcyc1
  45. rbcont1:
  46. call WriteLn
  47. rbcyc1: mov dx,mess_rb
  48. mov ah,9
  49. int 21h
  50. mov [ok],byte 0
  51. mov bl,10
  52. mov ax,0
  53. rbcyc2:
  54. push ax
  55. mov ah,0ch
  56. mov al,1
  57. int 21h
  58. pop cx
  59. cmp al,13
  60. jne rbcont2
  61. cmp [ok],byte 0
  62. je rbcont1
  63. jmp rbcont3
  64. rbcont2:
  65. cmp al,'0'
  66. jb rbcont1
  67. cmp al,'9'
  68. ja rbcont1
  69. mov [ok],byte 1
  70. sub al,'0'
  71. mov ah,0
  72. xchg ax,cx
  73. mul bl
  74. add ax,cx
  75. cmp ax,255
  76. ja rbcont1
  77. jmp rbcyc2
  78. rbcont3:
  79. mov [aux],cx
  80. popa
  81. mov al,[aux]
  82. popf
  83. ret
  84.  
  85. Read_ShortInt:
  86. pushf
  87. pusha
  88. jmp rscyc1
  89. rscont1:
  90. call WriteLn
  91. rscyc1: mov dx,mess_rs
  92. mov ah,9
  93. int 21h
  94. mov [ok],byte 0
  95. mov [sign],byte 0 ; nebylo zadano
  96. mov bl,10
  97. mov ax,0
  98. rscyc2:
  99. push ax
  100. mov ah,0ch
  101. mov al,1
  102. int 21h
  103. pop cx
  104. cmp al,13
  105. jne rscont2
  106. cmp [ok],byte 0
  107. je rscont1
  108. jmp rscont5
  109. rscont2:
  110. cmp al,'+'
  111. jne rscont3
  112. cmp [ok], byte 0
  113. jne rscont1
  114. cmp [sign],byte 0
  115. jne rscont1
  116. mov [sign],byte 1 ; +
  117. mov ax,cx
  118. jmp rscyc2
  119. rscont3:
  120. cmp al,'-'
  121. jne rscont4
  122. cmp [ok], byte 0
  123. jne rscont1
  124. cmp [sign],byte 0
  125. jne rscont1
  126. mov [sign],byte -1 ; -
  127. mov ax,cx
  128. jmp rscyc2
  129. rscont4:
  130. cmp al,'0'
  131. jb near rscont1
  132. cmp al,'9'
  133. ja near rscont1
  134. mov [ok],byte 1
  135. sub al,'0'
  136. mov ah,0
  137. xchg ax,cx
  138. mul bl
  139. add ax,cx
  140. cmp ax,128
  141. ja near rscont1
  142. cmp [sign],byte -1
  143. je rscyc2
  144. cmp ax,127
  145. ja near rscont1
  146. jmp rscyc2
  147. rscont5:
  148. cmp cx,128
  149. je rscont6
  150. cmp [sign],byte -1
  151. jne rscont6
  152. neg cx
  153. rscont6:
  154. mov [aux],cx
  155. popa
  156. mov al,[aux]
  157. popf
  158. ret
  159.  
  160. Read_Word:
  161. pushf
  162. pusha
  163. jmp rwcyc1
  164. rwcont1:
  165. call WriteLn
  166. rwcyc1: mov dx,mess_rw
  167. mov ah,9
  168. int 21h
  169. mov [ok],byte 0
  170. mov bx,10
  171. mov ax,0
  172. rwcyc2:
  173. push ax
  174. mov ah,0ch
  175. mov al,1
  176. int 21h
  177. pop cx
  178. cmp al,13
  179. jne rwcont2
  180. cmp [ok],byte 0
  181. je rwcont1
  182. jmp rwcont3
  183. rwcont2:
  184. cmp al,'0'
  185. jb rwcont1
  186. cmp al,'9'
  187. ja rwcont1
  188. mov [ok],byte 1
  189. sub al,'0'
  190. mov ah,0
  191. xchg ax,cx
  192. cmp ax,6553
  193. ja rwcont1
  194. mul bx
  195. add ax,cx
  196. jc rwcont1
  197. jmp rwcyc2
  198. rwcont3:
  199. mov [aux],cx
  200. popa
  201. mov ax,[aux]
  202. popf
  203. ret
  204.  
  205. Read_Integer:
  206. pushf
  207. pusha
  208. jmp ricyc1
  209. ricont1:
  210. call WriteLn
  211. ricyc1: mov dx,mess_ri
  212. mov ah,9
  213. int 21h
  214. mov [ok],byte 0
  215. mov [sign],byte 0 ; nebylo zadano
  216. mov bx,10
  217. mov ax,0
  218. ricyc2:
  219. push ax
  220. mov ah,0ch
  221. mov al,1
  222. int 21h
  223. pop cx
  224. cmp al,13
  225. jne ricont2
  226. cmp [ok],byte 0
  227. je ricont1
  228. jmp ricont5
  229. ricont2:
  230. cmp al,'+'
  231. jne ricont3
  232. cmp [ok], byte 0
  233. jne ricont1
  234. cmp [sign],byte 0
  235. jne ricont1
  236. mov [sign],byte 1 ; +
  237. mov ax,cx
  238. jmp ricyc2
  239. ricont3:
  240. cmp al,'-'
  241. jne ricont4
  242. cmp [ok], byte 0
  243. jne ricont1
  244. cmp [sign],byte 0
  245. jne ricont1
  246. mov [sign],byte -1 ; -
  247. mov ax,cx
  248. jmp ricyc2
  249. ricont4:
  250. cmp al,'0'
  251. jb near ricont1
  252. cmp al,'9'
  253. ja near ricont1
  254. mov [ok],byte 1
  255. sub al,'0'
  256. mov ah,0
  257. xchg ax,cx
  258. cmp ax,3276
  259. ja near ricont1
  260. mul bx
  261. add ax,cx
  262. cmp ax,32768
  263. ja near ricont1
  264. cmp [sign],byte -1
  265. je near ricyc2
  266. cmp ax,32767
  267. jna near ricyc2
  268. jmp ricont1
  269. ricont5:
  270. cmp ax,32768
  271. je ricont6
  272. cmp [sign],byte -1
  273. jne ricont6
  274. neg cx
  275. ricont6:
  276. mov [aux],cx
  277. popa
  278. mov ax,[aux]
  279. popf
  280. ret
  281.  
  282. Read_String:
  283. pushf
  284. pusha
  285. pusha
  286. mov dx,mess_st
  287. mov ah,9
  288. int 21h
  289. popa
  290. mov di,dx
  291. mov si,di
  292. mov [si],byte 0
  293. rstrcyc:
  294. cmp [si],byte 255
  295. je rstrcont1
  296. mov ah,0ch
  297. mov al,1
  298. int 21h
  299. cmp al,13
  300. je rstrcont1
  301. inc byte [si]
  302. inc di
  303. mov [di],al
  304. jmp rstrcyc
  305. rstrcont1:
  306. popa
  307. popf
  308. ret
  309.  
  310. ; Write
  311. Write_Char: ; AL=Character
  312. pushf
  313. pusha
  314. mov dl,al
  315. mov ah,2 ; DL=Character
  316. int 21h
  317. popa
  318. popf
  319. ret
  320.  
  321. Write_Byte: ; AL=Byte
  322. pushf
  323. pusha
  324. mov si,2
  325. mov bl,10
  326. wbcyc1: mov ah,0
  327. div bl
  328. add ah,'0'
  329. mov [z_b+si],ah
  330. dec si
  331. cmp si,0
  332. jnz wbcyc1
  333. add al,'0'
  334. mov [z_b],al
  335. mov dx,z_b
  336. mov si,0
  337. wbcyc2: cmp [z_b+si],byte '0'
  338. jne wbcont
  339. inc dx
  340. inc si
  341. cmp si,2
  342. jne wbcyc2
  343. wbcont: call Print_Str
  344. popa
  345. popf
  346. ret
  347.  
  348. Write_ShortInt: ; AL=ShortInt
  349. pushf
  350. pusha
  351. cmp al,128
  352. jb wscont2
  353. mov dl,al
  354. mov al,'-'
  355. call Write_Char
  356. mov al,dl
  357. cmp al,128
  358. jne wscont1
  359. mov dx,z_bmax
  360. call Print_Str
  361. jmp wscont3
  362. wscont1:
  363. neg al
  364. wscont2:
  365. call Write_Byte
  366. wscont3:
  367. popa
  368. popf
  369. ret
  370.  
  371. Write_Word: ; AX=Byte
  372. pushf
  373. pusha
  374. mov si,4
  375. mov bx,10
  376. wwcyc1: mov dx,0
  377. div bx
  378. add dl,'0'
  379. mov [z_w+si],dl
  380. dec si
  381. cmp si,0
  382. jnz wwcyc1
  383. add al,'0'
  384. mov [z_w],al
  385. mov dx,z_w
  386. mov si,0
  387. wwcyc2: cmp [z_w+si],byte '0'
  388. jne wwcont
  389. inc dx
  390. inc si
  391. cmp si,4
  392. jne wwcyc2
  393. wwcont: call Print_Str
  394. popa
  395. popf
  396. ret
  397.  
  398. Write_Integer: ; AX=Integer
  399. pushf
  400. pusha
  401. cmp ax,32768
  402. jb wicont2
  403. mov dx,ax
  404. mov al,'-'
  405. call Write_Char
  406. mov ax,dx
  407. cmp ax,32768
  408. jne wicont1
  409. mov dx,z_wmax
  410. call Print_Str
  411. jmp wicont3
  412. wicont1:
  413. neg ax
  414. wicont2:
  415. call Write_Word
  416. wicont3:
  417. popa
  418. popf
  419. ret
  420.  
  421. Write_String:
  422. pushf
  423. pusha
  424. mov si,dx
  425. mov di,string
  426. mov cl,[si]
  427. mov ch,0
  428. jcxz wstrcont
  429. wstrcyc:
  430. inc si
  431. mov al,[si]
  432. mov [di],al
  433. inc di
  434. loop wstrcyc
  435. mov [di],byte '$'
  436. mov dx,string
  437. call Print_Str
  438. wstrcont:
  439. popa
  440. popf
  441. ret
  442.  
  443. Write_Flags:
  444. pushf
  445. pusha
  446. pushf
  447. pop ax
  448. mov cx,16
  449. mov si,0
  450. wfcyc: shl ax,1
  451. mov [flags+si],byte '0'
  452. jnc wfcont
  453. mov [flags+si],byte '1'
  454. wfcont: inc si
  455. loop wfcyc
  456. mov dx,mess_fl
  457. mov ah,9
  458. int 21h
  459. popa
  460. popf
  461. ret
  462.  
  463. WriteLn:
  464. pushf
  465. pusha
  466. mov dl,13 ; CR
  467. mov ah,2
  468. int 21h
  469. mov dl,10 ; LF
  470. mov ah,2
  471. int 21h
  472. popa
  473. popf
  474. ret
  475.  
  476. Print_Str: ; DX=String_offset, String='???....???','$'
  477. pushf
  478. pusha
  479. mov ah,9
  480. int 21h
  481. popa
  482. popf
  483. ret
  484.  
  485. segment DATA
  486. z_w resb 2
  487. z_b resb 3
  488. db '$'
  489. z_bmax db '128$'
  490. z_wmax db '32768$'
  491. ok resb 1
  492. sign resb 1
  493. aux resw 1
  494.  
  495. mess_ch db 'Zadejte znak: $'
  496. mess_rb db 'Zadejte Byte (0,..,255): $'
  497. mess_rs db 'Zadejte ShortInt (-128,..,127): $'
  498. mess_rw db 'Zadejte Word (0,..,65535): $'
  499. mess_ri db 'Zadejte Integer (-32768,..,32767): $'
  500. mess_st db 'Zadejte řetěz znaků: $'
  501. mess_fl db 'Flags: xxxxODITSZxAxPxC',13,10,
  502. db ' '
  503. flags resb 16
  504. db '$'
  505. string resb 256
  506.  
  507. segment stack stack
  508. resb 1000
  509. stacktop:
Add Comment
Please, Sign In to add comment