?? exaid.asm
字號:
jz AStSD
jmp IndexCountErr
;Frame
MakeExe exAIdEFStSD,opAIdSt,ET_SD
SkipExHeader
MakeExe exAIdIFStSD,opAIdSt,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov bx,[pVarBx+AFRAME_oFrame]
add bx,bp ;bx = pointer to array descriptor
jmp short AStSD
;public
;Static
MakeExe exAIdESStSD,opAIdSt,ET_SD
SkipExHeader
MakeExe exAIdISStSD,opAIdSt,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Operand
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
lea bx,[pVarBx].ASTAT_ad ;ds:bx = array descriptor address
AStSd:
call ResolveArray ;resolve to segment and offset in dx:bx
push bx ;Push pSD
CALLRT B$SASS,DispMov
subttl FS load/store executors
page
MakeExe exAIdESRfFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdISRfFS,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;Operand
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
lea bx,[pVarBx].ASTAT_ad ;ds:bx = array descriptor address
FsRf:
call ResolveArray ;resolve to segment and offset in dx:bx
push dx ;Push segment
push bx ; and offset
mov bx,PTRTX[si-2] ;Get oVar again
push [pVarBx-VAR_value].VAR_cbFixed ; Push length of FS
DispMac
MakeExe exAIdEIRfFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdIIRfFS,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
GetpFrame
mov bx,[pFrame] ;bx = pointer to array descriptor
cmp cl,[bx].AD_cDims ;Correct number of indices?
jz FsRf
jmp IndexCountErr
MakeExe exAIdEFRfFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdIFRfFS,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov bx,[pVarBx+AFRAME_oFrame]
add bx,bp ;bx = pointer to array descriptor
jmp FsRf
MakeExe exAIdECRfFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdICRfFS,opAIdLd,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Get oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov dx,[pVarBx].ACOM_oValue ;Offset into common block
test byte ptr [pVarBx-VAR_value].VAR_fStat,FV_STATIC
;Is the array $STATIC?
mov bx,[pVarBx].ACOM_oCommon ;oCommon
jz @F
add bx,COM_bdType - COM_bdValue ;Adjust to point to type table
@@:
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,dx ;Offset in block
jmp FsRf
MakeExe exAIdESLdFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdISLdFS,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;Operand
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
lea bx,[pVarBx].ASTAT_ad ;ds:bx = array descriptor address
FsLd:
call ResolveArray ;resolve to segment and offset in dx:bx
push dx ;Push segment
push bx ; and offset
mov bx,PTRTX[si-2] ;Get oVar again
push [pVarBx-VAR_value].VAR_cbFixed ; Push length of FS
CALLRT B$LDFS,DispMovSd
MakeExe exAIdEILdFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdIILdFS,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
GetpFrame
mov bx,[pFrame] ;bx = pointer to array descriptor
cmp cl,[bx].AD_cDims ;Correct number of indices?
jz FsLd
jmp IndexCountErr
MakeExe exAIdEFLdFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdIFLdFS,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov bx,[pVarBx+AFRAME_oFrame]
add bx,bp ;bx = pointer to array descriptor
jmp FsLd
MakeExe exAIdECLdFS,opAIdLd,ET_SD
SkipExHeader
MakeExe exAIdICLdFS,opAIdLd,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Get oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov dx,[pVarBx].ACOM_oValue ;Offset into common block
test byte ptr [pVarBx-VAR_value].VAR_fStat,FV_STATIC
;Is the array $STATIC?
mov bx,[pVarBx].ACOM_oCommon ;oCommon
jz @F
add bx,COM_bdType - COM_bdValue ;Adjust to point to type table
@@:
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,dx ;Offset in block
jmp FsLd
MakeExe exAIdESStFS,opAIdSt,ET_SD
SkipExHeader
MakeExe exAIdISStFS,opAIdSt,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;Operand
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
lea bx,[pVarBx].ASTAT_ad ;ds:bx = array descriptor address
FsSt:
call ResolveArray ;resolve to segment and offset in dx:bx
push dx ;Push segment
push bx ; and offset
mov bx,PTRTX[si-2] ;Get oVar again
push [pVarBx-VAR_value].VAR_cbFixed ; Push length of FS
CALLRT B$LSET,Disp
MakeExe exAIdEIStFS,opAIdSt,ET_SD
SkipExHeader
MakeExe exAIdIIStFS,opAIdSt,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
GetpFrame
mov bx,[pFrame] ;bx = pointer to array descriptor
cmp cl,[bx].AD_cDims ;Correct number of indices?
jz FsSt
jmp IndexCountErr
MakeExe exAIdEFStFS,opAIdSt,ET_SD
SkipExHeader
MakeExe exAIdIFStFS,opAIdSt,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov bx,[pVarBx+AFRAME_oFrame]
add bx,bp ;bx = pointer to array descriptor
jmp FsSt
MakeExe exAIdECStFS,opAIdSt,ET_SD
SkipExHeader
MakeExe exAIdICStFS,opAIdSt,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Get oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov dx,[pVarBx].ACOM_oValue ;Offset into common block
test byte ptr [pVarBx-VAR_value].VAR_fStat,FV_STATIC
;Is the array $STATIC?
mov bx,[pVarBx].ACOM_oCommon ;oCommon
jz @F
add bx,COM_bdType - COM_bdValue ;Adjust to point to type table
@@:
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,dx ;Offset in block
jmp FsSt
subttl Record store executors
page
MakeExe exAIdICStTyp,opAIdSt,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Get oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov dx,[pVarBx].ACOM_oValue ;Offset into common block
test byte ptr [pVarBx-VAR_value].VAR_fStat,FV_STATIC
;Is the array $STATIC?
mov bx,[pVarBx].ACOM_oCommon ;oCommon
jz @F
add bx,COM_bdType - COM_bdValue ;Adjust to point to type table
@@:
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,dx ;Offset in block
jmp short AStTyp
MakeExe exAIdIIStTyp,opAIdSt,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
GetpFrame
mov bx,[pFrame] ;bx = pointer to array descriptor
cmp cl,[bx].AD_cDims ;Correct number of indices?
jz AStTyp
jmp IndexCountErr
MakeExe exAIdIFStTyp,opAIdSt,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov bx,[pVarBx+AFRAME_oFrame]
add bx,bp ;bx = pointer to array descriptor
jmp short AStTyp
MakeExe exAIdISStTyp,opAIdSt,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Operand
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
lea bx,[pVarBx].ASTAT_ad ;ds:bx = array descriptor address
AStTyp:
call ResolveArray ;resolve to segment and offset in dx:bx
push dx ;Need segment on stack
xchg ax,bx ;Offset in ax
mov bx,PTRTX[si-2] ;Go back and get oVar
mov bx,[pVarBx].VAR_oTyp-VAR_value ;oTyp in bx
xchg di,ax ;Offset in di, di saved in ax
;ax = saved di (SizeD = 0 only)
;bx = oTyp of record
;di = offset of destination
;[sp] = segment of destination
;[sp+4]:[sp+2] = pointer to source
jmp MoveRec ;Copy the record
subttl Rf executors
page
;Frame
MakeExe exAIdEFRfR8,opAIdLd,ET_R8
SkipExHeader
MakeExe exAIdEFRfI2,opAIdLd,ET_I2
SkipExHeader
MakeExe exAIdEFRfI4,opAIdLd,ET_I4
SkipExHeader
MakeExe exAIdEFRfR4,opAIdLd,ET_R4
SkipExHeader
MakeExe exAIdIFRf,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov bx,[pVarBx+AFRAME_oFrame]
add bx,bp ;bx = pointer to array descriptor
jmp short Ref
;Public
;Static
MakeExe exAIdESRfR8,opAIdLd,ET_R8
SkipExHeader
MakeExe exAIdESRfI4,opAIdLd,ET_I4
SkipExHeader
MakeExe exAIdESRfR4,opAIdLd,ET_R4
SkipExHeader
MakeExe exAIdESRfI2,opAIdLd,ET_I2
SkipExHeader
MakeExe exAIdISRf,opAIdLd,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Operand
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
lea bx,[pVarBx].ASTAT_ad ;ds:bx = array descriptor address
Ref:
call ResolveArray ;resolve to segment and offset in dx:bx
push dx
push bx ;Put far address on stack
DispMac ; and dispatch next executor
MakeExe exAIdECRfI2,opAIdLd,ET_I2
SkipExHeader
MakeExe exAIdECRfI4,opAIdLd,ET_I4
SkipExHeader
MakeExe exAIdECRfR4,opAIdLd,ET_R4
SkipExHeader
MakeExe exAIdECRfR8,opAIdLd,ET_R8
SkipExHeader
MakeExe exAIdICRf,opAIdLd,ET_Imp
LODSWTX ;Load argument count
xchg ax,cx
LODSWTX ;Get oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
mov dx,[pVarBx].ACOM_oValue ;Offset into common block
test byte ptr [pVarBx-VAR_value].VAR_fStat,FV_STATIC
;Is the array $STATIC?
mov bx,[pVarBx].ACOM_oCommon ;oCommon
jz @F
add bx,COM_bdType - COM_bdValue ;Adjust to point to type table
@@:
add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
mov bx,[bx].COM_bdValue.BD_pb ;Common block
add bx,dx ;Offset in block
jmp Ref
MakeExe exAIdEIRfI2,opAIdLd,ET_I2
SkipExHeader
MakeExe exAIdEIRfI4,opAIdLd,ET_I4
SkipExHeader
MakeExe exAIdEIRfR4,opAIdLd,ET_R4
SkipExHeader
MakeExe exAIdEIRfR8,opAIdLd,ET_R8
SkipExHeader
MakeExe exAIdIIRf,opAIdLd,ET_Imp
LODSWTX ;Index argument count
xchg ax,cx
LODSWTX ;oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
GetpFrame
mov bx,[pFrame] ;bx = pointer to array descriptor
cmp cl,[bx].AD_cDims ;Correct number of indices?
jz Ref
jmp IndexCountErr
;Array descriptor references
MakeExe exAdRfSD,opAIdLd,ET_SD
SkipExHeader
MakeExe exAdRfR8,opAIdLd,ET_R8
SkipExHeader
MakeExe exAdRfI4,opAIdLd,ET_I4
SkipExHeader
MakeExe exAdRfR4,opAIdLd,ET_R4
SkipExHeader
MakeExe exAdRfI2,opAIdLd,ET_I2
SkipExHeader
MakeExe exAdRfImp,opAIdLd,ET_Imp
;Push addr of array descriptor
inc si
inc si ;Skip over count of indices
LODSWTX ;Get oVar
xchg ax,bx ; BX = oVar
DbChk oVar,bx ; Check for valid oVar
call oVarToPAd ;BX = pAd
push bx ;Return pAd
DispMac
sEnd CODE
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -