Advertisement
qberik

Untitled

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