微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题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工作区内,解决了上述的三个问题。 (辽宁 石宝臣)