📄 exid.asm
字号:
jmp MoveRec
subttl Frame Store
page
MakeExe exIdEFStI2,opIdSt,ET_I2
SkipExHeader
MakeExe exIdIFSt2,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
pop [pFrame]
DispMac
MakeExe exIdEFStI4,opIdSt,ET_I4
SkipExHeader
MakeExe exIdIFSt4,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
pop [pFrame]
pop [pFrame+2]
DispMac
;Added with [18]
MakeExe exIdEFStR4,opIdSt,ET_R4
SkipExHeader
MakeExe exIdIFStR4,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
fstp dword ptr [pFrame]
fwait
DispMac
MakeExe exIdEFStR8,opIdSt,ET_R8
SkipExHeader
MakeExe exIdIFStR8,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
fstp qword ptr [pFrame]
fwait
DispMac
;End of [18]
MakeExe exIdEFStSD,opIdSt,ET_SD
SkipExHeader
MakeExe exIdIFStSD,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
mov ax,[pVarBx] ;Get oBP
add ax,bp ;ax = pSD
push ax ;Push pSD
CALLRT B$SASS,DispMov
MakeExe exIdIFStTyp,opIdSt,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
add ax,di ;oVar --> pVar
xchg bx,ax ;pVar to bx
xchg ax,di ;Save di in ax
mov di,[bx] ;Get oBP
add di,bp
mov bx,[bx-VAR_value].VAR_oTyp ;Get oTyp
push ss
jmp MoveRec
subttl Indirect Store
MakeExe exIdEIStI2,opIdSt,ET_I2
SkipExHeader
MakeExe exIdIISt2,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
mov bx,[pFrame] ;Near address to bx
pop [bx]
DispMac ;Dispatch to next executor
MakeExe exIdEIStI4,opIdSt,ET_I4
SkipExHeader
MakeExe exIdIISt4,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
mov bx,[pFrame] ;Near address to bx
pop [bx]
pop [bx+2]
DispMac ;Dispatch to next executor
;Added with [18]
MakeExe exIdEIStR4,opIdSt,ET_R4
SkipExHeader
MakeExe exIdIIStR4,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
mov bx,[pFrame] ;Near address to bx
fstp dword ptr [bx]
fwait
DispMac ;Dispatch to next executor
MakeExe exIdEIStR8,opIdSt,ET_R8
SkipExHeader
MakeExe exIdIIStR8,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
mov bx,[pFrame] ;Near address to bx
fstp qword ptr [bx]
fwait
DispMac ;Dispatch to next executor
;End of [18]
MakeExe exIdEIStSD,opIdSt,ET_SD
SkipExHeader
MakeExe exIdIIStSD,opIdSt,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
GetpFrame ;Get pointer into frame
push [pFrame] ; Push pSD/handle
CALLRT B$SASS,DispMov
MakeExe exIdIIStTyp,opIdSt,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
add ax,di ;oVar --> pVar
xchg bx,ax ;pVar to bx
xchg ax,di ;Save di in ax
mov di,[bx] ;Get oBP
mov bx,[bx-VAR_value].VAR_oTyp ;Get oTyp
push ds
mov di,[bp+di] ;Near address to di
jmp MoveRec
subttl Public IdRf Executors
page
;Added with [15]
;End of [15]
subttl Static IdRf Executors
page
MakeExe exIdISRfTyp,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
add ax,di ;oVar --> pVar
push ds ;Push far pointer
push ax
DispMac
MakeExe exIdESRfR8,opIdLd,ET_R8
SkipExHeader
MakeExe exIdESRfI4,opIdLd,ET_I4
SkipExHeader
MakeExe exIdESRfSD,opIdLd,ET_SD
SkipExHeader
MakeExe exIdESRfR4,opIdLd,ET_R4
SkipExHeader
MakeExe exIdESRfI2,opIdLd,ET_I2
SkipExHeader
MakeExe exIdISRf,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
add ax,di ;oVar --> pVar
push ax
DispMac
SameExe exIdISLdSD,exIdISRf
SameExe exIdESLdSD,exIdESRfSD
subttl Frame IdRf Executors
page
MakeExe exIdIFRfTyp,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax ;Move to base register
mov ax,[pVarBx] ;Get oFrame
add ax,bp ;oFrame to pValue
push ds
push ax
DispMac
MakeExe exIdEFRfR8,opIdLd,ET_R8
SkipExHeader
MakeExe exIdEFRfSD,opIdLd,ET_SD
SkipExHeader
MakeExe exIdEFRfI4,opIdLd,ET_I4
SkipExHeader
MakeExe exIdEFRfR4,opIdLd,ET_R4
SkipExHeader
MakeExe exIdEFRfI2,opIdLd,ET_I2
SkipExHeader
MakeExe exIdIFRf,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax ;Move to base register
mov ax,[pVarBx] ;Get oFrame
add ax,bp ;oFrame to pValue
push ax
DispMac
SameExe exIdIFLdSD,exIdIFRf
subttl Common IdRf Executors
page
MakeExe exIdICRfTyp,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax
mov ax,[pVarBx].COMREF_oValue ;Offset into common block
mov bx,[pVarBx].COMREF_oCommon ;oCommon
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,ax ;Offset in block
push ds
push bx
DispMac
MakeExe exIdECRfR8,opIdLd,ET_R8
SkipExHeader
MakeExe exIdECRfSD,opIdLd,ET_SD
SkipExHeader
MakeExe exIdECRfI4,opIdLd,ET_I4
SkipExHeader
MakeExe exIdECRfR4,opIdLd,ET_R4
SkipExHeader
MakeExe exIdECRfI2,opIdLd,ET_I2
SkipExHeader
MakeExe exIdICRf,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax
mov ax,[pVarBx].COMREF_oValue ;Offset into common block
mov bx,[pVarBx].COMREF_oCommon ;oCommon
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,ax ;Offset in block
push bx
DispMac
SameExe exIdICLdSD,exIdICRf
SameExe exIdECLdSD,exIdECRfSD
subttl FS load/store/ref executors
page
MakeExe exIdESRfFS,opIdLd,ET_SD
SkipExHeader
MakeExe exIdISRfFS,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
add ax,di ;oVar --> pVar
xchg bx,ax ;pVar to bx
push ds
push bx ;Far address to stack
push [bx-VAR_value].VAR_cbFixed ; Push length of FS
DispMac
MakeExe exIdEIRfFS,opIdLd,ET_SD
SkipExHeader
MakeExe exIdIIRfFS,opIdLd,ET_Imp
LODSWTX ;Get oVar
xchg ax,bx ;Move to base register
DbChk oVar,bx ; Check for valid oVar
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
GetpFrame ;Get pointer into frame
push ds
push [pFrame] ;Push offset
push ax ;Push cb in FS
DispMac
MakeExe exIdEFRfFS,opIdLd,ET_SD
SkipExHeader
MakeExe exIdIFRfFS,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax ;Move to base register
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
mov bx,[pVarBx] ;Get oFrame
add bx,bp ;oFrame to pFrame entry
push ss
push bx
push ax ;Push cb in FS
DispMac
MakeExe exIdESLdFS,opIdLd,ET_SD
SkipExHeader
MakeExe exIdISLdFS,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
add ax,di ;oVar --> pVar
xchg bx,ax ;pVar to bx
push ds
push bx ;Far address to stack
push [bx-VAR_value].VAR_cbFixed ; Push length of FS
CALLRT B$LDFS,DispMovSd
MakeExe exIdEILdFS,opIdLd,ET_SD
SkipExHeader
MakeExe exIdIILdFS,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax ;Move to base register
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
GetpFrame ;Get pointer into frame
push ds
push [pFrame] ;Push offset
push ax ;Push cb in FS
CALLRT B$LDFS,DispMovSd
MakeExe exIdEFLdFS,opIdLd,ET_SD
SkipExHeader
MakeExe exIdIFLdFS,opIdLd,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax ;Move to base register
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
mov bx,[pVarBx] ;Get oFrame
add bx,bp ;oFrame to pFrame entry
push ss
push bx
push ax ;Push cb in FS
CALLRT B$LDFS,DispMovSd
MakeExe exIdESStFS,opIdSt,ET_SD
SkipExHeader
MakeExe exIdISStFS,opIdSt,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
add ax,di ;oVar --> pVar
xchg bx,ax ;pVar to bx
push ds
push bx ;Far address to stack
push [bx-VAR_value].VAR_cbFixed ; Push length of FS
CALLRT B$LSET,Disp
MakeExe exIdEIStFS,opIdSt,ET_SD
SkipExHeader
MakeExe exIdIIStFS,opIdSt,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax ;Move to base register
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
GetpFrame ;Get pointer into frame
push ds
push [pFrame] ;Push offset
push ax ;Push cb in FS
CALLRT B$LSET,Disp
MakeExe exIdEFStFS,opIdSt,ET_SD
SkipExHeader
MakeExe exIdIFStFS,opIdSt,ET_Imp
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax ;Move to base register
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
mov bx,[pVarBx] ;Get oFrame
add bx,bp ;oFrame to pFrame entry
push ss
push bx
push ax ;Push cb in FS
CALLRT B$LSET,Disp
MakeExe exIdICRfFS,opIdLd,ET_Imp
SkipExHeader
MakeExe exIdECRfFS,opIdLd,ET_SD
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
mov cx,[pVarBx].COMREF_oValue ;Offset into common block
mov bx,[pVarBx].COMREF_oCommon ;oCommon
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,cx ;Offset in block
push ds
push bx
push ax ;Push cb in FS
DispMac
MakeExe exIdICLdFS,opIdLd,ET_Imp
SkipExHeader
MakeExe exIdECLdFS,opIdLd,ET_SD
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
mov cx,[pVarBx].COMREF_oValue ;Offset into common block
mov bx,[pVarBx].COMREF_oCommon ;oCommon
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,cx ;Offset in block
push ds
push bx
push ax ;Push cb in FS
CALLRT B$LDFS,DispMovSd
MakeExe exIdICStFS,opIdSt,ET_Imp
SkipExHeader
MakeExe exIdECStFS,opIdSt,ET_SD
LODSWTX ;Get oVar
DbChk oVar,ax ; Check for valid oVar
xchg bx,ax
mov ax,[pVarBx-VAR_value].VAR_cbFixed ; Get length
mov cx,[pVarBx].COMREF_oValue ;Offset into common block
mov bx,[pVarBx].COMREF_oCommon ;oCommon
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,cx ;Offset in block
push ds
push bx
push ax ;Push cb in FS
CALLRT B$LSET,Disp
SameExe exIdIIRf,exIdIFLd2
SameExe exIdEIRfI2,exIdEFLdI2
;*************************************************************************
MakeExe exStDim,opStDim
inc si
inc si ;Eat the operand
DispMac
sEnd CODE
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -