历史上的今天
返回首页

历史上的今天

今天是:2025年03月26日(星期三)

正在发生

2020年03月26日 | 汇编代码、机器码和存储器的关系以及数据的表示

2020-03-26 来源:eefocus

即使使用C/C++或者其他高级语言编程,最后也会被编译工具转换为汇编代码,并最终作为机器码存储在内存、硬盘或者其他存储器上。在调试程序时,经常需要阅读它的汇编代码,以下面的汇编代码为例:


2023404:       e5901000        ldr     r1, [r0]

2023408:       e3c110ff        bic     r1, r1, #255    ; 0xff

202340c:       e3c11cff        bic     r1, r1, #65280  ; 0xff00

2023404、2023408、202340c是这些代码的运行地址,就是说运行前,这些指令必须位于内存中的这些地址上; e5901000、e3c110ff、e3c11cff是机器码。运行地址、机器码都以16进制表示。CPU用到的、内存中保存的都是机器码,图1是这几条指令在内存中的示意图。

图1. 内存中的机器码


"ldr r1, [r0]"、"bic r1, r1, #255"、"bic r1, r1, #65280"是这几个机器码的汇编代码──所谓汇编代码仅仅是为了方便我们人类读、写而引入的,机器码和汇编代码之间也仅仅是简单的转换关系。


参考CPU的数据手册可知,ARM的数据处理指令格式为:

以机器码0xe3a0244e为例:


[31:28] = 0b1110, 表示这条指令无条件执行;

[25] = 0b1, 表示 Operand2 是一个立即数;

[24:21] = 0b1101, 表示这是 MOV 指令, 即 Rd : = Op2;

[20] = 0b0, 表示这条指令执行时不影响状态位;

[15:12] = 0b0010, 表示 Rd 就是 r2;

[11:0] = 0x44e, 这是一个立即数;

立即数占据机器码中的低12位表示:最低8位的值称为immed_8,高4位称为rotate_imm。立即数的数值计算方法为:=immed_8循环右移(2*rotate_imm)。对于"[11:0] =0x44e",其中immed_8=0x4e,rotate_imm=0x4,所以此立即数等于0x4e000000。


综上所述,机器码0xe3a0244e的汇编代码为:


mov r2, #0x4e000000

mov r2, #1308622848。

上面的0x4e000000和1308622848是一样的,之所以强调这点,是因为很多初学者问这样的问题:"计算机中怎么以 16 进制保存数据?以 16 进制、 10 进制保存数据有什么区别?"这类问题与如下问题相似:桌子上有12个苹果,吃了一个,请问现在还有几个?你可以回答11 个、0xb个、十一个、eleven个、拾壹个。所谓16进制、10进制、8进制、二进制,都仅仅是对同一个数据的不同表达形式而已,这些不同的表达形式也仅仅是为了方便我们人类(又说了这个词一遍)读写而已,它们所表示的数值及它在计算机中的保存方式是完全一样的。


完毕!

推荐阅读

史海拾趣

Cyrix Corp公司的发展小趣事

1999年,Cyrix再次被威盛电子(VIA)收购。这次收购后,Cyrix所生产的CPU产品上开始出现了两个商标:VIA和Cyrix。这种双标现象反映了Cyrix在被收购后的地位变化。随着时间的推移,Cyrix的商标逐渐淡出市场,最终被彻底放弃。

ABB Group公司的发展小趣事

1999年,Cyrix再次被威盛电子(VIA)收购。这次收购后,Cyrix所生产的CPU产品上开始出现了两个商标:VIA和Cyrix。这种双标现象反映了Cyrix在被收购后的地位变化。随着时间的推移,Cyrix的商标逐渐淡出市场,最终被彻底放弃。

CSR plc(剑桥硅晶无线电)公司的发展小趣事

除了自主研发和收购外,CSR plc还积极与其他企业进行技术合作与转让。例如,2012年7月,三星电子以3.1亿美元的价格收购了CSR Plc的无线技术部门,包括该部门的310名员工和相关的21项技术专利。这次技术合作不仅为CSR plc带来了可观的收益,也推动了整个行业的技术进步和发展。

通过以上五个故事,我们可以看到CSR plc在电子行业中的发展历程充满了创新与挑战。从初创时期的音频技术突破,到后来的多元化发展、重要收购和技术合作,CSR plc不断适应市场变化,拓展业务领域,最终在电子行业中取得了显著的地位和成就。

超音(CY)公司的发展小趣事

面对数字化浪潮的冲击,超音积极响应行业变革,加快了数字化转型和智能化升级的步伐。公司引入了先进的生产设备和管理系统,提高了生产效率和产品质量。同时,超音还加大了对智能化产品的研发投入,推出了一系列具有智能化功能的音频设备产品。这些产品不仅满足了消费者对高品质音频的需求,还提供了更加便捷和智能的使用体验。这些努力使得超音在数字化转型和智能化升级方面取得了显著成效,为公司的未来发展注入了新的活力。

Catalyst / ON Semiconductor公司的发展小趣事

在追求经济效益的同时,Catalyst / ON Semiconductor公司也高度重视可持续发展和社会责任。公司积极推行环保政策,减少生产过程中的污染排放;同时,公司还关注员工福利和社会公益事业,积极参与各种社会公益活动。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

这五个故事涵盖了Catalyst / ON Semiconductor公司从初创到发展壮大的不同阶段和方面,展现了公司在电子行业中的成长轨迹和贡献。虽然这些故事是基于假设和一般逻辑构建的,但它们旨在呈现一个企业在发展过程中可能遇到的挑战和机遇,以及企业如何应对这些挑战并抓住机遇。

Ferraz Shawmut(Mersen)公司的发展小趣事

2010年,Ferraz Shawmut正式更名为Mersen。这一更名标志着公司进入了一个新的发展阶段。Mersen继续秉承Ferraz Shawmut的技术创新和市场拓展精神,不断推出符合市场需求的新产品和技术解决方案。同时,公司也加大了对研发和创新的投入力度,以保持其在电气保护领域的领先地位。

问答坊 | AI 解惑

下载的时候金币不够了怎么办

今天下载DXP的教程资料,下了前三部分没有金币了,回复了一下,发现赠送了2枚金币,又下载了第四部分;又回复了一下发现金币未增…

查看全部问答>

S3C6410的DRAM控制器

我们在项目中更换了DRAM,所以需要重新配置S3C6410的DRAM控制器,结果发现S3C6410中的DRAM控制器还是挺复杂的。   S3C6410支持两个DRAM片选,可以分别接最大256MB的内存,该处理器用的DRAM控制器是来自ARM的PrimeCell Dynamic Memory Contro ...…

查看全部问答>

代码阅读器第一个版本, 请大家试试

代码阅读器第一个版本,   请大家试试 http://code-search.kingofcoder.com/…

查看全部问答>

求书!定散分~~~~~~~

求以下二本书: 书名:嵌入式实时操作系统μC/OSII (第2版) (美) Jean J.Labrosse著 邵贝贝等译 责任编辑 王瑛 ISBN 7-81077-290-2 开本:787×1092 1/16 字数: 979千字 定价:79.00元 2003年5月第1版 2003年5月第1次印刷 购买 ...…

查看全部问答>

TSP实现问题?

现要作一个TSP包,但是再win ce下导不进去了 那位高人知道作TSP包的过程,有代码更好了…

查看全部问答>

问MTK标准开发包内MMI_TEXT.h文件问题

此文件内的_MMI_TEXT_ID_E枚举变量内, 定义的ID顺序改变会影响最终编译结果。 但是,我没有发现特殊用法,都是当作标准枚举变量使用的。。 有做过MTK的高手解答下吗…

查看全部问答>

关于DIY数控电源的键盘(包括编码器)程序接口 讨论

原理图感觉有点不对啊 ENTER按键怎么和编码器的5脚连起来了??   显示部分已经有框架了,就等测试了   现在考虑一下输入部分的软件接口问题 是用一个函数来取得输入呢还是使用一个全局变量来取得 1.函数方式 Uint6 getInpu ...…

查看全部问答>

学习易电源心得 悲剧了

悲剧了~只有80分~ SIMPLE SWITCHER易电源电源模块不仅可提供强劲的系统性能,而且EMI低和高度可靠,适用于现今尖端的3G/HD/SD广播视频设备。该电源模块将控制电路,屏蔽式电感器,MOSFET和细小的无源组件集成到一个简单易用的封装内,以便简化设计 ...…

查看全部问答>

Mbed开始支持美信的MAXWSNENV

Mbed开始支持美信的MAXWSNENV,主要特点有: 提供方便的BLE平台板载温度、湿度、光照、气压传感器低功率可以延长电池使用时间mbed 中间层接口提供快速开发板载按钮开关和三彩色LED https://developer.mbed.org/platforms/MAXWSNENV/ …

查看全部问答>