微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题使用TURBO C++的内嵌汇编应注意的问题
栏目软件操作与技巧
作者北京大学 赵前、杜军
发布1995-05-26
  首先,内嵌汇编是宏汇编的子集,有很多的宏汇编命令这里并不支持,例如所有的宏指令、所有的段指令以及很多的伪指令。这需要在使用中慢慢地了解。这里不再一一列出。
  其次是标号的使用,这是一个在使用中普遍遇到的问题,例如以下程序段:
  ......
  asm{
  mov cx,100
  label:
  mov ax ,[bp+si]
  inc si
  inc ax
  mov [bp+si],ax
  loop label
  }
  ......
  该程序段将会出现编译错,编译器给出以下错误信息:
  label not defined.
  这样使得一些编程人员误以为内嵌汇编不支持标号的使用,但是不使用标号又会使编程变得极不方便,其实只要将标号移出asm标识符作用区即可,修改后程序段如下;
  ......
  asm{
  mov cx,100
  }
  label:
  asm{
  mov ax,[bp+si]
  inc si
  inc ax
  mov[bp+si],ax
  loop label
  }
  ......
  这样再编译就正确通过了。
  第三、用内嵌汇编构造函数时应注意的问题:
  1.环境的保存与恢复:
  在C++语言中,调用环境的保存与恢复是在函数体外部来完成的,所以内嵌汇编并不需要保存环境,这样可以节省一些代码。
  2.参数的传递与使用:
  C++语言是利用堆栈来传递参数的,其传递规则在很多文章中都有详细的介绍,这里不再多说。但是其实用内嵌汇编来构造函数并不需要知道该规则,直接使用函数说明中的形参名即可。如下例:
  ......
  void func(int i,int j){
  asm{
  mov ax,j
  add ax,i
  }
  }
  ......
  这样就方便多了。
  3.函数的返值:
  C++函数返值符合MICRO SOFT标准,这里不再描述。
  以上就是在TURBO C++内嵌汇编中应注意的一些问题,希望能给读者一些启发。
  (北京大学 赵前、杜军)