📄 asm.inc
字号:
db 3
dw cpop
dw _sreg
db 7, 0
dw _reg16
db 58h,0
dw _rm
db 08Fh, 6
db 1
dw clea
dw _r_m16
db 8Dh, 0
db 1
dw cles
dw _r_m16
db 0C4h, 0
db 1
dw clds
dw _r_m16
db 0C5h, 0
db 2
dw cinc
dw _reg16
db 40h,0
dw _rm
db 0FEh, 0
db 2
dw cdec
dw _reg16
db 48h,0
dw _rm
db 0FEh, 1
db 1
dw cmul
dw _rm
db 0F6h, 100b
db 1
dw cimul
dw _rm
db 0F6h, 101b
db 1
dw cdiv
dw _rm
db 0F6h, 110b
db 1
dw cidiv
dw _rm
db 0F6h, 111b
db 1
dw cneg
dw _rm
db 0F6h, 011b
db 1
dw cnot
dw _rm
db 0F6h, 010b
db 2
dw cxchg
dw _a_reg
db 90h, 0
dw _r_rm
db 86h, 0
db 1
dw cesc
dw _esc
db 0D8h, 0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
db 1
dw cdb
dw _db
db 0, 0
db 1
dw cdw
dw _dw
db 0, 0
db 2
dw caam
dw _im8
db 0D4h, 0
dw _imn
db 0D4h, 0Ah
db 2
dw caad
dw _im8
db 0D5h, 0
dw _imn
db 0D5h, 0Ah
db 1
dw cdaa
dw _noparam
db 27h,0
db 1
dw cdas
dw _noparam
db 2Fh,0
db 1
dw caaa
dw _noparam
db 37h,0
db 1
dw caas
dw _noparam
db 3Fh,0
db 1
dw cnop
dw _noparam
db 90h,0
db 1
dw ccbw
dw _noparam
db 98h,0
db 1
dw ccwd
dw _noparam
db 99h,0
db 1
dw cwait
dw _noparam
db 9Bh,0
db 1
dw cpushf
dw _noparam
db 9Ch,0
db 1
dw cpopf
dw _noparam
db 9Dh,0
db 1
dw csahf
dw _noparam
db 9Eh,0
db 1
dw clahf
dw _noparam
db 9Fh,0
db 1
dw cmovsb
dw _noparam
db 0A4h,-1
db 1
dw cmovsw
dw _noparam
db 0A5h,-1
db 1
dw ccmpsb
dw _noparam
db 0A6h,-1
db 1
dw ccmpsw
dw _noparam
db 0A7h,-1
db 1
dw cstosb
dw _noparam
db 0AAh,-1
db 1
dw cstosw
dw _noparam
db 0ABh,-1
db 1
dw clodsb
dw _noparam
db 0ACh,-1
db 1
dw clodsw
dw _noparam
db 0ADh,-1
db 1
dw cscasb
dw _noparam
db 0AEh,-1
db 1
dw cscasw
dw _noparam
db 0AFh,-1
db 2
dw cret
dw _im16
db 0C2h, 0
dw _noparam
db 0C3h,0
db 2
dw cretn
dw _im16
db 0C2h, 0
dw _noparam
db 0C3h,0
db 2
dw cretf
dw _im16
db 0CAh, 0
dw _noparam
db 0CBh,0
db 1
dw cint3
dw _noparam
db 0CCh,0
db 1
dw cint
dw _im8ch3
db 0CDh, 0
db 1
dw cinto
dw _noparam
db 0CEh,0
db 1
dw ciret
dw _noparam
db 0CFh,0
db 1
dw cxlat
dw _noparam
db 0D7h,0
db 1
dw plock
dw _noparam
db 0F0h,0
db 1
dw chlt
dw _noparam
db 0F4h,0
db 1
dw ccmc
dw _noparam
db 0F5h,0
db 1
dw cclc
dw _noparam
db 0F8h,0
db 1
dw cstc
dw _noparam
db 0F9h,0
db 1
dw ccli
dw _noparam
db 0FAh,0
db 1
dw csti
dw _noparam
db 0FBh,0
db 1
dw ccld
dw _noparam
db 0FCh,0
db 1
dw cstd
dw _noparam
db 0FDh,0
diff_types:
db 1
dw cshl
dw _rm_cl_1
db 0D0h, 100b
db 1
dw csal
dw _rm_cl_1
db 0D0h, 100b
db 1
dw cshr
dw _rm_cl_1
db 0D0h, 101b
db 1
dw csar
dw _rm_cl_1
db 0D0h, 111b
db 1
dw crol
dw _rm_cl_1
db 0D0h, 000b
db 1
dw cror
dw _rm_cl_1
db 0D0h, 001b
db 1
dw crcl
dw _rm_cl_1
db 0D0h, 010b
db 1
dw crcr
dw _rm_cl_1
db 0D0h, 011b
db 2
dw cin
dw _a_dx
db 0ECh, 0
dw _a_im8
db 0E4h, 0
db 2
dw cout
dw _dx_a
db 0EEh, 0
dw _im8_a
db 0E6h, 0
jumps_and_calls:
db 4
dw cjmp
dw _short
db 0EBh, 0
dw _near
db 0E9h, 0
dw _far
db 0EAh, 0
dw _rmj
db 0FFh, 100b
db 3
dw ccall
dw _near
db 0E8h, 0
dw _far
db 9Ah, 0
dw _rmj
db 0FFh, 010b
db 1
dw cjo
dw _short
db 070h, 0
db 1
dw cjno
dw _short
db 071h, 0
db 1
dw cjb
dw _short
db 072h, 0
db 1
dw cjc
dw _short
db 072h, 0
db 1
dw cjnae
dw _short
db 072h, 0
db 1
dw cjnb
dw _short
db 073h, 0
db 1
dw cjnc
dw _short
db 073h, 0
db 1
dw cjae
dw _short
db 073h, 0
db 1
dw cje
dw _short
db 074h, 0
db 1
dw cjz
dw _short
db 074h, 0
db 1
dw cjne
dw _short
db 075h, 0
db 1
dw cjnz
dw _short
db 075h, 0
db 1
dw cjbe
dw _short
db 076h, 0
db 1
dw cjna
dw _short
db 076h, 0
db 1
dw cjnbe
dw _short
db 077h, 0
db 1
dw cja
dw _short
db 077h, 0
db 1
dw cjs
dw _short
db 078h, 0
db 1
dw cjns
dw _short
db 079h, 0
db 1
dw cjp
dw _short
db 07Ah, 0
db 1
dw cjpe
dw _short
db 07Ah, 0
db 1
dw cjnp
dw _short
db 07Bh, 0
db 1
dw cjpo
dw _short
db 07Bh, 0
db 1
dw cjl
dw _short
db 07Ch, 0
db 1
dw cjnge
dw _short
db 07Ch, 0
db 1
dw cjnl
dw _short
db 07Dh, 0
db 1
dw cjge
dw _short
db 07Dh, 0
db 1
dw cjle
dw _short
db 07Eh, 0
db 1
dw cjng
dw _short
db 07Eh, 0
db 1
dw cjnle
dw _short
db 07Fh, 0
db 1
dw cjg
dw _short
db 07Fh, 0
db 1
dw cloop
dw _short
db 0E2h, 0
db 1
dw cloopne
dw _short
db 0E0h, 0
db 1
dw cloopnz
dw _short
db 0E0h, 0
db 1
dw cloope
dw _short
db 0E1h, 0
db 1
dw cloopz
dw _short
db 0E1h, 0
db 1
dw cjcxz
dw _short
db 0E3h, 0
rep_prefixes:
db 1
dw crep
dw 0
db 0F3h, 0
db 1
dw crepe
dw 0
db 0F3h, 0
db 1
dw crepz
dw 0
db 0F3h, 0
db 1
dw crepne
dw 0
db 0F2h, 0
db 1
dw crepnz
dw 0
db 0F2h, 0
;~comment #
;~Asm286table ;~label byte
;~ db 1
;~ dw cpusha
;~ dw _noparam
;~ db 60h, 0
;~
;~ db 1
;~ dw cpopa
;~ dw _noparam
;~ db 61h, 0
;~
;~ db 1
;~ dw cbound
;~ dw _r_m16
;~ db 62h, 0
;~
;~ db 1
;~ dw carpl
;~ dw _rm_r16
;~#
db 0 ; End of table
;=============================================================================
; _r_m16
;-----------------------------------------------------------------------------
_r_m16:
cmp bx,0100h
jne @@quit
cmp cl,-1
je @@quit
test cl,1000b
jz @@quit
mov byte [lxx_flag],1
jmp _r_rm2
@@quit:
or sp,sp
ret
;=============================================================================
; _r_rm
;-----------------------------------------------------------------------------
_r_rm:
mov byte [lxx_flag],0
_r_rm2:
cmp byte [param_count],2
jne ..@_r_rm_q ;jump out of range
cmp bx,0001h
je ..@_r_rm_m_r
cmp bx,0100h
je ..@_r_rm_r_m
or bx,bx
jne ..@_r_rm_q
@@r_r:
cmp cl,-1
je ..@_r_rm_q
cmp ch,-1
je ..@_r_rm_q
mov byte [di],2
cmp byte [lxx_flag],1
je @@l1
call add_word_flag
@@l1:
mov [di+1],al
call make_modrm
;; mov al,cl
; and al,0111b
; or al,11000000b
and ch,0111b
shl ch,1
shl ch,1
shl ch,1
or al,ch
mov [di+2],al
jmp ..@_r_rm_ok
..@_r_rm_q:
exit_zf_clear:
or sp,sp
ret
..@_r_rm_ok:
cmp ax,ax
ret
..@_r_rm_m_r:
cmp ch,-1
je ..@_r_rm_q
@@make_modrm:
cmp byte [lxx_flag],1
je @@l2
call add_word_flag
@@l2:
mov [di+1],al
call make_modrm
mov dx,[parameter_1+AP_VALUE]
add ah,2
mov [di],ah
@@set_reg:
mov [di+3],dx
mov ah,[parameter_2+AP_REG_NUMBER]
and ah,0111b
shl ah,1
shl ah,1
shl ah,1
or al,ah
mov [di+2],al
jmp ..@_r_rm_ok
..@_r_rm_r_m:
cmp cl,-1
je ..@_r_rm_q
cmp byte [lxx_flag],1
je @@7
or al,2
@@7:
call swap_parameters
xchg cl,ch
jmp @@make_modrm
;=============================================================================
; _a_im
;-----------------------------------------------------------------------------
_a_im:
cmp byte [param_count],2
jne @@quit
cmp cl,0ffh
je exit_zf_clear
and cl,0111b
cmp cl,regAL
jne @@quit
cmp bh,0
jne @@quit
call add_word_flag
mov dx,[parameter_2+AP_VALUE]
or ah,ah
jnz @@1
call check_byte
jz @@1
or dh,dh
jnz jump_to_big_num_error ;jump out of range
@@1:
add ah,2
mov [di],ah
mov [di+1],al
mov [di+2],dx
cmp ax,ax
@@quit:
ret
;=============================================================================
; _rm_im1
;-----------------------------------------------------------------------------
_rm_im1:
mov byte [mov_flag],1
jmp _rm_im2
;=============================================================================
; _db
;-----------------------------------------------------------------------------
_db:
cmp byte [param_count],1
jne @@quit
or bl,bl
jnz @@quit
cmp cl,-1
jne @@quit
mov ax,[parameter_1+AP_VALUE]
or ah,ah
jnz jump_to_big_num_error ;jump out of range
mov byte [di],1
mov [di+1],al
@@quit:
ret
;=============================================================================
; _rm_im
;-----------------------------------------------------------------------------
_rm_im:
mov byte [mov_flag],0
_rm_im2:
cmp byte [param_count],2
jne @@quit
cmp ch,0ffh
jne @@quit
cmp bx,0001h
je @@m_i
or bx,bx
jnz @@quit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -