用汇编的眼光看C++(之嵌入汇编)07
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
嵌入式汇编是对纯汇编文件的一种有益补充。通常会有下面几种情况使用到汇编:(1)提高代码的工作效率 ,使用到cpu的一些特殊指令,比如说mmx指令;(2)对硬件进行某种特殊的操作,比如说关中断等,这在内核级的代码中是比较常见的。但是我们讲究嵌入 式汇编的一些基本点和大家一起讨论一下,建议大家和我一起做实验,用事实证明一切。
(1)使用嵌入汇编的时候,注意寄存器的保护
- int process()
- {
- __asm
- {
- push ax
- push bx
- push cx
- pop cx
- pop bx
- pop ax
- }
- return 1;
- }
- int add(int a, int b)
- {
- return a + b;
- }
- int process()
- {
- int value = 0;
- __asm
- {
- push eax
- push 2
- push 3
- call add
- add esp, 8
- mov value, eax
- pop eax
- }
- return 1;
- }
- void process()
- {
- int value = 0;
- int* address = &value;
- __asm
- {
- push ebx
- mov value, 1
- mov ebx, address
- mov [ebx], 2
- pop ebx
- }
- assert(value == 2);
- return ;
- }
- static int global = 10;
- void process()
- {
- __asm
- {
- push eax
- mov eax, global
- add eax, 1
- mov global, eax
- pop eax
- }
- assert(global == 11);
- return ;
- }
- void process()
- {
- int value = 0;
- __asm
- {
- push eax
- start:
- mov eax, value
- add eax, 1
- mov value, eax
- cmp value, 10
- jne start
- pop eax
- }
- assert(value == 10);
- return ;
- }
- void process()
- {
- __asm{
- cli
- }
- return ;
- }
(8)如果工程中存在*.asm汇编文件,那么需要按照下面的步骤进行操作
a) 选择【project】-> 【setting】
b) 单击左边的工程,选择某一个*.asm文件,右边的tab会出现两个选项,分别是General和Custom Build
c) 在Commands中输入对应的编译指令,至于是MASM还是NASM类型,请参考对应的编译手册