回 帖 发 新 帖 刷新版面

主题:请高手指点一下(汇编在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

请高手指点

回复列表 (共2个回复)

沙发

没有人愿意说吗!!!!

板凳

aogosoft.com有个80x86opcode大权,加上PowerBASIC就可以
PowerBASIC里有nnnnnnnnB就可以

我来回复

您尚未登录,请登录后再回复。点此登录或注册