BASIC语言调用汇编语言的技巧 辽宁 石宝臣 1994-01-07 一、内存分配问题 在运行高级语言程序时,通常不需要考虑程序的内存分配问题,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工作区内,解决了上述的三个问题。 (辽宁 石宝臣)