Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;A program that converts machine code back to the original Assembly code (a very low-level programming language)
- .MODEL small
- .STACK 200h
- .DATA
- pagalba db "Gretos Piliponytes (2 grupe) disasembleris.", 10, 13, "$"
- f_in db 100 dup(?)
- f_out db 100 dup(?)
- buf db 10 dup(?)
- 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
- par_error db "Parametrai neteisingi", 10, 13, "$"
- error_file_not_found db "Failas buvo nerastas", 10, 13, "$"
- f_padidarytas db "Failas sekmingai atidarytas", 10, 13, "$"
- error_file_not_created db "Nepavyko sukurti failo", 10, 13, "$"
- error_rasymas db "Nepavyko irasyt i faila", 10, 13, "$"
- msg db " POP AX, BX, CX, DX, DI, SI, BP, ESP"
- file_handler_in dw ?
- file_handler_out dw ?
- file_size db ?
- file_size2 db ?
- f_size dw ?
- par_sk db ?
- tarpai db 42 dup (' ')
- w db ?
- d db ?
- mod_ db ?
- reg db ?
- sreg db ?
- r_m db ?
- tarpas db ' '
- i db 2
- kom db ?
- z db ?
- x dw ?
- rodykle dw 0
- kiek_perskaityta dw 0
- kiek_liko dw 0
- kiek_pries_tai_perskaityta dw 0
- kiek_isvesta dw 0
- y db 0
- ;--------------------------------------------------------------------
- kom_mov db " MOV "
- kom_push db " PUSH ", 10, 13, "$"
- kom_pop db " POP ", 10, 13, "$"
- kom_add db " ADD "
- kom_inc db " INC ", 10, 13, "$"
- kom_sub db " SUB "
- kom_dec db " DEC ", 10, 13, "$"
- kom_cmp db " CMP "
- kom_mul db " MUL "
- kom_div db " DIV "
- kom_call db " CALL "
- kom_ret db " RET "
- kom_jmp db " JMP "
- kom_loop db " LOOP "
- kom_int db " INT "
- kom_nez db " NEZINOMA ", 10, 13, "$"
- kom_or db " OR "
- kom_and db " AND "
- kom_xor db " XOR "
- kom_lea db " LEA "
- kom_popa db " POPA "
- enteris db 13, 10
- ;----------------------------------------
- kom_jo db " JO "
- kom_jno db " JNO "
- kom_jb db " JB "
- kom_jnb db " JNB "
- kom_je db " JE "
- kom_jne db " JNE "
- kom_jbe db " JBE "
- kom_ja db " JA "
- kom_js db " JS "
- kom_jp db " JP "
- kom_jnp db " JNP "
- kom_jl db " JL "
- kom_jns db " JNS "
- kom_jnl db " JNL "
- kom_jng db " JNG "
- kom_jg db " JG "
- ;-----------------------------------------
- pap_byte_ptr db "byte ptr"
- pap_word_ptr db "word ptr"
- pap_dword_ptr db "dword ptr"
- pap_k_sk db "["
- pap_d_sk db "]"
- kablelis db ","
- plius db "+"
- minus db "-"
- dvitaskis db ":"
- ;----------------------------------------
- reg_ax db "AX"
- reg_bx db "BX"
- reg_cx db "CX"
- reg_dx db "DX"
- reg_al db "AL"
- reg_bl db "BL"
- reg_cl db "CL"
- reg_dl db "DL"
- reg_ah db "AH"
- reg_bh db "BH"
- reg_ch db "CH"
- reg_dh db "DH"
- reg_si db "SI"
- reg_di db "DI"
- reg_cs db "CS"
- reg_ss db "SS"
- reg_es db "ES"
- reg_ds db "DS"
- reg_sf db "SF"
- reg_sp db "SP"
- reg_bp db "BP"
- s db ?
- ;-----------------------------------------------------------------------------
- buf2 db ' ', ' ', ' ', ' '
- buf22 db ' ', ' ', ' ', ' '
- adresas2 dw ?
- adresas dw 256
- buf_nez db 0, 0
- reg1_buf db "AL", "CL", "DL", "BL", "AH", "CH", "DH", "BH"
- reg2_buf db "AX", "CX", "DX", "BX", "SP", "BP", "SI", "DI"
- r_m_buf2 db "SI", "DI", "SI", "DI"
- r_m_buf db "BX", "BX", "BP", "BP", "SI", "DI", "BP", "BX"
- kom_isved_buf db 16 dup (?)
- 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
- .CODE
- PROC parametru_skait
- XOR CX, CX
- MOV CL, ES:[0080h] ;cl priskiriame parametru kieki
- CMP CL, 4h ;jei parametru maziau nei 4, reiskiasi jie neteisingi
- JL parametru_error ;
- MOV BX, 0082h
- help_ciklas:
- MOV DX, word ptr ES:[BX]
- CMP DX, '?/'
- JE pagalbos_zinute
- INC BX
- INC BX
- loop help_ciklas
- nuskaitymas:
- LEA DI, f_in
- MOV BX, 0082h
- pirmo_par_skait:
- MOV DL, byte ptr ES:[BX]
- CMP DL, 20h
- JE pirmo_par_pabaiga
- MOV byte ptr[DI], DL
- INC DI
- INC BX
- JMP pirmo_par_skait
- pirmo_par_pabaiga:
- MOV byte ptr[DI], 0
- LEA DI, f_out
- INC BX
- antro_par_skait:
- MOV DL, byte ptr ES:[BX]
- CMP DL, 13
- JE antro_par_pabaiga
- MOV byte ptr[DI], DL
- INC BX
- INC DI
- JMP antro_par_skait
- antro_par_pabaiga:
- MOV byte ptr[DI], 0
- RET
- parametru_error:
- MOV AH, 09h
- MOV DX, OFFSET par_error
- INT 21h
- RET
- pagalbos_zinute:
- MOV AH, 09h
- MOV DX, OFFSET pagalba
- INT 21h
- jmp baigti
- RET
- ENDP
- PROC failu_atidarymas
- MOV AH, 3Dh ;failo atidarymas
- MOV AL, 0h ;0- naudojamas skaitymui
- MOV DX, OFFSET f_in
- INT 21h
- JC failas_nerastas
- MOV file_handler_in, AX ;jei failas sekmingai atidarytas, jam priskiriama AX reiksme
- MOV AH, 09h
- MOV DX, OFFSET f_padidarytas
- INT 21h
- MOV CX, 0h
- MOV DX, OFFSET f_out
- MOV AH, 3Ch ;failo sukurimas
- INT 21h
- JNC failas_sukurtas_gerai
- MOV DX, OFFSET error_file_not_created
- MOV AH, 09h
- INT 21h
- RET
- failas_sukurtas_gerai:
- MOV AL, 1h ;1-rasymas
- MOV DX, OFFSET f_out
- MOV AH, 3Dh ;failo atidarymas
- INT 21h
- MOV file_handler_out, AX
- JC error_file_not_found_f
- RET
- error_file_not_found_f:
- MOV DX, OFFSET error_file_not_found
- MOV AH, 09h
- INT 21h
- RET
- failas_nerastas:
- MOV AH, 09h
- MOV DX, OFFSET error_file_not_found
- INT 21h
- jmp baigti
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------
- PROC buferio_papildymas
- MOV BX, file_handler_in ;bx - handleris
- MOV CX, 10d ;cx kiek baitu bus skaitoma is failo
- MOV DX, OFFSET buf
- MOV AH, 3Fh ;skaitymas is failo
- INT 21h
- MOV file_size, AL
- mov kiek_perskaityta, 0
- LEA SI, buf
- inc kiek_perskaityta
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------
- proc tipo_atpazinimas
- cmp byte ptr[si], 61h
- jne toliau_atpazinimas
- call proc_kom_popa
- RET
- toliau_atpazinimas:
- cmp byte ptr[si], 26h
- je prefiksas_yra
- cmp byte ptr[si], 2Eh
- je prefiksas_yra
- cmp byte ptr[si], 36h
- je prefiksas_yra
- cmp byte ptr[si], 26h
- je prefiksas_yra
- jmp prefikso_nera
- prefiksas_yra:
- inc si
- inc kiek_perskaityta
- prefikso_nera:
- LEA di, kom_pav
- XOR ax, ax
- mov al, byte ptr[si]
- add di, ax
- mov dx, offset kom_jo
- cmp byte ptr[si], 70h
- je isvedimas_2
- mov dx, offset kom_jno
- cmp byte ptr[si], 71h
- je isvedimas_3
- MOV dx, offset kom_jb ;paduotu pointeri i reiksme, kuria noriu isvesti
- cmp byte ptr[si], 72h
- je isvedimas_2
- mov dx, offset kom_jnb
- cmp byte ptr[si], 73h
- je isvedimas_3
- mov dx, offset kom_je
- cmp byte ptr[si], 74h
- je isvedimas_2
- MOV dx, offset kom_jne ;paduotu pointeri i reiksme, kuria noriu isvesti
- cmp byte ptr[si], 75h
- je isvedimas_3
- mov dx, offset kom_jbe
- cmp byte ptr[si], 76h
- je isvedimas_3
- mov dx, offset kom_ja
- cmp byte ptr[si], 77h
- je isvedimas_2
- MOV dx, offset kom_js ;paduotu pointeri i reiksme, kuria noriu isvesti
- cmp byte ptr[si], 78h
- je isvedimas_2
- mov dx, offset kom_jns
- cmp byte ptr[si], 79h
- je isvedimas_3
- mov dx, offset kom_jp
- cmp byte ptr[si], 7Ah
- je isvedimas_2
- MOV dx, offset kom_jnp ;paduotu pointeri i reiksme, kuria noriu isvesti
- cmp byte ptr[si], 7Bh
- je isvedimas_3
- MOV dx, offset kom_jl ;paduotu pointeri i reiksme, kuria noriu isvesti
- cmp byte ptr[si], 7Ch
- je isvedimas_2
- mov dx, offset kom_jnl
- cmp byte ptr[si], 7Dh
- je isvedimas_3
- mov dx, offset kom_jng
- cmp byte ptr[si], 7Eh
- je isvedimas_3
- MOV dx, offset kom_jg ;paduotu pointeri i reiksme, kuria noriu isvesti
- cmp byte ptr[si], 7Fh
- je isvedimas_2
- jmp toliau
- ;-----------------------------------------------------------------------------------------------
- isvedimas_2:
- add kiek_isvesta, 4d
- mov cx, 4d
- jmp isvedimas
- isvedimas_3:
- add kiek_isvesta, 5d
- mov cx, 5d
- jmp isvedimas
- isvedimas:
- MOV bx, file_handler_out
- MOV ah, 40h ;rasymas i faila
- INT 21h
- jmp tipu_nustatymas
- toliau:
- mov cx, 6
- add kiek_isvesta, 6
- mov dx, offset kom_call
- cmp byte ptr[si], 9Ah
- je isvedimas
- sub kiek_isvesta, 6
- mov cx, 6
- add kiek_isvesta, 6
- mov dx, offset kom_call
- cmp byte ptr[di], 13d
- je isvedimas
- mov dx, offset kom_loop
- cmp byte ptr[di], 16d
- je isvedimas
- sub kiek_isvesta, 6
- mov dx, offset kom_nez
- mov cx, 10d
- add kiek_isvesta, 10d
- cmp byte ptr[di], 0h
- je isvedimas
- sub kiek_isvesta, 10d
- mov dx, offset kom_add
- cmp byte ptr[di], 1h
- je isvedimas_3
- add kiek_isvesta, 6d
- mov cx, 6d
- mov dx, offset kom_push
- cmp byte ptr[di], 2h
- je isvedimas
- sub kiek_isvesta, 6d
- mov dx, offset kom_pop
- cmp byte ptr[di], 3h
- je isvedimas_32
- mov dx, offset kom_or
- cmp byte ptr[di], 4h
- je isvedimas_22
- mov dx, offset kom_and
- cmp byte ptr[di], 5h
- je isvedimas_32
- mov dx, offset kom_sub
- cmp byte ptr[di], 6h
- je isvedimas_32
- mov dx, offset kom_xor
- cmp byte ptr[di], 7h
- je isvedimas_32
- mov dx, offset kom_cmp
- cmp byte ptr[di], 8h
- je isvedimas_32
- mov dx, offset kom_inc
- cmp byte ptr[di], 9h
- je isvedimas_32
- mov dx, offset kom_dec
- cmp byte ptr[di], 10d
- je isvedimas_32
- mov dx, offset kom_mov
- cmp byte ptr[di], 12d
- je isvedimas_32
- mov dx, offset kom_ret
- cmp byte ptr[di], 14d
- je isvedimas_32
- mov dx, offset kom_int
- cmp byte ptr[di], 15d
- je isvedimas_32
- mov dx, offset kom_lea
- cmp byte ptr[di], 18d
- je isvedimas_32
- mov dx, offset kom_jmp
- cmp byte ptr[di], 19d
- je isvedimas_32
- jmp tipu_nustatymas
- ;----prefixo iskvietimas
- ;-----------------------------------------------------------------------------------------------
- isvedimas_22:
- add kiek_isvesta, 4h
- mov cx, 4d
- jmp isvedimas2
- isvedimas_32:
- add kiek_isvesta, 5h
- mov cx, 5d
- jmp isvedimas2
- isvedimas2:
- MOV bx, file_handler_out
- MOV ah, 40h ;rasymas i faila
- INT 21h
- tipu_nustatymas:
- LEA di, komkodai
- XOR ax, ax
- mov al, byte ptr[si]
- add di, ax
- CMP byte ptr[di], 0d
- je kom_0
- CMP byte ptr[di], 1d
- je kom_1
- CMP byte ptr[di], 2d
- je kom_2
- CMP byte ptr [di], 3d
- je kom_3
- CMP byte ptr [di], 4d
- je kom_4
- CMP byte ptr [di], 5d
- je kom_5
- CMP byte ptr[di], 6d
- je kom_6
- CMP byte ptr [di], 7d
- je kom_7
- CMP byte ptr [di], 8d
- je kom_8
- CMP byte ptr [di], 10d
- je kom_10
- CMP byte ptr [di], 11d
- je kom_11
- CMP byte ptr[di], 12d
- je kom_12
- CMP byte ptr[di], 13d
- je kom_13
- CMP byte ptr[di], 14d
- je kom_14
- CMP byte ptr[di], 15d
- je kom_15
- CMP byte ptr[di], 16d
- je kom_16
- CMP byte ptr[di], 17d
- je kom_17
- CMP byte ptr[di], 18d
- je kom_18
- call proc_w
- cmp byte ptr[si], 0FFh
- je kom_11111111
- inc si
- inc kiek_perskaityta
- call proc_reg_2
- jmp kom_4
- kom_11111111:
- inc si
- inc kiek_perskaityta
- call proc_reg_2
- cmp reg, 1
- jle kom_4
- jmp kom_5
- RET
- ;--------------------------------------------------------------
- kom_0:
- call proc_kom_0
- RET
- kom_1:
- call proc_kom_1
- RET
- kom_2:
- call proc_kom_2
- RET
- kom_3:
- call proc_kom_3
- RET
- kom_4:
- call proc_kom_4
- RET
- kom_5:
- call proc_kom_5
- RET
- kom_6:
- call proc_kom_6
- RET
- kom_7:
- call proc_kom_7
- RET
- kom_8:
- call proc_kom_8
- RET
- kom_10:
- call proc_kom_10
- RET
- kom_11:
- call proc_kom_11
- RET
- kom_12:
- call proc_kom_12
- RET
- kom_13:
- call proc_kom_13
- RET
- kom_14:
- call proc_kom_14
- RET
- kom_15:
- call proc_kom_15
- RET
- kom_16:
- call proc_kom_16
- RET
- kom_17:
- call proc_kom_17
- RET
- kom_18:
- call proc_kom_18
- RET
- ENDP
- ;---------------------------------------------------------------------------------------------------------------------------
- ;---------------------------------------------------------------------------------------------------------------------------
- ;---------------------------------------------------------------------------------------------------------------------------
- proc proc_adreso_isvedimas
- lea di, buf2
- mov ax, adresas
- cmp kom, 10
- je toliau6
- add ax, kiek_pries_tai_perskaityta
- mov adresas, ax
- cmp kom, 6
- jne toliau6
- cmp s, 0
- jne toliau6
- inc ax
- toliau6:
- mov byte ptr[di], 48d
- add di, 3d
- mov bx, 10h
- xor dx, dx
- xor cx, cx
- Dalyba1:
- div bx ;dalinam is 10h
- mov byte ptr[di], dl
- cmp dx, 9
- ja virs_9
- add byte ptr[di], 48d
- jmp toliau2
- virs_9:
- add byte ptr[di], 55d
- jmp toliau2
- toliau2:
- mov dx, 0 ;liekana isvaloma, kad i ja galima butu kraut ateities liekanas
- dec di
- cmp ax, 0 ;dalini lyginam su 0
- jnz dalyba1 ;if (al==0) kartojam steko daryma
- add di, 5
- mov byte ptr[di], 32d
- MOV dx, offset buf2 ;paduotu pointeri i reiksme, kuria noriu isvesti
- add kiek_isvesta, 4h
- mov cx, 4d
- MOV bx, file_handler_out
- MOV ah, 40h ;rasymas i faila
- INT 21h
- RET
- ENDP
- ;------------------------------------------------------------------------------------------------------------------------
- proc proc_dalyba
- lea di, buf_nez
- mov byte ptr[di], 30h
- inc di
- mov byte ptr[di], 30h
- lea di, buf_nez
- xor ax, ax
- mov al, byte ptr[si]
- inc di
- mov bl, 10h
- Dalyba:
- div bl ;dalinam is 10h
- mov byte ptr[di], ah
- cmp ah, 9
- ja virs_92
- add byte ptr[di], 48d
- jmp toliau1
- virs_92:
- add byte ptr[di], 55d
- jmp toliau1
- toliau1:
- mov ah, 0 ;liekana isvaloma, kad i ja galima butu kraut ateities liekanas
- dec di
- cmp al, 0 ;dalini lyginam su 0
- jnz dalyba ;if (al==0) kartojam steko daryma
- RET
- ENDP
- ;---------------------------------------------------------------------------------------------------------------------------
- proc proc_isvedimas
- MOV bx, file_handler_out
- MOV ah, 40h ;rasymas i faila
- INT 21h
- RET
- ENDP
- ;----------------------------------------------------------------------------------------------------------------------------
- proc proc_mod_0_110
- call proc_skliaustas1
- call proc_kom_78_isvedimas
- call proc_skliaustas
- RET
- ENDP
- ;-----------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_popa
- mov y, 0
- mov cx, 6
- add kiek_isvesta, 6
- mov dx, offset kom_popa
- call proc_isvedimas
- ;mov cx, 32d
- ;add kiek_isvesta, 32d
- ;mov dx, offset msg
- ;call proc_isvedimas
- RET
- ENDP
- ;-------------------------
- proc proc_kom_0
- mov y, 0
- RET
- ENDP
- ;----------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_1
- mov kom, 0
- CALL proc_w
- CALL proc_d
- inc si
- inc kiek_perskaityta
- CALL proc_mod
- CALL proc_reg_2
- CALL proc_r_m
- cmp d, 0h
- jne reg_r_m;is_registro_i_atminti
- call proc_is_registro_i_atminti
- RET
- reg_r_m:
- call proc_is_atminties_i_registra
- RET
- ENDP
- ;-----------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_2
- call proc_w
- mov reg, 0 ;dirbsime su akumuliatoriumi
- call proc_registro_isvedimas
- call proc_kablelis
- call proc_tarpas
- inc si
- inc kiek_perskaityta
- cmp w, 0
- jne zodzio_isvedimas
- call proc_dalyba
- add kiek_isvesta, 2h
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- RET
- zodzio_isvedimas:
- call proc_kom_78_isvedimas
- RET
- ENDP
- ;------------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_3
- mov kom, 3
- call proc_w
- call proc_d
- inc si
- inc kiek_perskaityta
- call proc_reg_2
- add kiek_isvesta, 5h
- mov cx, 5
- mov dx, offset kom_add
- cmp reg, 0
- je isvedimas_4
- mov dx, offset kom_and
- cmp reg, 4
- je isvedimas_4
- mov dx, offset kom_sub
- cmp reg, 5
- je isvedimas_4
- mov dx, offset kom_xor
- cmp reg, 6
- je isvedimas_4
- mov dx, offset kom_cmp
- cmp reg, 7
- je isvedimas_4
- dec kiek_isvesta
- mov cx, 4
- mov dx, offset kom_or
- isvedimas_4:
- call proc_isvedimas
- call proc_mod
- call proc_r_m
- call proc_is_registro_i_atminti
- call proc_kablelis
- call proc_tarpas
- cmp w, 1
- jne paprastas_isvedimas
- cmp d, 0
- je bitu_16_isvedimas
- paprastas_isvedimas:
- inc si
- inc kiek_perskaityta
- call proc_dalyba
- add kiek_isvesta, 2
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- RET
- bitu_16_isvedimas:
- call proc_kom_78_isvedimas
- RET
- ENDP
- ;-------------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_4
- mov kom, 4
- call proc_r_m
- call proc_mod
- mov al, r_m
- mov reg, al
- add kiek_isvesta, 5
- mov cx, 5
- mov dx, offset kom_inc
- cmp reg, 0
- je isvedimas_5
- mov dx, offset kom_dec
- cmp reg, 1
- je isvedimas_5
- mov dx, offset kom_mul
- cmp reg, 4
- je isvedimas_5
- mov dx, offset kom_div
- cmp reg, 6
- isvedimas_5:
- call proc_isvedimas
- call proc_is_registro_i_atminti
- RET
- ENDP
- ;------------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_5
- mov kom, 4
- call proc_mod
- call proc_r_m
- mov w, 1
- cmp reg, 3
- je doubleword
- cmp reg, 5
- je doubleword
- jmp isvedimas5
- doubleword:
- mov w, 2
- isvedimas5:
- add kiek_isvesta, 6
- mov cx, 6
- mov dx, offset kom_call
- cmp reg, 3
- jle isvedimas_6
- mov dx, offset kom_push
- cmp reg, 6
- je isvedimas_6
- dec kiek_isvesta
- mov cx, 5
- mov dx, offset kom_jmp
- isvedimas_6:
- call proc_isvedimas
- cmp mod_, 3
- je isvedimas52
- mov cx, 8
- add kiek_isvesta, 8
- mov dx, offset pap_word_ptr
- cmp w, 1
- je isvedimas_ptr
- mov cx, 9
- inc kiek_isvesta
- mov dx, offset pap_dword_ptr
- isvedimas_ptr:
- call proc_isvedimas
- isvedimas52:
- call proc_is_registro_i_atminti
- RET
- ENDP
- ;------------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_6
- mov kom, 6
- inc si
- inc kiek_perskaityta
- mov ax, adresas
- mov x, ax
- xor cx, cx
- mov cl, byte ptr[si]
- cmp cl, 128d
- jae atimtis
- add adresas, cx
- jmp isved
- atimtis:
- mov dx, 257d
- sub dx, cx
- sub adresas, dx
- isved:
- call proc_adreso_isvedimas
- mov ax, x
- mov adresas, ax
- mov kom, 0
- RET
- ENDP
- ;-------------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_7
- mov reg, 0
- call proc_w
- call proc_skliaustas1
- call proc_kom_78_isvedimas
- call proc_skliaustas
- call proc_kablelis
- call proc_tarpas
- call proc_registro_isvedimas
- RET
- ENDP
- ;------------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_8
- mov reg, 0
- call proc_w
- call proc_registro_isvedimas
- call proc_kablelis
- call proc_tarpas
- call proc_skliaustas1
- call proc_kom_78_isvedimas
- call proc_skliaustas
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_10
- mov kom, 10
- call proc_call_jmp_tiesioginis
- mov kom, 0
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_11
- call proc_seg
- call proc_sreg_isvedimas
- RET
- ENDP
- ;---------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_12
- mov w, 1
- call proc_reg
- call proc_registro_isvedimas
- RET
- ENDP
- ;---------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_13
- mov kom, 4
- call proc_d
- inc si
- inc kiek_perskaityta
- mov al, byte ptr[si]
- and al, 00001100b
- mov sreg, al
- shr sreg, 2
- cmp d, 1
- je is_atminties_i_sreg
- call proc_sreg_isvedimas
- call proc_kablelis
- call proc_tarpas
- call proc_is_atminties_i_registra
- is_atminties_i_sreg:
- call proc_is_atminties_i_registra
- call proc_kablelis
- call proc_tarpas
- call proc_sreg_isvedimas
- RET
- ENDP
- ;---------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_14
- call proc_tiesioginio_adreso_isvedimas
- call proc_tarpas
- call proc_tiesioginio_adreso_isvedimas
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_15
- call proc_w_2
- call proc_reg
- call proc_registro_isvedimas
- call proc_kablelis
- call proc_tarpas
- cmp w, 1
- je zodzio_isvedimas_15
- inc si
- inc kiek_perskaityta
- call proc_dalyba
- add kiek_isvesta, 2
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- RET
- zodzio_isvedimas_15:
- add si, 2
- add kiek_perskaityta, 2
- call proc_dalyba
- add kiek_isvesta, 2
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- dec si
- call proc_dalyba
- add kiek_isvesta, 2
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- inc si
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_16
- call proc_w
- mov kom, 4
- call proc_is_registro_i_atminti
- call proc_tiesioginio_adreso_isvedimas
- RET
- ENDP
- ;-------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_17
- mov kom, 4
- call proc_w
- inc si
- inc kiek_perskaityta
- call proc_is_registro_i_atminti
- cmp w, 1
- je zodzio_isvedimas_17
- call proc_dalyba
- inc si
- inc kiek_perskaityta
- call proc_dalyba
- add kiek_isvesta, 2
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- RET
- zodzio_isvedimas_17:
- call proc_tiesioginio_adreso_isvedimas
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------------
- proc proc_kom_18
- cmp byte ptr[si], 0CCh
- jne normalus_int
- mov x, 33h
- add kiek_isvesta, 1
- mov cx, 1
- mov dx, offset x
- call proc_isvedimas
- RET
- normalus_int:
- inc si
- inc kiek_perskaityta
- call proc_dalyba
- add kiek_isvesta, 2
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------------
- proc proc_call_jmp_tiesioginis
- mov ax, adresas
- mov x, ax
- xor ax, ax
- cmp byte ptr[si], 0E8h
- je vidinis
- cmp byte ptr[si], 0E9h
- je vidinis
- inc si
- inc kiek_perskaityta
- mov adresas, 0
- mov al, byte ptr[si]
- xor ah, ah
- add adresas, ax
- mov cx, 100h
- inc si
- inc kiek_perskaityta
- mov al, byte ptr[si]
- sudetis_isorinis:
- add adresas, ax
- loop sudetis_isorinis
- call proc_adreso_isvedimas
- call proc_dvitaskis
- call proc_skliaustas1
- inc si
- inc kiek_perskaityta
- mov adresas, 0
- mov al, byte ptr[si]
- xor ah, ah
- add adresas, ax
- mov cx, 100h
- inc si
- inc kiek_perskaityta
- mov al, byte ptr[si]
- sudetis_isorinis2:
- add adresas, ax
- loop sudetis_isorinis2
- call proc_adreso_isvedimas
- call proc_skliaustas
- mov ax, x
- mov adresas, ax
- RET
- vidinis:
- inc si
- inc kiek_perskaityta
- xor ax, ax
- mov al, byte ptr[si]
- xor cx, cx
- mov cx, 100h
- inc si
- inc kiek_perskaityta
- xor dx, dx
- mov dl, byte ptr[si]
- sudetis10:
- add ax, dx
- loop sudetis10
- cmp ax, 32786d
- jb paprasta_sudetis
- mov cx, 32786d
- sub ax, cx
- sub cx, ax
- sub adresas, cx
- jmp isvedimas_call_jmp
- paprasta_sudetis:
- add adresas, ax
- jmp isvedimas_call_jmp
- isvedimas_call_jmp:
- call proc_adreso_isvedimas
- mov ax, x
- mov adresas, ax
- RET
- ENDP
- proc proc_kom_78_isvedimas
- add si, 2
- add kiek_perskaityta, 2
- mov i, 2
- ciklas_78:
- call proc_dalyba
- MOV dx, offset buf_nez ;paduotu pointeri i reiksme, kuria noriu isvesti
- add kiek_isvesta, 2
- mov cx, 2d
- call proc_isvedimas
- dec i
- dec si
- cmp i, 0
- jne ciklas_78
- add si, 2
- RET
- ENDP
- ;---------------------------------------------------------------------------------------------------------------------------
- proc proc_sreg_isvedimas
- mov cx, 2
- add kiek_isvesta, 2
- mov dx, offset reg_es
- cmp sreg, 0
- je isvedimas_11
- mov dx, offset reg_cs
- cmp sreg, 1
- je isvedimas_11
- mov dx, offset reg_ss
- cmp sreg, 2
- je isvedimas_11
- mov dx, offset reg_ds
- isvedimas_11:
- call proc_isvedimas
- RET
- ENDP
- ;--------------------------------------------------------------------------------------------------------------------------
- proc proc_zenklas
- mov al, byte ptr[si]
- and al, 10000000b
- mov z, al
- shr z, 7
- RET
- ENDP
- proc proc_registro_isvedimas
- cmp w, 1
- jne zodis1
- lea di, reg2_buf
- jmp jump1
- zodis1:
- lea di, reg1_buf
- jump1:
- xor ax, ax
- mov al, reg
- add di, ax
- add di, ax
- MOV dx, di ;paduotu pointeri i reiksme, kuria noriu isvesti
- MOV CX, 2
- add kiek_isvesta, 2
- call proc_isvedimas
- RET
- ENDP
- ;-------------------------------------------------------------------------------------------------------------------------------
- proc proc_is_atminties_i_registra
- cmp w, 1
- jne zodis
- lea di, reg2_buf
- jmp jump
- zodis:
- lea di, reg1_buf
- jump:
- CALL proc_registro_isvedimas
- call proc_kablelis
- call proc_tarpas
- cmp mod_, 0d
- jne ne_mod_0_110
- cmp r_m, 6d
- jne ne_mod_0_110
- CALL proc_mod_0_110
- RET
- ne_mod_0_110:
- cmp mod_, 11b
- jne ne_mod_11
- mov al, r_m
- mov reg, al
- CALL proc_registro_isvedimas
- RET
- ne_mod_11:
- CALL proc_poslinkio_pridejimas
- RET
- ENDP
- ;---------------------------------------------------------------------------------------------------------------------------
- proc proc_poslinkio_pridejimas
- lea di, r_m_buf
- xor ax, ax
- mov al, r_m
- add di, ax
- add di, ax
- call proc_skliaustas1
- add kiek_isvesta, 2
- mov cx, 2
- MOV dx, di ;paduotu pointeri i reiksme, kuria noriu isvesti
- call proc_isvedimas
- cmp r_m, 3
- ja lyginu_ar_mod_0
- add kiek_isvesta, 1
- mov cx, 1
- MOV dx, offset plius ;paduotu pointeri i reiksme, kuria noriu isvesti
- call proc_isvedimas
- lea di, r_m_buf2
- xor ax, ax
- mov al, r_m
- add di, ax
- add di, ax
- add kiek_isvesta, 2
- mov cx, 2
- MOV dx, di ;paduotu pointeri i reiksme, kuria noriu isvesti
- call proc_isvedimas
- lyginu_ar_mod_0:
- cmp mod_, 0
- jne lyginu_ar_mod_1
- call proc_skliaustas
- RET
- lyginu_ar_mod_1:
- cmp mod_, 1
- jne mod_10
- inc si
- inc kiek_perskaityta
- call proc_dalyba
- call proc_pliusas
- add kiek_isvesta, 2
- MOV dx, offset buf_nez ;paduotu pointeri i reiksme, kuria noriu isvesti
- mov cx, 2d
- call proc_isvedimas
- call proc_skliaustas
- RET
- mod_10:
- call proc_pliusas
- call proc_kom_78_isvedimas
- call proc_skliaustas
- RET
- ENDP
- ;-------------------------------------------------------------------------------------------------------------------------
- proc proc_is_registro_i_atminti
- cmp mod_, 0d
- jne ne_mod_0_110_2
- cmp r_m, 6d
- jne ne_mod_0_110_2
- CALL proc_mod_0_110
- cmp kom, 3
- jl toliau_1
- RET
- toliau_1:
- jmp registro_isvedimas
- ne_mod_0_110_2:
- cmp mod_, 11b
- jne ne_mod_11_2
- mov al, reg
- mov i, al
- mov al, r_m
- mov reg, al
- CALL proc_registro_isvedimas
- mov al, i
- mov reg, al
- cmp kom, 3
- jl toliau_2
- RET
- toliau_2:
- jmp registro_isvedimas
- ne_mod_11_2:
- CALL proc_poslinkio_pridejimas
- cmp kom, 3
- jl registro_isvedimas
- RET
- registro_isvedimas:
- call proc_kablelis
- call proc_tarpas
- cmp kom, 3
- jne reg_isved
- RET
- reg_isved:
- call proc_registro_isvedimas
- RET
- ENDP
- proc proc_tiesioginio_adreso_isvedimas
- inc si
- inc kiek_perskaityta
- mov ax, adresas
- mov x, ax
- mov adresas, 0
- xor ax, ax
- mov al, byte ptr[si]
- add adresas, ax
- xor ax, ax
- mov cx, 100
- inc si
- inc kiek_perskaityta
- mov al, byte ptr[si]
- sudetis:
- add adresas, ax
- loop sudetis
- call proc_adreso_isvedimas
- mov ax, x
- mov adresas, ax
- RET
- ENDP
- proc proc_kablelis
- mov dx, offset kablelis
- inc kiek_isvesta
- MOV CX, 1
- call proc_isvedimas
- RET
- ENDP
- proc proc_tarpas
- mov dx, offset tarpas
- inc kiek_isvesta
- MOV CX, 1
- call proc_isvedimas
- RET
- ENDP
- proc proc_w
- mov al, byte ptr[si]
- and al, 00000001b
- mov w, al
- RET
- ENDP
- proc proc_d
- mov al, byte ptr[si]
- and al, 00000010b
- mov d, al
- shr d, 1
- RET
- ENDP
- proc proc_reg
- mov al, byte ptr[si]
- and al, 00000111b
- mov reg, al
- RET
- ENDP
- proc proc_seg
- mov al, byte ptr[si]
- and al, 00011000b
- mov sreg, al
- shr sreg, 3
- RET
- ENDP
- proc proc_mod
- mov al, byte ptr[si]
- and al, 11000000b
- mov mod_, al
- shr mod_, 6
- RET
- ENDP
- proc proc_reg_2
- mov al, byte ptr[si]
- and al, 00111000b
- mov reg, al
- shr reg, 3
- RET
- ENDP
- proc proc_r_m
- mov al, byte ptr[si]
- and al, 00000111b
- mov r_m, al
- RET
- ENDP
- proc proc_w_2
- mov al, byte ptr[si]
- and al, 00001000b
- mov w, al
- shr w, 3
- RET
- ENDP
- proc proc_pliusas
- mov cx, 1
- inc kiek_isvesta
- MOV dx, offset plius ;paduotu pointeri i reiksme, kuria noriu isvesti
- call proc_isvedimas
- RET
- ENDP
- proc proc_skliaustas
- mov cx, 1
- inc kiek_isvesta
- MOV dx, offset pap_d_sk ;paduotu pointeri i reiksme, kuria noriu isvesti
- call proc_isvedimas
- RET
- ENDP
- proc proc_skliaustas1
- mov cx, 1
- inc kiek_isvesta
- MOV dx, offset pap_k_sk ;paduotu pointeri i reiksme, kuria noriu isvesti
- call proc_isvedimas
- RET
- ENDP
- proc proc_rodykle
- mov ax, kiek_perskaityta
- add rodykle, ax
- mov kiek_perskaityta, 0
- mov ah, 42h
- mov al, 0 ; perkeliu nuo vidurio
- mov bx, file_handler_in
- mov cx, 0
- mov dx, rodykle
- int 21h
- RET
- ENDP
- proc proc_enter
- mov cx, 2
- inc kiek_isvesta
- mov dx, offset enteris
- mov bx, file_handler_out
- mov ah, 40h
- int 21h
- RET
- ENDP
- proc proc_skaiciavimai
- mov s, 1
- cmp y, 0
- jne toliau_skaiciavimai
- mov y, 1
- mov s, 0
- toliau_skaiciavimai:
- mov ax, kiek_perskaityta
- add rodykle, ax
- mov kiek_pries_tai_perskaityta, ax
- mov kiek_perskaityta, 0
- mov ax, rodykle
- sub kiek_liko, ax
- mov kiek_isvesta, 0
- RET
- ENDP
- proc proc_kom_isved
- lea si, buf
- mov ax, kiek_perskaityta
- mov i, al
- ciklas_kom:
- call proc_dalyba
- mov cx, 2
- mov dx, offset buf_nez
- call proc_isvedimas
- inc si
- dec i
- cmp i, 0
- jne ciklas_kom
- RET
- ENDP
- proc proc_dvitaskis
- mov cx, 1
- inc kiek_isvesta
- mov dx, offset dvitaskis
- call proc_isvedimas
- RET
- ENDP
- proc proc_tarpai
- mov ax, 30
- sub ax, kiek_isvesta
- mov cx, ax
- mov dx, offset tarpai
- call proc_isvedimas
- RET
- ENDP
- program:
- MOV AX, @DATA
- MOV DS, AX
- CALL parametru_skait
- CALL failu_atidarymas
- main_ciklas:
- CALL proc_rodykle
- CALL buferio_papildymas
- cmp file_size, 0
- je baigti
- CALL proc_adreso_isvedimas
- CALL proc_dvitaskis
- CALL proc_tarpas
- CALL tipo_atpazinimas
- CALL proc_tarpai
- CALL proc_kom_isved
- CALL proc_enter
- CALL proc_skaiciavimai
- jmp main_ciklas
- baigti:
- MOV AX, 4C00h
- INT 21h
- end program
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement