设为首页收藏本站

嵌入式联盟

 找回密码
 我要注册

扫一扫,访问微社区

最近看过此主题的会员

查看: 113|回复: 1

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

[复制链接]

1

主题

2

帖子

61

积分

新手上路

Rank: 1

积分
61
发表于 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的值在内嵌汇编中被改变了,请问这是怎么回事呢?

回复

使用道具 举报

333

主题

456

帖子

3840

积分

管理员

我是一个程序员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-2-18 18:08 , Processed in 0.075604 second(s), 34 queries .

Powered by Discuz! X3.2

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

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