BASIC语言调用汇编语言的技巧
在运行高级语言程序时,通常不需要考虑程序的内存分配问题,BASIC语言的解释程序和连接程序会自动找到适当位置来存放程序。但把汇编语言程序加到BASIC程序中时,情况就比较复杂了。必须通过一些技巧来确定汇编语言子程序在内存中的存放位置,并且把这个位置告诉BASIC程序。
二、控制转移问题
在BASIC语言中,可以通过USR或CALL语句,把控制转移到汇编语言子程序,但是调用程序必须知道被调用的汇编语言子程序放在什么地方,并把存放地址写入BASIC程序中。
三、变元传送问题:
BASIC程序与汇编语言之间的信息交换通过变元的传递来实现,变元通常以数值或地址的形式表示。当用USR调用汇编语言子程序时,只能传送或回送一个变元;而CALL语句可以在调用程序和被调用程序之间传送多个变元。
下面举例说明如何解决以上所述的问题。
一、编制一小汇编程序(删除一个文件)
* name del_file
cseg segment
assume cs:cseg
deil proc far 供BASIC调用
push bp
mov bp,sp
mov di,[bp+08h] ;传递功能号
; 参数
mov ah, [di]
cmp ah,02h
ja def
mov ah,[di]
mov di,[bp+06h] ; 传递字符
;串参数
mov dx,1[di]
mov c1,[di]
mov si,dx
xor ch,ch
add si,cx
mov byte ptr[si],00h
add ah,40h
int 21h
mov byte ptr[si],24h
def: pop bp
ret 04h
defil endp
cseg ends
end
二、汇编、连接源程序
masm del_file.asm
link del_file/h
这样就把汇编语言子程序放在高地址。
三、用DEBUG装入del_file.exe文件
-r记住cs:3fdf代码段地址
ip:0000位移量
cx:xxxx文件长度,字节数
四、不退出DEBUG,再装入basic.exe解释程序
-n basic.exe
-l
-g
ok def seg=&h3df
ok save "del_file.bin",0,&hxxxx文件长
五、编写basic程序,调用汇编语言,但必须注意内存分配,在basic程序中要定义段地址:
def seg=&h1800
block "del_file.bin",0
del_file=0
10 cls
20 input"请输入被删除文件的名字:",d$
30 x%=1
40 def seg=&h1800
50 bload"del_file.bin",0
60 del_file=0
70 call del_file(x%,d$)
80 print"删除文件结束"
90 for i=1 to 2500:next i
100 system
这样,就可以把汇编语言子程序放在basic工作区内,解决了上述的三个问题。 (辽宁 石宝臣)