b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c语言对应汇编语句_c语言程序设计试题汇编答案_汇编语言和c语言区别

电脑杂谈  发布时间:2020-01-29 05:02:22  来源:网络整理

c语言程序设计试题汇编答案_汇编语言和c语言区别_c语言对应汇编语句

C语言内嵌汇编

#include <stdio.h>
int main()
{
    int result = 0;
    int input = 1;
    int a = 1;
    int b = 2;
    asm volatile (
        "movl %1, %0\n" // 通过占位符指定交互的变量
        : "=r"(result)      // 输出变量,与汇编交互
        : "r"(input)            // 输出变量,与汇编交互
// 这里的r指示编译器自动将通用寄存器关联到变量
        );
    printf("result = %d\n", result);
    printf("input = %d\n", input);
    asm volatile (
        "movl %%eax, %%ecx\n"
        "movl %%ebx, %%eax\n"
        "movl %%ecx, %%ebx\n"
        : "=a"(a), "=b"(b)          // 这里指明a变量使用a寄存器
        : "a"(a), "b"(b)
        );
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    return 0;
}

对于上述例子,编译器做了如下工作:

1.将result关联至某个合适的寄存器

c语言程序设计试题汇编答案_汇编语言和c语言区别_c语言对应汇编语句

2.将input关联至某个合适的寄存器

3.通过通用寄存器间接操作函数

注意:

汇编语言不支持存储到内存的直接操作,要使用寄存器作为后面角色。

汇编语言和c语言区别_c语言程序设计试题汇编答案_c语言对应汇编语句

C语言内嵌汇编

可以直接通过内置汇编使用平台服务。通过INT 80H使用内核服务

1.INT指令用于使用Linux内核服务(中断指令)

2.80H是一个中断向量号,用于执行系统调用

c语言对应汇编语句_汇编语言和c语言区别_c语言程序设计试题汇编答案

3.可以借助寄存器指定确切的平台调用以及参数(如sys_write服务)

char* s = "D.T.Software\n";
int l = 13;
asm volatile(
    "movl $4, %%eax\n"      //
    "movl $1, %%ebx\n"
    "movl %0, %%ecx\n"
    "movl %1, %%edx\n"
    "int $0x80     \n"
    :
    : "r"(s), "r"(l)
    : "eax", "ebx", "ecx", "edx"
);
    asm volatile(
        "movl $1,  %eax\n"
        "movl $42, %ebx\n"
        "int $0x80     \n"
    );

注意:

汇编语言和c语言区别_c语言程序设计试题汇编答案_c语言对应汇编语句

1.内嵌汇编时,除汇编模板外c语言对应汇编语句,其余参数都可以省略

2.当省略的参数在后面时c语言对应汇编语句,对应分隔符":"不可省略

3.当省略保留列表时,对应得到分隔符":"可以省略

4.当省略可选参数时,寄存器前使用单个%作为前缀

当存在可选参数时,寄存器前使用两个%%作为前缀


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-138773-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      每日福利
      热点图片
      拼命载入中...