嵌入汇编语言的注意事项

上传人:ji****72 文档编号:36263715 上传时间:2018-03-27 格式:DOC 页数:3 大小:38KB
返回 下载 相关 举报
嵌入汇编语言的注意事项_第1页
第1页 / 共3页
嵌入汇编语言的注意事项_第2页
第2页 / 共3页
嵌入汇编语言的注意事项_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《嵌入汇编语言的注意事项》由会员分享,可在线阅读,更多相关《嵌入汇编语言的注意事项(3页珍藏版)》请在金锄头文库上搜索。

1、嵌入汇编语言的示例嵌入汇编语言的示例用_ _asm 程序段编写函数嵌入式汇编不仅可以编写 CC+函数,还可以调用 C 函数(包括 C 库函数)和非重载的全局 C+函数,也可以调用任何用extern “C”说明的函数,但不能调用 C+的成员函数。因为所有的标准头文件都采用 extern “C”说明库函数,所以 C+程序中的嵌入式汇编可以调用 C 库函数。例例 7.13:嵌入式汇编编写函数:嵌入式汇编编写函数/ C+程序:LT713.CPP#include int power2(int,int);void main(void)cout“2 的 6 次方乘 5 等于:t“;coutPOWER2(5,

2、6)ENDL;int power2(int num,int power)_asmmov eax,num ;取第一个参数mov ecx,power ;取第二个参数shl eax,cl ;计算 EAX=EAX(2CL ) /返回值存于 EAX汇编语句通过参数名就可以引用参数,采用 return 返回出口参数。本例中虽没有使用 return 语句,但仍然返回值,只是编译时可能产生警告(在设置警告级别为 2 或更高时) 。返回值的约定是:对于小于等于 32 位的数据扩展为 32 位,存放在 EAX 寄存器中返回;48 字节的返回值存放在 EDX.EAX 寄存器对中返回;更大字节数据则将它们的地址指针存

3、放在 EAX 中返回。在 Developer Studio 开发系统中,建立一个 WIN32 控制台程序的项目,创建上述源程序后加入该项目。然后,进行编译连接就产生一个可执行文件。该程序运行后显示如下:2 的 6 次方乘 5 等于: 320在 Developer Studio 开发系统中,可以通过 Projects 菜单 Settings 命令的 Link 标签设置加入调试信息(即Zi 选项) ,嵌入式汇编就可以在源程序级进行调试;还可以在 CC+标签中的 Listing Files 选择输出具有汇编语言程序输出列表(即FA、FAc、FAs、FAcs 选项) 。嵌入汇编语言的注意事项嵌入汇编语

4、言的注意事项当然在嵌入汇编语言中也有很多的规矩,很多的 注意事项:1. 在在_ _ _asm_asm 中使用汇编语言的注意事项中使用汇编语言的注意事项嵌入式汇编代码支持 80486 的全部指令系统。Visual C+ 5.06.0 还支持 MMX 指令集。对于还不能支持的指令,Visual C+提供了_emit 伪指令进行扩展。_emit 伪指令类似 MASM 中的 DB 伪指令,可以用来定义一个字节的内容,并且只能用于程序代码段;例如:#define cpu-id _asm _emit 0x0F _asm _emit 0xA2 /定义汇编指令代码的宏_asm cpu-id /使用 C+的宏嵌

5、入式汇编代码虽然可以使用 C+的数据类型和数据对象,但却不可以使用 MASM 的伪指令和操作符定义数据。程序员不能使用 DBDWDDDQDTDF 伪指令和 DUPTHIS 操作符;也不能使用 MASM 的结构和记录(不接受伪指令STRUCT、RECORD、WIDTH、MASK)。Visual C+不支持 MASM 的宏伪指令(如 MACRO、ENDM、REPEATFORFORC 等)和宏操作符(如 !、 /C+语句中,表示数组的某个元素_asm mov array6,bx /汇编语言中,表示距离标识符的字节偏移量嵌入式汇编中可以引用包含该_ _asm 作用范围内的任何符号(包括变量名),它通过

6、使用变量名引用 C+的变量。例如:若 var 是 C+中的整形 int 变量,则可以使用如下语句:_asm mov eax,var如果类、结构、联合的成员名字唯一,_ _asm 中可不说明变量或类型名就可以引用成员名;否者必须说明。例如:struct first_typechar *carray;int same_name;struct second_typeint ivar;long same_name;struct first_type ftype;struct second_type stype;_asmmov ebx,OFFSET ftypemov ecx,ebxftype.same_

7、name /必须使用 ftypemov esi,ebx.carray /可以不使用 ftype(也可以使用)#define PORTIO _asm /* Port output */ _asm mov eax,01h _asm mov dx,0xD007 _asm out dx,eax 该宏展开为一个逻辑行(其中“”是续行符):_asm /* Port output */ _asm mov eax,01h _asm mov dx,0xD007 _asm out dx,eax_ _asm 块中定义的标号对大小写不敏感,汇编语言指令跳转到 C+中的标号也不分大小写,C+中的标号只有使用 goto 语句时对大小写敏感。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号