Advertisement
gpiliponyte

Disassembler

Jun 15th, 2017
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;A program that converts machine code back to the original Assembly code (a very low-level programming language)
  2.  
  3. .MODEL small
  4.  
  5. .STACK 200h
  6.  
  7. .DATA  
  8.     pagalba db "Gretos Piliponytes (2 grupe) disasembleris.", 10, 13, "$"
  9.     f_in db 100 dup(?)
  10.     f_out db 100 dup(?)
  11.     buf db 10 dup(?)
  12.     komkodai db 1, 1, 1, 1, 2, 2, 11, 11, 1, 1, 1, 1, 2, 2, 11, 11, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 11, 1, 1, 1, 1, 2, 2, 39, 0, 1, 1, 1, 1, 2, 2, 39, 0,1, 1, 1, 1, 2, 2, 39, 0, 1, 1, 1, 1, 2, 2, 39, 0,12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 1, 1, 13, 1, 13, 5,0, 0, 0,    0, 0,   0,  0,  0,  20, 20, 10, 20, 20, 20, 20, 20, 8,  8,  7,  7, 0, 0, 0, 0, 0,   0, 20, 20, 20, 20, 20, 20, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 17, 0, 0, 0, 16,   16, 0, 0, 17, 0, 28, 18, 0, 20, 0, 0,   0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,0, 0, 10, 10, 10, 6, 20, 20, 20, 20,20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, 20, 20, 20, 21, 19
  13.     par_error db "Parametrai neteisingi", 10, 13, "$"
  14.     error_file_not_found db "Failas buvo nerastas", 10, 13, "$"
  15.     f_padidarytas db "Failas sekmingai atidarytas", 10, 13, "$"
  16.     error_file_not_created db "Nepavyko sukurti failo", 10, 13, "$"
  17.     error_rasymas db "Nepavyko irasyt i faila", 10, 13, "$"
  18.     msg db " POP AX, BX, CX, DX, DI, SI, BP, ESP"
  19.     file_handler_in dw ?
  20.     file_handler_out dw ?
  21.     file_size db ?  
  22.     file_size2 db ?
  23.     f_size dw ?
  24.     par_sk db ?
  25.     tarpai db 42 dup (' ')
  26.     w db ?
  27.     d db ?
  28.     mod_ db ?
  29.     reg db ?
  30.     sreg db ?
  31.     r_m db ?
  32.     tarpas db ' '
  33.     i db 2
  34.     kom db ?
  35.     z db ?
  36.     x dw ?
  37.     rodykle dw 0
  38.     kiek_perskaityta dw 0
  39.     kiek_liko dw 0
  40.     kiek_pries_tai_perskaityta dw 0
  41.     kiek_isvesta dw 0
  42.     y db 0
  43. ;--------------------------------------------------------------------
  44.     kom_mov                     db " MOV "
  45.     kom_push                    db " PUSH ", 10, 13, "$"
  46.     kom_pop                     db " POP ", 10, 13, "$"
  47.     kom_add                     db " ADD "
  48.     kom_inc                     db " INC ", 10, 13, "$"
  49.     kom_sub                     db " SUB "
  50.     kom_dec                     db " DEC ", 10, 13, "$"
  51.     kom_cmp                     db " CMP "
  52.     kom_mul                     db " MUL "
  53.     kom_div                     db " DIV "
  54.     kom_call                    db " CALL "
  55.     kom_ret                     db " RET "
  56.     kom_jmp                     db " JMP "
  57.     kom_loop                    db " LOOP "
  58.     kom_int                     db " INT "
  59.     kom_nez                     db " NEZINOMA ", 10, 13, "$"
  60.     kom_or                      db " OR "
  61.     kom_and                     db " AND "
  62.     kom_xor                     db " XOR "
  63.     kom_lea                     db " LEA "
  64.     kom_popa                    db " POPA "
  65.     enteris                     db 13, 10
  66.     ;----------------------------------------
  67.     kom_jo                      db " JO "
  68.     kom_jno                     db " JNO "
  69.     kom_jb                      db " JB "
  70.     kom_jnb                     db " JNB "
  71.     kom_je                      db " JE "
  72.     kom_jne                     db " JNE "
  73.     kom_jbe                     db " JBE "
  74.     kom_ja                      db " JA "
  75.     kom_js                      db " JS "
  76.     kom_jp                      db " JP "
  77.     kom_jnp                     db " JNP "
  78.     kom_jl                      db " JL "
  79.     kom_jns                     db " JNS " 
  80.     kom_jnl                     db " JNL "
  81.     kom_jng                     db " JNG "
  82.     kom_jg                      db " JG "
  83.     ;-----------------------------------------
  84.     pap_byte_ptr                db "byte ptr"
  85.     pap_word_ptr                db "word ptr"
  86.     pap_dword_ptr               db "dword ptr"
  87.     pap_k_sk                    db "["
  88.     pap_d_sk                    db "]"
  89.     kablelis                    db ","
  90.     plius                       db "+"
  91.     minus                       db "-"
  92.     dvitaskis                   db ":"
  93.     ;----------------------------------------
  94.     reg_ax                      db "AX"
  95.     reg_bx                      db "BX"
  96.     reg_cx                      db "CX"
  97.     reg_dx                      db "DX"
  98.     reg_al                      db "AL"
  99.     reg_bl                      db "BL"
  100.     reg_cl                      db "CL"
  101.     reg_dl                      db "DL"
  102.     reg_ah                      db "AH"
  103.     reg_bh                      db "BH"
  104.     reg_ch                      db "CH"
  105.     reg_dh                      db "DH"
  106.     reg_si                      db "SI"
  107.     reg_di                      db "DI"
  108.     reg_cs                      db "CS"
  109.     reg_ss                      db "SS"
  110.     reg_es                      db "ES"
  111.     reg_ds                      db "DS"
  112.     reg_sf                      db "SF"
  113.     reg_sp                      db "SP"
  114.     reg_bp                      db "BP"
  115.     s db ?
  116. ;----------------------------------------------------------------------------- 
  117.     buf2 db ' ', ' ', ' ', ' '
  118.     buf22 db ' ', ' ', ' ', ' '
  119.     adresas2 dw ?
  120.     adresas dw 256
  121.     buf_nez db 0, 0
  122.     reg1_buf db "AL", "CL", "DL", "BL", "AH", "CH", "DH", "BH"
  123.     reg2_buf db "AX", "CX", "DX", "BX", "SP", "BP", "SI", "DI"
  124.     r_m_buf2 db "SI", "DI", "SI", "DI"
  125.     r_m_buf db "BX", "BX", "BP", "BP", "SI", "DI", "BP", "BX"
  126.     kom_isved_buf db 16 dup (?)
  127.     kom_pav db 1,1, 1,  1,  1,  1,  2,  3,  4,4, 4, 4,  4,  4,  2,  3,0,  0, 0, 0, 0,   0,  2,  0,  0,  0,  0,  0,  0,  0,  2,  3,5, 5, 5,  5, 5, 5,    17, 0,  6,  6,  6,  6,  6,  6,  17, 0,7,    7,7,    7,  7,  7,  17, 0,  8,  8,  8,  8,  8,  8,  17, 0,9,    9,  9,  9,  9,  9,  9,  9,  10, 10, 10, 10, 10, 10, 10, 10,2,   2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,  3,0,    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,11,   11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,17,  17, 17, 17, 0,  0,  0,  0,  12, 12, 12, 12, 13, 1,  13, 5,0,    0,  0,  0,  0,  0,  0,  0,  13, 0,  0,  0,  0,  0,  0,  0,12,   12, 12, 12, 0,  0,  13, 0,  0,  0,  0,  0,  0,  0,  0,  0,12,   12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,0,   0,  14, 14, 0,  0,  12, 12, 0,  0,  14, 14, 15, 15, 0,  0,0,    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,0,    0,  16, 0,  0,  0,  0,  0,  13, 19, 19, 19, 0,  0,  0,  0,0,    0,  0,  0,  0,  0,  17, 17, 0,  0,  0,  0,  0,  0,  17, 17
  128.     .CODE
  129. PROC parametru_skait
  130.  
  131.     XOR CX, CX
  132.     MOV CL, ES:[0080h] ;cl priskiriame parametru kieki
  133.     CMP CL, 4h ;jei parametru maziau nei 4, reiskiasi jie neteisingi
  134.     JL parametru_error ;
  135.    
  136.     MOV BX, 0082h
  137.    
  138.     help_ciklas:
  139.    
  140.     MOV DX, word ptr ES:[BX]
  141.     CMP DX, '?/'
  142.     JE pagalbos_zinute
  143.     INC BX
  144.     INC BX
  145.    
  146.     loop help_ciklas
  147.    
  148.     nuskaitymas:
  149.    
  150.     LEA DI, f_in  
  151.     MOV BX, 0082h
  152.    
  153.     pirmo_par_skait:
  154.    
  155.     MOV DL, byte ptr ES:[BX]
  156.     CMP DL, 20h
  157.     JE pirmo_par_pabaiga
  158.     MOV byte ptr[DI], DL
  159.    
  160.     INC DI
  161.     INC BX
  162.    
  163.     JMP pirmo_par_skait
  164.    
  165.     pirmo_par_pabaiga:
  166.    
  167.     MOV byte ptr[DI], 0
  168.     LEA DI, f_out
  169.     INC BX
  170.    
  171.     antro_par_skait:
  172.     MOV DL, byte ptr ES:[BX]
  173.     CMP DL, 13
  174.     JE antro_par_pabaiga
  175.     MOV byte ptr[DI], DL
  176.  
  177.     INC BX
  178.     INC DI
  179.     JMP antro_par_skait
  180.    
  181.     antro_par_pabaiga:
  182.    
  183.     MOV byte ptr[DI], 0
  184.  
  185. RET
  186.     parametru_error:
  187.     MOV AH, 09h
  188.     MOV DX, OFFSET par_error
  189.     INT 21h                  
  190.    
  191. RET
  192.     pagalbos_zinute:
  193.     MOV AH, 09h
  194.     MOV DX, OFFSET pagalba
  195.     INT 21h  
  196.    
  197.     jmp baigti
  198. RET
  199. ENDP
  200. PROC failu_atidarymas
  201.  
  202.     MOV AH, 3Dh ;failo atidarymas
  203.     MOV AL, 0h ;0- naudojamas skaitymui
  204.     MOV DX, OFFSET f_in
  205.     INT 21h
  206.  
  207.     JC failas_nerastas
  208.  
  209.     MOV file_handler_in, AX ;jei failas sekmingai atidarytas, jam priskiriama AX reiksme
  210.     MOV AH, 09h
  211.     MOV DX, OFFSET f_padidarytas
  212.     INT 21h
  213.    
  214.     MOV CX, 0h
  215.     MOV DX, OFFSET f_out
  216.     MOV AH, 3Ch ;failo sukurimas
  217.     INT 21h
  218.  
  219.     JNC failas_sukurtas_gerai                    
  220.  
  221.     MOV DX, OFFSET error_file_not_created
  222.     MOV AH, 09h
  223.     INT 21h
  224.  
  225. RET
  226.  
  227.     failas_sukurtas_gerai:
  228.  
  229.     MOV AL, 1h ;1-rasymas
  230.     MOV DX, OFFSET f_out
  231.     MOV AH, 3Dh ;failo atidarymas
  232.     INT 21h
  233.    
  234.     MOV file_handler_out, AX
  235.  
  236.     JC error_file_not_found_f
  237.  
  238. RET
  239.     error_file_not_found_f:
  240.  
  241.     MOV DX, OFFSET error_file_not_found
  242.     MOV AH, 09h
  243.     INT 21h
  244.  
  245. RET
  246.  
  247.     failas_nerastas:
  248.     MOV AH, 09h
  249.     MOV DX, OFFSET error_file_not_found
  250.     INT 21h
  251.    
  252.     jmp baigti
  253.  
  254. RET
  255. ENDP
  256. ;--------------------------------------------------------------------------------------------------------------------
  257. PROC buferio_papildymas
  258.    
  259.     MOV BX, file_handler_in ;bx - handleris
  260.     MOV CX, 10d           ;cx kiek baitu bus skaitoma is failo      
  261.     MOV DX, OFFSET buf          
  262.     MOV AH, 3Fh ;skaitymas is failo
  263.     INT 21h
  264.     MOV file_size, AL
  265.    
  266.     mov kiek_perskaityta, 0
  267.     LEA SI, buf
  268.     inc kiek_perskaityta
  269. RET
  270. ENDP
  271. ;--------------------------------------------------------------------------------------------------------------------
  272. proc tipo_atpazinimas
  273.  
  274.     cmp byte ptr[si], 61h
  275.     jne toliau_atpazinimas
  276.     call proc_kom_popa
  277.     RET
  278.    
  279.     toliau_atpazinimas:
  280.     cmp byte ptr[si], 26h
  281.     je prefiksas_yra
  282.     cmp byte ptr[si], 2Eh
  283.     je prefiksas_yra
  284.     cmp byte ptr[si], 36h
  285.     je prefiksas_yra
  286.     cmp byte ptr[si], 26h
  287.     je prefiksas_yra
  288.     jmp prefikso_nera
  289.     prefiksas_yra:
  290.     inc si
  291.     inc kiek_perskaityta
  292.    
  293.     prefikso_nera:
  294.     LEA di, kom_pav
  295.     XOR ax, ax
  296.     mov al, byte ptr[si]
  297.     add di, ax
  298.    
  299.     mov dx, offset kom_jo
  300.     cmp byte ptr[si], 70h
  301.     je isvedimas_2
  302.     mov dx, offset kom_jno
  303.     cmp byte ptr[si], 71h
  304.     je isvedimas_3
  305.     MOV dx, offset kom_jb ;paduotu pointeri i reiksme, kuria noriu isvesti
  306.     cmp byte ptr[si], 72h
  307.     je isvedimas_2
  308.     mov dx, offset kom_jnb
  309.     cmp byte ptr[si], 73h
  310.     je isvedimas_3
  311.     mov dx, offset kom_je
  312.     cmp byte ptr[si], 74h
  313.     je isvedimas_2
  314.     MOV dx, offset kom_jne ;paduotu pointeri i reiksme, kuria noriu isvesti
  315.     cmp byte ptr[si], 75h
  316.     je isvedimas_3
  317.     mov dx, offset kom_jbe
  318.     cmp byte ptr[si], 76h
  319.     je isvedimas_3
  320.     mov dx, offset kom_ja
  321.     cmp byte ptr[si], 77h
  322.     je isvedimas_2
  323.     MOV dx, offset kom_js ;paduotu pointeri i reiksme, kuria noriu isvesti
  324.     cmp byte ptr[si], 78h
  325.     je isvedimas_2
  326.     mov dx, offset kom_jns
  327.     cmp byte ptr[si], 79h
  328.     je isvedimas_3
  329.     mov dx, offset kom_jp
  330.     cmp byte ptr[si], 7Ah
  331.     je isvedimas_2
  332.     MOV dx, offset kom_jnp ;paduotu pointeri i reiksme, kuria noriu isvesti
  333.     cmp byte ptr[si], 7Bh
  334.     je isvedimas_3
  335.     MOV dx, offset kom_jl ;paduotu pointeri i reiksme, kuria noriu isvesti
  336.     cmp byte ptr[si], 7Ch
  337.     je isvedimas_2
  338.     mov dx, offset kom_jnl
  339.     cmp byte ptr[si], 7Dh
  340.     je isvedimas_3
  341.     mov dx, offset kom_jng
  342.     cmp byte ptr[si], 7Eh
  343.     je isvedimas_3
  344.     MOV dx, offset kom_jg ;paduotu pointeri i reiksme, kuria noriu isvesti
  345.     cmp byte ptr[si], 7Fh
  346.     je isvedimas_2
  347.     jmp toliau
  348.     ;-----------------------------------------------------------------------------------------------
  349.     isvedimas_2:
  350.     add kiek_isvesta, 4d
  351.     mov cx, 4d
  352.     jmp isvedimas
  353.     isvedimas_3:
  354.     add kiek_isvesta, 5d
  355.     mov cx, 5d
  356.     jmp isvedimas
  357.     isvedimas:
  358.     MOV bx, file_handler_out
  359.     MOV ah, 40h ;rasymas i faila
  360.     INT 21h
  361. jmp tipu_nustatymas
  362. toliau:
  363.     mov cx, 6
  364.     add kiek_isvesta, 6
  365.     mov dx, offset kom_call
  366.     cmp byte ptr[si], 9Ah
  367.     je isvedimas
  368.     sub kiek_isvesta, 6
  369.     mov cx, 6
  370.     add kiek_isvesta, 6
  371.     mov dx, offset kom_call
  372.     cmp byte ptr[di], 13d
  373.     je isvedimas
  374.     mov dx, offset kom_loop
  375.     cmp byte ptr[di], 16d
  376.     je isvedimas
  377.     sub kiek_isvesta, 6
  378.     mov dx, offset kom_nez
  379.     mov cx, 10d
  380.     add kiek_isvesta, 10d
  381.     cmp byte ptr[di], 0h
  382.     je isvedimas
  383.     sub kiek_isvesta, 10d
  384.     mov dx, offset kom_add
  385.     cmp byte ptr[di], 1h
  386.     je isvedimas_3
  387.     add kiek_isvesta, 6d
  388.     mov cx, 6d
  389.     mov dx, offset kom_push
  390.     cmp byte ptr[di], 2h
  391.     je isvedimas
  392.     sub kiek_isvesta, 6d
  393.     mov dx, offset kom_pop
  394.     cmp byte ptr[di], 3h
  395.     je isvedimas_32
  396.     mov dx, offset kom_or
  397.     cmp byte ptr[di], 4h
  398.     je isvedimas_22
  399.     mov dx, offset kom_and
  400.     cmp byte ptr[di], 5h
  401.     je isvedimas_32
  402.     mov dx, offset kom_sub
  403.     cmp byte ptr[di], 6h
  404.     je isvedimas_32
  405.     mov dx, offset kom_xor
  406.     cmp byte ptr[di], 7h
  407.     je isvedimas_32
  408.     mov dx, offset kom_cmp
  409.     cmp byte ptr[di], 8h
  410.     je isvedimas_32
  411.     mov dx, offset kom_inc
  412.     cmp byte ptr[di], 9h
  413.     je isvedimas_32
  414.     mov dx, offset kom_dec
  415.     cmp byte ptr[di], 10d
  416.     je isvedimas_32
  417.     mov dx, offset kom_mov
  418.     cmp byte ptr[di], 12d
  419.     je isvedimas_32
  420.     mov dx, offset kom_ret
  421.     cmp byte ptr[di], 14d
  422.     je isvedimas_32
  423.     mov dx, offset kom_int
  424.     cmp byte ptr[di], 15d
  425.     je isvedimas_32
  426.     mov dx, offset kom_lea
  427.     cmp byte ptr[di], 18d
  428.     je isvedimas_32
  429.     mov dx, offset kom_jmp
  430.     cmp byte ptr[di], 19d
  431.     je isvedimas_32
  432. jmp tipu_nustatymas
  433. ;----prefixo iskvietimas
  434.     ;-----------------------------------------------------------------------------------------------
  435.     isvedimas_22:
  436.     add kiek_isvesta, 4h
  437.     mov cx, 4d
  438.     jmp isvedimas2
  439.     isvedimas_32:
  440.     add kiek_isvesta, 5h
  441.     mov cx, 5d
  442.     jmp isvedimas2
  443.     isvedimas2:
  444.     MOV bx, file_handler_out
  445.     MOV ah, 40h ;rasymas i faila
  446.     INT 21h
  447. tipu_nustatymas:
  448.     LEA di, komkodai
  449.     XOR ax, ax
  450.     mov al, byte ptr[si]
  451.     add di, ax
  452.    
  453.     CMP byte ptr[di], 0d
  454.     je kom_0
  455.     CMP byte ptr[di], 1d
  456.     je kom_1
  457.     CMP byte ptr[di], 2d
  458.     je kom_2
  459.     CMP byte ptr [di], 3d
  460.     je kom_3
  461.     CMP byte ptr [di], 4d
  462.     je kom_4
  463.     CMP byte ptr [di], 5d
  464.     je kom_5
  465.     CMP byte ptr[di], 6d
  466.     je kom_6
  467.     CMP byte ptr [di], 7d
  468.     je kom_7
  469.     CMP byte ptr [di], 8d
  470.     je kom_8
  471.     CMP byte ptr [di], 10d
  472.     je kom_10
  473.     CMP byte ptr [di], 11d
  474.     je kom_11
  475.     CMP byte ptr[di], 12d
  476.     je kom_12
  477.     CMP byte ptr[di], 13d
  478.     je kom_13
  479.     CMP byte ptr[di], 14d
  480.     je kom_14
  481.     CMP byte ptr[di], 15d
  482.     je kom_15
  483.     CMP byte ptr[di], 16d
  484.     je kom_16
  485.     CMP byte ptr[di], 17d
  486.     je kom_17
  487.     CMP byte ptr[di], 18d
  488.     je kom_18
  489.    
  490.     call proc_w
  491.     cmp byte ptr[si], 0FFh
  492.     je kom_11111111
  493.    
  494.     inc si
  495.     inc kiek_perskaityta
  496.     call proc_reg_2
  497.     jmp kom_4
  498.    
  499.     kom_11111111:
  500.    
  501.     inc si
  502.     inc kiek_perskaityta
  503.     call proc_reg_2
  504.     cmp reg, 1
  505.     jle kom_4
  506.     jmp kom_5
  507. RET
  508. ;--------------------------------------------------------------
  509. kom_0:
  510. call proc_kom_0
  511. RET
  512. kom_1:
  513. call proc_kom_1
  514. RET
  515. kom_2:
  516. call proc_kom_2
  517. RET
  518. kom_3:
  519. call proc_kom_3
  520. RET
  521. kom_4:
  522. call proc_kom_4
  523. RET
  524. kom_5:
  525. call proc_kom_5
  526. RET
  527. kom_6:
  528. call proc_kom_6
  529. RET
  530. kom_7:
  531. call proc_kom_7
  532. RET
  533. kom_8:
  534. call proc_kom_8
  535. RET
  536. kom_10:
  537. call proc_kom_10
  538. RET
  539. kom_11:
  540. call proc_kom_11
  541. RET
  542. kom_12:
  543. call proc_kom_12
  544. RET
  545. kom_13:
  546. call proc_kom_13
  547. RET
  548. kom_14:
  549. call proc_kom_14
  550. RET
  551. kom_15:
  552. call proc_kom_15
  553. RET
  554. kom_16:
  555. call proc_kom_16
  556. RET
  557. kom_17:
  558. call proc_kom_17
  559. RET
  560. kom_18:
  561. call proc_kom_18
  562. RET
  563. ENDP
  564. ;---------------------------------------------------------------------------------------------------------------------------
  565. ;---------------------------------------------------------------------------------------------------------------------------
  566. ;---------------------------------------------------------------------------------------------------------------------------
  567. proc proc_adreso_isvedimas
  568.  
  569.     lea di, buf2
  570.     mov ax, adresas
  571.     cmp kom, 10
  572.     je toliau6
  573.     add ax, kiek_pries_tai_perskaityta
  574.     mov adresas, ax
  575.    
  576.     cmp kom, 6
  577.     jne toliau6
  578.     cmp s, 0
  579.     jne toliau6
  580.     inc ax
  581.     toliau6:
  582.    
  583.     mov byte ptr[di], 48d
  584.    
  585.     add di, 3d
  586.    
  587.     mov bx, 10h
  588.     xor dx, dx
  589.     xor cx, cx
  590.    
  591.     Dalyba1:
  592.    
  593.     div bx      ;dalinam is 10h
  594.     mov byte ptr[di], dl
  595.     cmp dx, 9
  596.     ja virs_9
  597.     add byte ptr[di], 48d
  598.     jmp toliau2
  599.     virs_9:
  600.     add byte ptr[di], 55d
  601.     jmp toliau2
  602.     toliau2:
  603.     mov dx, 0   ;liekana isvaloma, kad i ja galima butu kraut ateities liekanas
  604.     dec di
  605.     cmp ax, 0   ;dalini lyginam su 0
  606.     jnz dalyba1  ;if  (al==0) kartojam steko daryma  
  607.  
  608.     add di, 5
  609.     mov byte ptr[di], 32d
  610.    
  611.     MOV dx, offset buf2 ;paduotu pointeri i reiksme, kuria noriu isvesti
  612.     add kiek_isvesta, 4h
  613.     mov cx, 4d
  614.     MOV bx, file_handler_out
  615.     MOV ah, 40h ;rasymas i faila
  616.     INT 21h
  617. RET
  618. ENDP
  619. ;------------------------------------------------------------------------------------------------------------------------
  620. proc proc_dalyba
  621.  
  622.     lea di, buf_nez
  623.     mov byte ptr[di], 30h
  624.     inc di
  625.     mov byte ptr[di], 30h
  626.    
  627.     lea di, buf_nez
  628.     xor ax, ax
  629.     mov al, byte ptr[si]
  630.     inc di
  631.    
  632.     mov bl, 10h
  633.     Dalyba:
  634.    
  635.     div bl      ;dalinam is 10h
  636.     mov byte ptr[di], ah
  637.     cmp ah, 9
  638.     ja virs_92
  639.     add byte ptr[di], 48d
  640.     jmp toliau1
  641.     virs_92:
  642.     add byte ptr[di], 55d
  643.     jmp toliau1
  644.     toliau1:
  645.     mov ah, 0   ;liekana isvaloma, kad i ja galima butu kraut ateities liekanas
  646.     dec di
  647.     cmp al, 0   ;dalini lyginam su 0
  648.     jnz dalyba  ;if  (al==0) kartojam steko daryma
  649. RET
  650. ENDP
  651. ;---------------------------------------------------------------------------------------------------------------------------
  652. proc proc_isvedimas
  653.     MOV bx, file_handler_out
  654.     MOV ah, 40h ;rasymas i faila
  655.     INT 21h
  656. RET
  657. ENDP
  658. ;----------------------------------------------------------------------------------------------------------------------------
  659. proc proc_mod_0_110
  660.  
  661.     call proc_skliaustas1
  662.     call proc_kom_78_isvedimas
  663.     call proc_skliaustas   
  664. RET
  665. ENDP
  666. ;-----------------------------------------------------------------------------------------------------------------------------
  667. proc proc_kom_popa
  668. mov y, 0
  669. mov cx, 6
  670. add kiek_isvesta, 6
  671. mov dx, offset kom_popa
  672. call proc_isvedimas
  673.  
  674. ;mov cx, 32d
  675. ;add kiek_isvesta, 32d
  676. ;mov dx, offset msg
  677. ;call proc_isvedimas
  678.  
  679. RET
  680. ENDP
  681. ;-------------------------
  682. proc proc_kom_0
  683.     mov y, 0
  684. RET
  685. ENDP
  686. ;----------------------------------------------------------------------------------------------------------------------------
  687. proc proc_kom_1
  688.  
  689. mov kom, 0
  690.  
  691. CALL proc_w
  692. CALL proc_d
  693.  
  694. inc si
  695. inc kiek_perskaityta
  696.  
  697. CALL proc_mod
  698. CALL proc_reg_2
  699. CALL proc_r_m
  700.  
  701. cmp d, 0h
  702. jne reg_r_m;is_registro_i_atminti
  703.  
  704. call proc_is_registro_i_atminti
  705. RET
  706.  
  707. reg_r_m:
  708. call proc_is_atminties_i_registra
  709. RET
  710. ENDP
  711. ;-----------------------------------------------------------------------------------------------------------------------------
  712. proc proc_kom_2
  713.  
  714.     call proc_w
  715.     mov reg, 0 ;dirbsime su akumuliatoriumi
  716.    
  717.    
  718.     call proc_registro_isvedimas
  719.     call proc_kablelis
  720.     call proc_tarpas
  721.    
  722.     inc si
  723.     inc kiek_perskaityta
  724.    
  725.     cmp w, 0
  726.     jne zodzio_isvedimas
  727.    
  728.     call proc_dalyba
  729.     add kiek_isvesta, 2h
  730.     mov cx, 2
  731.     mov dx, offset buf_nez
  732.     call proc_isvedimas
  733.     RET
  734.    
  735.     zodzio_isvedimas:
  736.     call proc_kom_78_isvedimas
  737.    
  738. RET
  739. ENDP
  740. ;------------------------------------------------------------------------------------------------------------------------------
  741. proc proc_kom_3
  742.     mov kom, 3
  743.     call proc_w
  744.     call proc_d
  745.  
  746.     inc si
  747.     inc kiek_perskaityta
  748.    
  749.     call proc_reg_2
  750.    
  751.     add kiek_isvesta, 5h
  752.     mov cx, 5
  753.     mov dx, offset kom_add
  754.     cmp reg, 0
  755.     je isvedimas_4
  756.    
  757.     mov dx, offset kom_and
  758.     cmp reg, 4
  759.     je isvedimas_4
  760.    
  761.     mov dx, offset kom_sub
  762.     cmp reg, 5
  763.     je isvedimas_4
  764.    
  765.     mov dx, offset kom_xor
  766.     cmp reg, 6
  767.     je isvedimas_4
  768.    
  769.     mov dx, offset kom_cmp
  770.     cmp reg, 7
  771.     je isvedimas_4
  772.    
  773.     dec kiek_isvesta
  774.     mov cx, 4
  775.     mov dx, offset kom_or
  776.    
  777.     isvedimas_4:
  778.    
  779.     call proc_isvedimas
  780.    
  781.     call proc_mod
  782.     call proc_r_m
  783.    
  784.     call proc_is_registro_i_atminti
  785.     call proc_kablelis
  786.     call proc_tarpas
  787.    
  788.     cmp w, 1
  789.     jne paprastas_isvedimas
  790.     cmp d, 0
  791.     je bitu_16_isvedimas
  792.    
  793.     paprastas_isvedimas:
  794.     inc si
  795.     inc kiek_perskaityta
  796.     call proc_dalyba
  797.    
  798.     add kiek_isvesta, 2
  799.     mov cx, 2
  800.     mov dx, offset buf_nez
  801.     call proc_isvedimas
  802.     RET
  803.    
  804.     bitu_16_isvedimas:
  805.     call proc_kom_78_isvedimas
  806. RET
  807. ENDP
  808. ;-------------------------------------------------------------------------------------------------------------------------------
  809. proc proc_kom_4
  810.    
  811.     mov kom, 4
  812.     call proc_r_m
  813.     call proc_mod
  814.  
  815.     mov al, r_m
  816.     mov reg, al
  817.    
  818.     add kiek_isvesta, 5
  819.     mov cx, 5
  820.     mov dx, offset kom_inc
  821.     cmp reg, 0
  822.     je isvedimas_5
  823.    
  824.     mov dx, offset kom_dec
  825.     cmp reg, 1
  826.     je isvedimas_5
  827.    
  828.     mov dx, offset kom_mul
  829.     cmp reg, 4
  830.     je isvedimas_5
  831.    
  832.     mov dx, offset kom_div
  833.     cmp reg, 6
  834.    
  835.     isvedimas_5:
  836.     call proc_isvedimas
  837.    
  838.     call proc_is_registro_i_atminti
  839. RET
  840. ENDP
  841. ;------------------------------------------------------------------------------------------------------------------------------
  842. proc proc_kom_5
  843.    
  844.     mov kom, 4
  845.     call proc_mod
  846.     call proc_r_m
  847.     mov w, 1
  848.     cmp reg, 3
  849.     je doubleword
  850.     cmp reg, 5
  851.     je doubleword
  852.     jmp isvedimas5
  853.    
  854.     doubleword:
  855.     mov w, 2
  856.    
  857.     isvedimas5:
  858.     add kiek_isvesta, 6
  859.     mov cx, 6
  860.     mov dx, offset kom_call
  861.     cmp reg, 3
  862.     jle isvedimas_6
  863.    
  864.     mov dx, offset kom_push
  865.     cmp reg, 6
  866.     je isvedimas_6
  867.    
  868.     dec kiek_isvesta
  869.     mov cx, 5
  870.     mov dx, offset kom_jmp
  871.    
  872.     isvedimas_6:
  873.     call proc_isvedimas
  874.     cmp mod_, 3
  875.     je isvedimas52
  876.    
  877.     mov cx, 8
  878.     add kiek_isvesta, 8
  879.     mov dx, offset pap_word_ptr
  880.     cmp w, 1
  881.     je isvedimas_ptr
  882.    
  883.     mov cx, 9
  884.     inc kiek_isvesta
  885.     mov dx, offset pap_dword_ptr
  886.    
  887.     isvedimas_ptr:
  888.     call proc_isvedimas
  889.    
  890.     isvedimas52:
  891.     call proc_is_registro_i_atminti  
  892. RET
  893. ENDP
  894. ;------------------------------------------------------------------------------------------------------------------------------
  895. proc proc_kom_6
  896.     mov kom, 6
  897.     inc si
  898.     inc kiek_perskaityta
  899.     mov ax, adresas
  900.     mov x, ax
  901.     xor cx, cx
  902.     mov cl, byte ptr[si]
  903.    
  904.     cmp cl, 128d
  905.     jae atimtis
  906.    
  907.     add adresas, cx
  908.     jmp isved
  909.    
  910.     atimtis:
  911.     mov dx, 257d
  912.     sub dx, cx
  913.     sub adresas, dx
  914.    
  915.     isved:
  916.     call proc_adreso_isvedimas
  917.     mov ax, x
  918.     mov adresas, ax
  919.    
  920.     mov kom, 0
  921.    
  922. RET
  923. ENDP
  924. ;-------------------------------------------------------------------------------------------------------------------------------
  925. proc proc_kom_7
  926. mov reg, 0
  927. call proc_w
  928.  
  929. call proc_skliaustas1
  930. call proc_kom_78_isvedimas
  931. call proc_skliaustas
  932.  
  933. call proc_kablelis
  934. call proc_tarpas
  935.  
  936. call proc_registro_isvedimas
  937.  
  938. RET
  939. ENDP
  940. ;------------------------------------------------------------------------------------------------------------------------------
  941. proc proc_kom_8
  942. mov reg, 0
  943. call proc_w
  944. call proc_registro_isvedimas
  945.  
  946. call proc_kablelis
  947. call proc_tarpas
  948.  
  949. call proc_skliaustas1
  950. call proc_kom_78_isvedimas
  951. call proc_skliaustas
  952. RET
  953. ENDP
  954. ;--------------------------------------------------------------------------------------------------------------------------
  955. proc proc_kom_10
  956. mov kom, 10
  957. call proc_call_jmp_tiesioginis
  958. mov kom, 0
  959. RET
  960. ENDP
  961. ;--------------------------------------------------------------------------------------------------------------------------
  962. proc proc_kom_11
  963.     call proc_seg
  964.     call proc_sreg_isvedimas
  965. RET
  966. ENDP
  967. ;---------------------------------------------------------------------------------------------------------------------------
  968. proc proc_kom_12
  969.     mov w, 1
  970.     call proc_reg
  971.     call proc_registro_isvedimas
  972. RET
  973. ENDP
  974. ;---------------------------------------------------------------------------------------------------------------------------
  975. proc proc_kom_13
  976.  
  977.     mov kom, 4
  978.     call proc_d
  979.     inc si
  980.     inc kiek_perskaityta
  981.    
  982.     mov al, byte ptr[si]
  983.     and al, 00001100b
  984.     mov sreg, al   
  985.     shr sreg, 2
  986.    
  987.     cmp d, 1
  988.     je is_atminties_i_sreg
  989.    
  990.     call proc_sreg_isvedimas
  991.     call proc_kablelis
  992.     call proc_tarpas
  993.     call proc_is_atminties_i_registra
  994.    
  995.     is_atminties_i_sreg:
  996.     call proc_is_atminties_i_registra
  997.     call proc_kablelis
  998.     call proc_tarpas
  999.     call proc_sreg_isvedimas
  1000. RET
  1001. ENDP
  1002. ;---------------------------------------------------------------------------------------------------------------------------
  1003. proc proc_kom_14
  1004.  
  1005.     call proc_tiesioginio_adreso_isvedimas
  1006.     call proc_tarpas
  1007.     call proc_tiesioginio_adreso_isvedimas
  1008. RET
  1009. ENDP
  1010. ;--------------------------------------------------------------------------------------------------------------------------
  1011. proc proc_kom_15
  1012.     call proc_w_2
  1013.     call proc_reg
  1014.     call proc_registro_isvedimas
  1015.     call proc_kablelis
  1016.     call proc_tarpas
  1017.    
  1018.     cmp w, 1
  1019.     je zodzio_isvedimas_15
  1020.    
  1021.     inc si
  1022.     inc kiek_perskaityta
  1023.     call proc_dalyba
  1024.     add kiek_isvesta, 2
  1025.     mov cx, 2
  1026.     mov dx, offset buf_nez
  1027.     call proc_isvedimas
  1028.     RET
  1029.    
  1030.     zodzio_isvedimas_15:
  1031.     add si, 2
  1032.     add kiek_perskaityta, 2
  1033.    
  1034.     call proc_dalyba
  1035.     add kiek_isvesta, 2
  1036.     mov cx, 2
  1037.     mov dx, offset buf_nez
  1038.     call proc_isvedimas
  1039.    
  1040.     dec si
  1041.    
  1042.     call proc_dalyba
  1043.     add kiek_isvesta, 2
  1044.     mov cx, 2
  1045.     mov dx, offset buf_nez
  1046.     call proc_isvedimas
  1047.    
  1048.     inc si
  1049. RET
  1050. ENDP
  1051. ;--------------------------------------------------------------------------------------------------------------------------
  1052. proc proc_kom_16
  1053.     call proc_w
  1054.     mov kom, 4
  1055.     call proc_is_registro_i_atminti
  1056.     call proc_tiesioginio_adreso_isvedimas
  1057. RET
  1058. ENDP
  1059. ;-------------------------------------------------------------------------------------------------------------------------
  1060. proc proc_kom_17
  1061.     mov kom, 4
  1062.     call proc_w
  1063.     inc si
  1064.     inc kiek_perskaityta
  1065.     call proc_is_registro_i_atminti
  1066.    
  1067.     cmp w, 1
  1068.     je zodzio_isvedimas_17
  1069.    
  1070.     call proc_dalyba
  1071.     inc si
  1072.     inc kiek_perskaityta
  1073.     call proc_dalyba
  1074.     add kiek_isvesta, 2
  1075.     mov cx, 2
  1076.     mov dx, offset buf_nez
  1077.     call proc_isvedimas
  1078.     RET
  1079.    
  1080.     zodzio_isvedimas_17:
  1081.     call proc_tiesioginio_adreso_isvedimas
  1082. RET
  1083. ENDP
  1084. ;--------------------------------------------------------------------------------------------------------------------------
  1085. proc proc_kom_18
  1086.     cmp byte ptr[si], 0CCh
  1087.     jne normalus_int
  1088.    
  1089.     mov x, 33h
  1090.     add kiek_isvesta, 1
  1091.     mov cx, 1
  1092.     mov dx, offset x
  1093.     call proc_isvedimas
  1094.    
  1095.     RET
  1096.     normalus_int:
  1097.     inc si
  1098.     inc kiek_perskaityta
  1099.    
  1100.     call proc_dalyba
  1101.     add kiek_isvesta, 2
  1102.     mov cx, 2
  1103.     mov dx, offset buf_nez
  1104.     call proc_isvedimas
  1105. RET
  1106. ENDP
  1107. ;--------------------------------------------------------------------------------------------------------------------------
  1108. proc proc_call_jmp_tiesioginis
  1109. mov ax, adresas
  1110. mov x, ax
  1111. xor ax, ax
  1112.  
  1113. cmp byte ptr[si], 0E8h
  1114. je vidinis
  1115. cmp byte ptr[si], 0E9h
  1116. je vidinis
  1117.  
  1118. inc si
  1119. inc kiek_perskaityta
  1120. mov adresas, 0
  1121. mov al, byte ptr[si]
  1122. xor ah, ah
  1123. add adresas, ax
  1124. mov cx, 100h
  1125. inc si
  1126. inc kiek_perskaityta
  1127. mov al, byte ptr[si]
  1128. sudetis_isorinis:
  1129. add adresas, ax
  1130. loop sudetis_isorinis
  1131. call proc_adreso_isvedimas
  1132. call proc_dvitaskis
  1133. call proc_skliaustas1
  1134.  
  1135. inc si
  1136. inc kiek_perskaityta
  1137. mov adresas, 0
  1138. mov al, byte ptr[si]
  1139. xor ah, ah
  1140. add adresas, ax
  1141. mov cx, 100h
  1142. inc si
  1143. inc kiek_perskaityta
  1144. mov al, byte ptr[si]
  1145. sudetis_isorinis2:
  1146. add adresas, ax
  1147. loop sudetis_isorinis2
  1148. call proc_adreso_isvedimas
  1149. call proc_skliaustas
  1150.  
  1151. mov ax, x
  1152. mov adresas, ax
  1153. RET
  1154.  
  1155. vidinis:
  1156. inc si
  1157. inc kiek_perskaityta
  1158.  
  1159. xor ax, ax
  1160. mov al, byte ptr[si]
  1161. xor cx, cx
  1162. mov cx, 100h
  1163. inc si
  1164. inc kiek_perskaityta
  1165. xor dx, dx
  1166. mov dl, byte ptr[si]
  1167. sudetis10:
  1168. add ax, dx
  1169. loop sudetis10
  1170.  
  1171. cmp ax, 32786d
  1172. jb paprasta_sudetis
  1173. mov cx, 32786d
  1174. sub ax, cx
  1175. sub cx, ax
  1176. sub adresas, cx
  1177. jmp isvedimas_call_jmp
  1178.  
  1179. paprasta_sudetis:
  1180. add adresas, ax
  1181. jmp isvedimas_call_jmp
  1182.  
  1183. isvedimas_call_jmp:
  1184. call proc_adreso_isvedimas
  1185.  
  1186. mov ax, x
  1187. mov adresas, ax
  1188. RET
  1189. ENDP
  1190. proc proc_kom_78_isvedimas
  1191.  
  1192.     add si, 2
  1193.     add kiek_perskaityta, 2
  1194.    
  1195.     mov i, 2
  1196.    
  1197.     ciklas_78:
  1198.     call proc_dalyba  
  1199.    
  1200.     MOV dx, offset buf_nez ;paduotu pointeri i reiksme, kuria noriu isvesti
  1201.     add kiek_isvesta, 2
  1202.     mov cx, 2d
  1203.     call proc_isvedimas
  1204.    
  1205.     dec i
  1206.     dec si
  1207.     cmp i, 0
  1208.     jne ciklas_78
  1209.    
  1210.     add si, 2
  1211. RET
  1212. ENDP
  1213. ;---------------------------------------------------------------------------------------------------------------------------
  1214. proc proc_sreg_isvedimas
  1215.     mov cx, 2
  1216.     add kiek_isvesta, 2
  1217.     mov dx, offset reg_es
  1218.     cmp sreg, 0
  1219.     je isvedimas_11
  1220.    
  1221.     mov dx, offset reg_cs
  1222.     cmp sreg, 1
  1223.     je isvedimas_11
  1224.    
  1225.     mov dx, offset reg_ss
  1226.     cmp sreg, 2
  1227.     je isvedimas_11
  1228.    
  1229.     mov dx, offset reg_ds
  1230.    
  1231.     isvedimas_11:
  1232.     call proc_isvedimas
  1233. RET
  1234. ENDP
  1235. ;--------------------------------------------------------------------------------------------------------------------------
  1236. proc proc_zenklas
  1237.  
  1238.     mov al, byte ptr[si]
  1239.     and al, 10000000b
  1240.     mov z, al  
  1241.    
  1242.     shr z, 7
  1243. RET
  1244. ENDP
  1245. proc proc_registro_isvedimas
  1246.     cmp w, 1
  1247.     jne zodis1
  1248.     lea di, reg2_buf
  1249.     jmp jump1
  1250.  
  1251.     zodis1:
  1252.     lea di, reg1_buf
  1253.    
  1254.     jump1:
  1255.    
  1256.     xor ax, ax
  1257.     mov al, reg
  1258.     add di, ax
  1259.     add di, ax
  1260.    
  1261.     MOV dx, di ;paduotu pointeri i reiksme, kuria noriu isvesti
  1262.     MOV CX, 2
  1263.     add kiek_isvesta, 2
  1264.     call proc_isvedimas
  1265. RET
  1266. ENDP
  1267. ;-------------------------------------------------------------------------------------------------------------------------------
  1268. proc proc_is_atminties_i_registra
  1269. cmp w, 1
  1270.  
  1271. jne zodis
  1272. lea di, reg2_buf
  1273. jmp jump
  1274.  
  1275. zodis:
  1276. lea di, reg1_buf
  1277.  
  1278. jump:
  1279.  
  1280.     CALL proc_registro_isvedimas
  1281.    
  1282.     call proc_kablelis
  1283.     call proc_tarpas
  1284.    
  1285.     cmp mod_, 0d
  1286.     jne ne_mod_0_110
  1287.     cmp r_m, 6d
  1288.     jne ne_mod_0_110
  1289.     CALL proc_mod_0_110
  1290. RET
  1291.     ne_mod_0_110:
  1292.    
  1293.     cmp mod_, 11b
  1294.     jne ne_mod_11
  1295.    
  1296.     mov al, r_m
  1297.     mov reg, al
  1298.     CALL proc_registro_isvedimas
  1299. RET
  1300.    
  1301.     ne_mod_11:
  1302.     CALL proc_poslinkio_pridejimas
  1303. RET
  1304. ENDP
  1305. ;---------------------------------------------------------------------------------------------------------------------------
  1306. proc proc_poslinkio_pridejimas
  1307.  
  1308.     lea di, r_m_buf
  1309.     xor ax, ax
  1310.     mov al, r_m
  1311.     add di, ax
  1312.     add di, ax
  1313.    
  1314.     call proc_skliaustas1
  1315.    
  1316.     add kiek_isvesta, 2
  1317.     mov cx, 2
  1318.     MOV dx, di ;paduotu pointeri i reiksme, kuria noriu isvesti
  1319.     call proc_isvedimas
  1320.    
  1321.     cmp r_m, 3
  1322.     ja lyginu_ar_mod_0
  1323.    
  1324.     add kiek_isvesta, 1
  1325.     mov cx, 1
  1326.     MOV dx, offset plius ;paduotu pointeri i reiksme, kuria noriu isvesti
  1327.     call proc_isvedimas
  1328.    
  1329.     lea di, r_m_buf2
  1330.     xor ax, ax
  1331.     mov al, r_m
  1332.     add di, ax
  1333.     add di, ax
  1334.    
  1335.     add kiek_isvesta, 2
  1336.     mov cx, 2
  1337.     MOV dx, di ;paduotu pointeri i reiksme, kuria noriu isvesti
  1338.     call proc_isvedimas
  1339.    
  1340.     lyginu_ar_mod_0:
  1341.      
  1342.     cmp mod_, 0
  1343.     jne lyginu_ar_mod_1
  1344.    
  1345.     call proc_skliaustas
  1346.    
  1347.     RET
  1348.     lyginu_ar_mod_1:
  1349.    
  1350.     cmp mod_, 1
  1351.     jne mod_10
  1352.    
  1353.     inc si
  1354.     inc kiek_perskaityta
  1355.    
  1356.     call proc_dalyba  
  1357.    
  1358.     call proc_pliusas
  1359.    
  1360.     add kiek_isvesta, 2
  1361.     MOV dx, offset buf_nez ;paduotu pointeri i reiksme, kuria noriu isvesti
  1362.     mov cx, 2d
  1363.     call proc_isvedimas
  1364.    
  1365.     call proc_skliaustas
  1366.     RET
  1367.    
  1368.     mod_10:
  1369.     call proc_pliusas
  1370.     call proc_kom_78_isvedimas
  1371.     call proc_skliaustas
  1372. RET
  1373. ENDP
  1374. ;-------------------------------------------------------------------------------------------------------------------------
  1375. proc proc_is_registro_i_atminti
  1376.  
  1377.     cmp mod_, 0d
  1378.     jne ne_mod_0_110_2
  1379.     cmp r_m, 6d
  1380.     jne ne_mod_0_110_2
  1381.     CALL proc_mod_0_110
  1382.     cmp kom, 3
  1383.     jl toliau_1
  1384.     RET
  1385.    
  1386.     toliau_1:
  1387.     jmp registro_isvedimas
  1388.    
  1389.     ne_mod_0_110_2:
  1390.    
  1391.     cmp mod_, 11b
  1392.     jne ne_mod_11_2
  1393.    
  1394.     mov al, reg
  1395.     mov i, al
  1396.     mov al, r_m
  1397.     mov reg, al
  1398.    
  1399.     CALL proc_registro_isvedimas
  1400.     mov al, i
  1401.     mov reg, al
  1402.     cmp kom, 3
  1403.     jl toliau_2
  1404.     RET
  1405.    
  1406.     toliau_2:
  1407.    
  1408.     jmp registro_isvedimas
  1409.    
  1410.     ne_mod_11_2:
  1411.     CALL proc_poslinkio_pridejimas
  1412.    
  1413.     cmp kom, 3
  1414.     jl registro_isvedimas
  1415.     RET
  1416.     registro_isvedimas:
  1417.    
  1418.     call proc_kablelis
  1419.     call proc_tarpas
  1420.    
  1421.     cmp kom, 3
  1422.     jne reg_isved
  1423.     RET
  1424.    
  1425.     reg_isved:
  1426.     call proc_registro_isvedimas
  1427. RET
  1428. ENDP
  1429. proc proc_tiesioginio_adreso_isvedimas
  1430. inc si
  1431. inc kiek_perskaityta
  1432.  
  1433. mov ax, adresas
  1434. mov x, ax
  1435. mov adresas, 0
  1436. xor ax, ax
  1437. mov al, byte ptr[si]
  1438. add adresas, ax
  1439.  
  1440. xor ax, ax
  1441. mov cx, 100
  1442. inc si
  1443. inc kiek_perskaityta
  1444. mov al, byte ptr[si]
  1445.  
  1446. sudetis:
  1447. add adresas, ax
  1448. loop sudetis
  1449.  
  1450. call proc_adreso_isvedimas
  1451.  
  1452. mov ax, x
  1453. mov adresas, ax
  1454. RET
  1455. ENDP
  1456. proc proc_kablelis
  1457.  
  1458.     mov dx, offset kablelis
  1459.     inc kiek_isvesta
  1460.     MOV CX, 1
  1461.     call proc_isvedimas
  1462. RET
  1463. ENDP
  1464. proc proc_tarpas
  1465.  
  1466.     mov dx, offset tarpas
  1467.     inc kiek_isvesta
  1468.     MOV CX, 1
  1469.     call proc_isvedimas
  1470. RET
  1471. ENDP
  1472. proc proc_w
  1473.    
  1474.     mov al, byte ptr[si]
  1475.     and al, 00000001b
  1476.     mov w, al
  1477.    
  1478. RET
  1479. ENDP
  1480. proc proc_d
  1481.     mov al, byte ptr[si]
  1482.     and al, 00000010b
  1483.     mov d, al
  1484.    
  1485.     shr d, 1
  1486. RET
  1487. ENDP
  1488. proc proc_reg
  1489.     mov al, byte ptr[si]
  1490.     and al, 00000111b
  1491.     mov reg, al        
  1492. RET
  1493. ENDP
  1494. proc proc_seg
  1495.     mov al, byte ptr[si]
  1496.     and al, 00011000b
  1497.     mov sreg, al   
  1498.     shr sreg, 3
  1499. RET
  1500. ENDP
  1501. proc proc_mod
  1502.     mov al, byte ptr[si]
  1503.     and al, 11000000b
  1504.     mov mod_, al   
  1505.    
  1506.     shr mod_, 6
  1507. RET
  1508. ENDP
  1509. proc proc_reg_2
  1510.     mov al, byte ptr[si]
  1511.     and al, 00111000b
  1512.     mov reg, al
  1513.    
  1514.     shr reg, 3
  1515. RET
  1516. ENDP
  1517. proc proc_r_m
  1518.     mov al, byte ptr[si]
  1519.     and al, 00000111b
  1520.     mov r_m, al
  1521. RET
  1522. ENDP
  1523. proc proc_w_2
  1524.     mov al, byte ptr[si]
  1525.     and al, 00001000b
  1526.     mov w, al  
  1527.     shr w, 3
  1528. RET
  1529. ENDP
  1530. proc proc_pliusas
  1531.     mov cx, 1
  1532.     inc kiek_isvesta
  1533.     MOV dx, offset plius ;paduotu pointeri i reiksme, kuria noriu isvesti
  1534.     call proc_isvedimas
  1535. RET
  1536. ENDP
  1537. proc proc_skliaustas
  1538.     mov cx, 1
  1539.     inc kiek_isvesta
  1540.     MOV dx, offset pap_d_sk ;paduotu pointeri i reiksme, kuria noriu isvesti
  1541.     call proc_isvedimas
  1542. RET
  1543. ENDP
  1544. proc proc_skliaustas1
  1545.     mov cx, 1
  1546.     inc kiek_isvesta
  1547.     MOV dx, offset pap_k_sk ;paduotu pointeri i reiksme, kuria noriu isvesti
  1548.     call proc_isvedimas
  1549. RET
  1550. ENDP
  1551. proc proc_rodykle
  1552.  
  1553.  mov ax, kiek_perskaityta
  1554.  add rodykle, ax
  1555.  mov kiek_perskaityta, 0
  1556.  
  1557.     mov ah, 42h
  1558.     mov al, 0 ; perkeliu nuo vidurio
  1559.     mov bx, file_handler_in
  1560.     mov cx, 0
  1561.     mov dx, rodykle
  1562.     int 21h
  1563. RET
  1564. ENDP
  1565. proc proc_enter
  1566.     mov cx, 2
  1567.     inc kiek_isvesta
  1568.     mov dx, offset enteris
  1569.     mov bx, file_handler_out
  1570.     mov ah, 40h
  1571.     int 21h
  1572. RET
  1573. ENDP
  1574. proc proc_skaiciavimai
  1575.     mov s, 1
  1576.     cmp y, 0
  1577.     jne toliau_skaiciavimai
  1578.     mov y, 1
  1579.     mov s, 0
  1580.    
  1581.     toliau_skaiciavimai:
  1582.     mov ax, kiek_perskaityta
  1583.     add rodykle, ax
  1584.     mov kiek_pries_tai_perskaityta, ax
  1585.     mov kiek_perskaityta, 0
  1586.     mov ax, rodykle
  1587.     sub kiek_liko, ax
  1588.     mov kiek_isvesta, 0
  1589. RET
  1590. ENDP
  1591. proc proc_kom_isved
  1592.     lea si, buf
  1593.     mov ax, kiek_perskaityta
  1594.     mov i, al
  1595.    
  1596.     ciklas_kom:
  1597.     call proc_dalyba
  1598.     mov cx, 2
  1599.     mov dx, offset buf_nez
  1600.     call proc_isvedimas
  1601.    
  1602.     inc si
  1603.     dec i
  1604.     cmp i, 0
  1605.     jne ciklas_kom
  1606. RET
  1607. ENDP
  1608. proc proc_dvitaskis
  1609.     mov cx, 1
  1610.     inc kiek_isvesta
  1611.     mov dx, offset dvitaskis
  1612.     call proc_isvedimas
  1613. RET
  1614. ENDP
  1615. proc proc_tarpai
  1616.     mov ax, 30
  1617.     sub ax, kiek_isvesta
  1618.     mov cx, ax
  1619.     mov dx, offset tarpai
  1620.     call proc_isvedimas
  1621. RET
  1622. ENDP
  1623.     program:
  1624.    
  1625.     MOV AX, @DATA                      
  1626.     MOV DS, AX
  1627.    
  1628.     CALL parametru_skait
  1629.     CALL failu_atidarymas
  1630.    
  1631.     main_ciklas:
  1632.     CALL proc_rodykle
  1633.     CALL buferio_papildymas
  1634.     cmp file_size, 0
  1635.     je baigti
  1636.     CALL proc_adreso_isvedimas
  1637.     CALL proc_dvitaskis
  1638.     CALL proc_tarpas
  1639.     CALL tipo_atpazinimas
  1640.     CALL proc_tarpai
  1641.     CALL proc_kom_isved
  1642.     CALL proc_enter
  1643.     CALL proc_skaiciavimai
  1644.     jmp main_ciklas
  1645.    
  1646.     baigti:
  1647.    
  1648.     MOV AX, 4C00h                        
  1649.     INT 21h
  1650.    
  1651. end program
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement