BASIC语言调用汇编语言的技巧

Author: 辽宁 石宝臣 Date: 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工作区内,解决了上述的三个问题。  (辽宁  石宝臣)