Advertisement
thedoublev231

Untitled

Nov 9th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model SMALL
  2. .stack 100h
  3.  
  4. input_buff_size EQU 1024
  5. output_buff_size EQU 1024
  6.  
  7. .data
  8.   input_file DB "duom.txt", 0
  9.   output_file DB "rez.txt", 0
  10.   input_buff DB input_buff_size dup (?)
  11.   output_buff DB output_buff_size dup (?)
  12.   enteris DB 10, 13, "$"
  13.  
  14.   error_read DB "Klaida atidarant duomenu faila", 10, 13, "$"
  15.   error_write DB "Klaida atidarant rezultatu faila", 10, 13, "$"
  16.   error_reading DB "Klaida skaitant duomenu faila", 10, 13, "$"
  17.   error_writing DB "Klaida rasant i rezultatu faila", 10, 13, "$"
  18.   incomplete_writing DB "Nevisi duomenys surasyti i rezultatu faila", 10, 13, "$"
  19.   error_closing DB "Nepavyko uzdaryti failo", 10, 13, "$"
  20.  
  21.   zero DB "nulis", 10, 13, "$"
  22.   one DB "vienas", 10, 13, "$"
  23.   two DB "du", 10, 13, "$"
  24.   three DB "trys", 10, 13, "$"
  25.   four DB "keturi", 10, 13, "$"
  26.   five DB "penki", 10, 13, "$"
  27.   six DB "sesi", 10, 13, "$"
  28.   seven DB "septyni", 10, 13, "$"
  29.   eight DB "astuoni", 10, 13, "$"
  30.   nine DB "devyni", 10, 13, "$"
  31.  
  32.   input_handle DW ?
  33.   output_handle DW ?
  34.  
  35. .code
  36. pradzia:
  37.   MOV AX, @data
  38.   MOV DS, AX
  39.  
  40.   CALL open_input_file
  41.   CALL open_output_file
  42.  
  43.   read:
  44.     MOV BX, input_handle
  45.     CALL read_input_file
  46.     CMP AX, 0
  47.     JE close_output_file
  48.  
  49.   ; darbas su nuskaityta info
  50.   MOV CX, AX
  51.   PUSH AX
  52.   MOV AX, 5
  53.   LEA SI, input_buff
  54.   LEA DI, output_buff
  55.  
  56.   LEA BX, zero
  57.   ; tikrinam ar current symbol == '0'
  58.   lyginimas:
  59.     MOV DL, [SI]
  60.     CMP DL, '0'
  61.     JE write_zero
  62.     JNE tesinys ; tesk jeigu nera 0
  63.     write_zero:
  64.       MOV DX, [BX]
  65.       MOV [DI], DX
  66.       INC DI
  67.       INC BX
  68.       CMP DI, AX
  69.       JE write_zero
  70.       JNE tesinys
  71.      
  72.   tesinys:
  73.     INC SI
  74.     LOOP lyginimas
  75.  
  76.   ; rezultatu irasymas
  77.   POP AX
  78.   MOV CX, AX
  79.   MOV BX, output_handle
  80.   CALL output_buffer
  81.   CMP AX, input_buff_size
  82.   JE read
  83.  
  84.   JMP pabaiga
  85.  
  86. close_output_file:
  87.   MOV AH, 3Eh
  88.   MOV BX, output_handle
  89.   INT 21h
  90.   JC error_closing_file
  91.   JMP pabaiga
  92.  
  93. close_input_file:
  94.   MOV AH, 3Eh
  95.   MOV BX, input_handle
  96.   INT 21h
  97.   JC error_closing_file
  98.   JMP pabaiga
  99.  
  100.  
  101. ; ***** klaidos *****
  102. error_opening_read:
  103.   MOV AH, 9
  104.   LEA DX, error_read
  105.   INT 21h
  106.   JMP pabaiga
  107. error_opening_write:
  108.   MOV AH, 9
  109.   LEA DX, error_write
  110.   INT 21h
  111.   JMP pabaiga
  112. error_closing_file:
  113.   MOV AH, 9
  114.   LEA DX, error_closing
  115.   INT 21h
  116.   JMP pabaiga
  117.  
  118.  
  119. PROC open_input_file
  120.   MOV AH, 3Dh
  121.   MOV AL, 00
  122.   LEA DX, input_file
  123.   INT 21h
  124.   JC error_opening_read
  125.   MOV input_handle, AX
  126.   RET
  127. open_input_file ENDP
  128.  
  129. PROC open_output_file
  130.   MOV AH, 3Ch
  131.   MOV CX, 0
  132.   LEA DX, output_file
  133.   INT 21h
  134.   JC error_opening_write
  135.   MOV output_handle, AX
  136.   RET
  137. open_output_file ENDP
  138.  
  139. PROC read_input_file
  140.   PUSH CX
  141.   PUSH DX
  142.  
  143.   MOV AH, 3Fh
  144.   MOV CX, input_buff_size
  145.   LEA DX, input_buff
  146.   INT 21h
  147.   JC error_while_reading
  148.  
  149.   read_input_file_end:
  150.     POP DX
  151.     POP CX
  152.     RET
  153.  
  154.   error_while_reading:
  155.     MOV AX, 0
  156.     MOV AH, 9
  157.     LEA DX, error_reading
  158.     INT 21h
  159.     JMP read_input_file_end
  160. read_input_file ENDP
  161.  
  162. PROC output_buffer
  163.   PUSH DX
  164.  
  165.   MOV AH, 40h
  166.   LEA DX, output_buff
  167.   INT 21h
  168.   JC error_while_writing
  169.   CMP CX, AX
  170.   JNE incomplete_write
  171.  
  172.   incomplete_write:
  173.     MOV AH, 9
  174.     LEA DX, incomplete_writing
  175.     INT 21h
  176.     JMP write_output_end
  177.  
  178.   write_output_end:
  179.     POP DX
  180.     RET
  181.  
  182.   error_while_writing:
  183.     MOV AX, 0
  184.     MOV AH, 9
  185.     LEA DX, error_writing
  186.     INT 21h
  187.     JMP write_output_end
  188. output_buffer ENDP
  189.  
  190. pabaiga:
  191.   MOV AH, 4Ch
  192.   MOV AL, 0
  193.   INT 21h
  194. END pradzia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement