qberik

Untitled

Jan 10th, 2023
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. .model small
  2. stack 100h
  3.  
  4. ;######################
  5. ; МАКРОСЫ ИЗ МЕТОДИЧКИ
  6. ;------------------------------макрос ввода значений
  7. mReadAX MACRO buf, sz
  8. local input, startOfConvert, endofConvert
  9. push bx
  10. push cx
  11. push dx
  12.  
  13. input:
  14. mov [buf], sz
  15. mov dx, offset [buf]
  16. mov ah, 0ah
  17. int 21h
  18.  
  19. mov ah, 02h
  20. mov dl, 0Dh
  21. int 21h
  22.  
  23. mov ah, 02h
  24. mov dl, 0Ah
  25. int 21h
  26.  
  27. xor ah, ah
  28. cmp ah, [buf][1]
  29. jz input
  30.  
  31. xor cx, cx
  32. mov cl, [buf][1]
  33.  
  34. xor ax, ax
  35. xor bx, bx
  36. xor dx, dx
  37. mov bx, offset [buf][2]
  38.  
  39. cmp [buf][2], "-"
  40. jne startOfConvert
  41. inc bx
  42. dec cl
  43.  
  44. startOfConvert:
  45. mov dx, 10
  46. mul dx
  47. cmp ax, 8000h
  48. jae input
  49.  
  50. mov dl, [bx]
  51. sub dl, "0"
  52.  
  53. add ax, dx
  54. cmp ax, 8000h
  55. jae input
  56.  
  57. inc bx
  58. loop startOfConvert
  59.  
  60. cmp [buf][2], "-"
  61. jne endofConvert
  62. neg ax
  63.  
  64. endofConvert:
  65. pop dx
  66. pop cx
  67. pop bx
  68.  
  69. endm mReadAX
  70.  
  71.  
  72.  
  73. ;------------------------------макрос вывода сообщений на экран
  74. Print MACRO str
  75. push ax
  76. push dx
  77.  
  78. mov ah, 09h
  79. mov dx, offset str
  80. int 21h
  81.  
  82. pop dx
  83. pop ax
  84. ENDM Print
  85.  
  86. ;------------------------------макрос вывода результата
  87. mWriteAx macro
  88. local convert, write
  89. push ax
  90. push bx
  91. push cx
  92. push dx
  93. push di
  94.  
  95. mov cx, 10
  96. xor di, di
  97.  
  98. or ax, ax
  99. jns convert
  100.  
  101. push ax
  102. mov dx, "-"
  103. mov ah, 02h
  104. int 21h
  105.  
  106. pop ax
  107. neg ax
  108.  
  109. convert:
  110. xor dx, dx
  111. div cx
  112. add dl, "0"
  113. inc di
  114. push dx
  115. or ax, ax
  116. jnz convert
  117.  
  118. write:
  119. pop dx
  120. mov ah, 02h
  121. int 21h
  122. dec di
  123. jnz write
  124.  
  125. pop di
  126. pop dx
  127. pop cx
  128. pop bx
  129. pop ax
  130.  
  131. endm mWriteAx
  132.  
  133. ; МАКРОСЫ ИЗ МЕТОДИЧКИ
  134. ;######################
  135.  
  136.  
  137. .data
  138. s db 800 dup(0)
  139. len dw 0
  140. file1 db "IN.TXT", 0
  141. file2 db "OUT.TXT", 0
  142.  
  143. in_text db 'Select offset: ','$'
  144. inbuf db 10 dup (0)
  145. out_text db 'Replace count: ','$'
  146.  
  147. .code
  148. start:
  149. mov ax, @data
  150. mov ds, ax
  151. mov es, ax
  152.  
  153. xor ax, ax
  154. xor bx, bx
  155. xor cx, cx
  156. xor dx, dx
  157. xor si, si
  158. xor di, di
  159. xor bp, bp
  160. ; открытие файла
  161. mov ah, 3Dh
  162. mov al, 0 ; для чтения
  163. mov dx, offset file1
  164. int 21h
  165. mov bp, ax ; ax -> bp
  166. ; чтение из файла
  167. mov si, 0
  168. mov dx, offset s
  169. _read_byte:
  170. mov bx, bp
  171. mov ah, 3Fh
  172. mov cx, 1
  173. int 21h
  174. inc dx ;следующий символ
  175. inc si ;количество считанных символов
  176. cmp ax, 0
  177. jne _read_byte
  178. dec si
  179. mov len, si
  180. ;закрытие файла
  181. mov bx, bp
  182. mov ah, 3Eh
  183. int 21h
  184.  
  185.  
  186. xor ax, ax
  187. xor bx, bx
  188. xor cx, cx
  189. xor dx, dx
  190. xor si, si
  191. xor di, di
  192. xor bp, bp
  193. mov si, offset s ; откуда начать
  194. mov bp, offset s ; где закончить
  195. add bp, len
  196. mov al, 13 ; перевод строки
  197. ;mov cx, 0 ; подсчёт линий
  198.  
  199.  
  200. _read_offset:
  201. ; читаем сдвиг
  202. Print in_text
  203. mReadAX inbuf, 5
  204. mov dx, ax
  205.  
  206.  
  207. _cmp_char:
  208.  
  209. cmp si, bp
  210. je _end_of_text
  211.  
  212. mov al, '.'
  213. cmp [si], al
  214. je _sign
  215.  
  216. mov al, ','
  217. cmp [si], al
  218. je _sign
  219.  
  220. mov al, '!'
  221. cmp [si], al
  222. je _sign
  223.  
  224. mov al, '?'
  225. cmp [si], al
  226. je _sign
  227. nop
  228.  
  229. inc si
  230. jmp _cmp_char
  231. _sign:
  232. mov di, si
  233. lodsb ; строковая к комманда
  234. add al, dl
  235. stosb
  236. inc cx
  237. jmp _cmp_char
  238.  
  239. _end_of_text:
  240.  
  241.  
  242. Print out_text
  243. mov ax, cx
  244. mWriteAx
  245.  
  246.  
  247. mov ah, 3Dh
  248. mov al, 1; для записи
  249. mov dx, offset file2
  250. int 21h
  251. mov bp, ax ; ax -> bp
  252. ; запись в файл
  253. mov si, len
  254. mov di, 0
  255. mov dx, offset s
  256. _write_byte:
  257. mov bx, bp
  258. mov ah, 40h
  259. mov cx, 1
  260. int 21h
  261. inc dx ;следующий символ
  262. inc di
  263. cmp di, si
  264. jne _write_byte
  265. ;закрытие файла
  266. mov bx, bp
  267. mov ah, 3Eh
  268. int 21h
  269. mov ax, 4c00h
  270. int 21h
  271.  
  272. end start
  273.  
Advertisement
Add Comment
Please, Sign In to add comment