设为首页收藏本站

嵌入式天空

 找回密码
 我要注册

扫一扫,访问微社区

最近看过此主题的会员

查看: 353|回复: 2

关于内嵌汇编第三个:号作用的疑问

[复制链接]

1

主题

6

帖子

87

积分

新手上路

Rank: 1

积分
87
发表于 2019-1-22 21:53:35 | 显示全部楼层 |阅读模式
在复习李老师s5p6818的视频,看到内嵌汇编那块
在内嵌汇编里,第三个:号的作用是保护寄存器.即:
如果在汇编代码段之前使用了r0,在使用r0之前,将r0的值存在stack中,用完再从statck取出来
但我写了如下测试代码:
#include <stdio.h>

int main(void)
{
    //将a和r5寄存器关联起来
    unsigned int register a asm("r5");
    //将a即r5赋值
    a=100;
    //在内嵌汇编中改变r5的值
    asm volatile(
        "mov r5, #200\n"
        :
        :
        :"r5"
    );
    printf("a=%d\n",a);
}
这个程序输出的a值是200
即r5的值在内嵌汇编中被改变了,请问这是怎么回事呢?

回复

使用道具 举报

339

主题

462

帖子

3910

积分

管理员

我是一个程序员

Rank: 9Rank: 9Rank: 9

积分
3910
发表于 2019-2-11 14:22:37 | 显示全部楼层
你这样测试,写两个程序:第一个没有第三个冒号和"r5",第二个有第三个冒号和"r5",然后把他们编译成可执行文件,然后分别反汇编过来,然后读部分汇编代码,看看本质。
最近很忙
回复 支持 反对

使用道具 举报

1

主题

6

帖子

87

积分

新手上路

Rank: 1

积分
87
 楼主| 发表于 2019-2-24 13:34:53 | 显示全部楼层
lizhiyong 发表于 2019-2-11 14:22
你这样测试,写两个程序:第一个没有第三个冒号和"r5",第二个有第三个冒号和"r5",然后把他们编译成可执行 ...

李老师,我按照您给的方法反汇编了,使用vimdiff对比两个.s文件,他们的除了第二行文件名不同,其他所有代码都是相同的.
lzh@lzh-ws:practice$ cat thirdcolon1.c
#include <stdio.h>


int main(void)
{
    //将a和r5寄存器关联起来
    unsigned int register a asm("r5");
    //将a即r5赋值
    a=100;
    //在内嵌汇编中改变r5的值
    asm volatile(
        "mov r5, #200\n"
        :
        :
        :"r5"
    );
    printf("a=%d\n",a);
}
lzh@lzh-ws:practice$ cat thirdcolon2.c
#include <stdio.h>


int main(void)
{
    //将a和r5寄存器关联起来
    unsigned int register a asm("r5");
    //将a即r5赋值
    a=100;
    //在内嵌汇编中改变r5的值
    asm volatile(
        "mov r5, #200\n"
    );
    printf("a=%d\n",a);
}
lzh@lzh-ws:practice$ make thirdcolon1
arm-linux-gcc -march=armv7-a     thirdcolon1.c   -o thirdcolon1
lzh@lzh-ws:practice$ make thirdcolon2
arm-linux-gcc -march=armv7-a     thirdcolon2.c   -o thirdcolon2
lzh@lzh-ws:practice$ arm-linux-objdump -D thirdcolon1 > thirdcolon1.s
lzh@lzh-ws:practice$ arm-linux-objdump -D thirdcolon2 > thirdcolon2.s
lzh@lzh-ws:practice$ vimdiff thirdcolon1.s thirdcolon2.s
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EBMSKY Inc. ( 冀ICP备17022971号-1  

GMT+8, 2019-4-19 00:33 , Processed in 0.087162 second(s), 36 queries .

Powered by Discuz! X3.2

© 2014-2018 Comsenz Inc. 【嵌入式天空】设计

快速回复 返回顶部 返回列表