主题:请高手指点一下(汇编在QB中的应用)
因为QB的速度实在是太慢了,我想要一些功能用汇编实现,但对于一些问题不理解(不懂)
在此请各位汇编高手指点一下
下面是一段将机器语言用QB的方式编写的,用来搜索匹配于FILENAME字串的文件
MID$(AsmCode, 1, 3) = CHR$(&H68) + MKI$(VARSEG(FileName))
MID$(AsmCode, 4, 1) = CHR$(&H1F)
MID$(AsmCode, 5, 3) = CHR$(&HBA) + MKI$(VARPTR(FileName))
MID$(AsmCode, 8, 3) = CHR$(&HB8) + CHR$(&H0) + CHR$(&H4E)
MID$(AsmCode, 11, 3) = CHR$(&HB9) + MKI$(Attr)
MID$(AsmCode, 14, 2) = CHR$(&HCD) + CHR$(&H21)
MID$(AsmCode, 16, 3) = CHR$(&H68) + MKI$(VARSEG(ErrCode))
MID$(AsmCode, 19, 1) = CHR$(&H1F)
MID$(AsmCode, 20, 2) = CHR$(&H72) + CHR$(&H2)
MID$(AsmCode, 22, 2) = CHR$(&H33) + CHR$(&HC0)
MID$(AsmCode, 24, 1) = CHR$(&H3E)
MID$(AsmCode, 25, 3) = CHR$(&HA3) + MKI$(VARPTR(ErrCode))
MID$(AsmCode, 28, 1) = CHR$(&HCB)
其中:VAPSEG 是取变量段地址 VARPTR 是取变量偏移地址 MKI$ 是将整数转为2字节的字串函数 FileName 和 ErrCode 及 Attr 是QB的变量参数
用伪语言描述大概是这个样子的:
DS:DX=要匹配字串(FileName)
AX=4E00(DOS中断功能号)
CX=文件属性(Attr)
调用INT21中断4E00号功能(返回一个文件信息)
AX=返回代码(ErrCode)
用Debug依次将各字节写入内存后用U命令反汇编结果:
68 DB 68
0000 ADD [BX+SI],AL
1F POP DS
BA0000 MOV DX,0000
B8004E MOV AX,4E00
B90000 MOV CX,0000
CD21 INT 21
68 DB 68
0000 ADD [BX9SI],AL
1F POP DS
7202 JB 0117
33C0 XOR AX,AX
CB RETF
其中用到地址的都用"0"字节代替
问题是我要用这种方式写其他过程时如何将我的变量放入到里面中?
因为QB是不充许直接用汇编的,但是可以用CALL absolute 直接调用机器语言
例如:
mov bx,0
mov dx,page ;<--这个page参数次如何处理,在QB中可以取这个变量的地址
mov ax,4f05h ; 假有设二个以上的变量参数呢??
int 10h
请高手指点
在此请各位汇编高手指点一下
下面是一段将机器语言用QB的方式编写的,用来搜索匹配于FILENAME字串的文件
MID$(AsmCode, 1, 3) = CHR$(&H68) + MKI$(VARSEG(FileName))
MID$(AsmCode, 4, 1) = CHR$(&H1F)
MID$(AsmCode, 5, 3) = CHR$(&HBA) + MKI$(VARPTR(FileName))
MID$(AsmCode, 8, 3) = CHR$(&HB8) + CHR$(&H0) + CHR$(&H4E)
MID$(AsmCode, 11, 3) = CHR$(&HB9) + MKI$(Attr)
MID$(AsmCode, 14, 2) = CHR$(&HCD) + CHR$(&H21)
MID$(AsmCode, 16, 3) = CHR$(&H68) + MKI$(VARSEG(ErrCode))
MID$(AsmCode, 19, 1) = CHR$(&H1F)
MID$(AsmCode, 20, 2) = CHR$(&H72) + CHR$(&H2)
MID$(AsmCode, 22, 2) = CHR$(&H33) + CHR$(&HC0)
MID$(AsmCode, 24, 1) = CHR$(&H3E)
MID$(AsmCode, 25, 3) = CHR$(&HA3) + MKI$(VARPTR(ErrCode))
MID$(AsmCode, 28, 1) = CHR$(&HCB)
其中:VAPSEG 是取变量段地址 VARPTR 是取变量偏移地址 MKI$ 是将整数转为2字节的字串函数 FileName 和 ErrCode 及 Attr 是QB的变量参数
用伪语言描述大概是这个样子的:
DS:DX=要匹配字串(FileName)
AX=4E00(DOS中断功能号)
CX=文件属性(Attr)
调用INT21中断4E00号功能(返回一个文件信息)
AX=返回代码(ErrCode)
用Debug依次将各字节写入内存后用U命令反汇编结果:
68 DB 68
0000 ADD [BX+SI],AL
1F POP DS
BA0000 MOV DX,0000
B8004E MOV AX,4E00
B90000 MOV CX,0000
CD21 INT 21
68 DB 68
0000 ADD [BX9SI],AL
1F POP DS
7202 JB 0117
33C0 XOR AX,AX
CB RETF
其中用到地址的都用"0"字节代替
问题是我要用这种方式写其他过程时如何将我的变量放入到里面中?
因为QB是不充许直接用汇编的,但是可以用CALL absolute 直接调用机器语言
例如:
mov bx,0
mov dx,page ;<--这个page参数次如何处理,在QB中可以取这个变量的地址
mov ax,4f05h ; 假有设二个以上的变量参数呢??
int 10h
请高手指点