gpt4 book ai didi

c - 汇编语言是如何生成机器码的?

转载 作者:行者123 更新时间:2023-11-30 20:52:45 24 4
gpt4 key购买 nike

我试图了解机器代码是如何从汇编代码形成的。

我正在使用 NASM 汇编器

例如,我有一个像这样的汇编代码:

BITS 64;
mov rbx, 0x0123456789abcdef;
mov rax, rbx;
add rax, rax;
ret;

我运行nasm example.S

我把它拆开ndisasm -b64 example.S(对于 64 位 Little-endian 机器)

我得到这样的机器代码:

00000000  48BBEFCDAB896745  mov rbx,0x123456789abcdef
-2301
0000000A 4889D8 mov rax,rbx
0000000D 4801C0 add rax,rax
00000010 C3 ret

有人可以解释一下给定的机器代码和汇编代码之间的关系是什么。如何计算出每条指令和寄存器的操作码。

最佳答案

如果您有机器代码并想了解它是如何来自程序集的:

第 1 步:查找您的处理器架构的指令集摘要。

第 2 步:查找每条指令中的哪些机器代码位包含操作码。此时,二进制机器代码很有用,除非您精通十六进制到二进制转换。此时您还应该查看字节顺序。

第3步:查找操作码对应的指令。

第 4 步:查看指令描述并找出哪些位属于哪个指令字段(目标寄存器、地址、立即数等)。

第五步:根据各栏的数字写出说明。您可能需要查找哪些寄存器对应于哪些数字。

现在你已经反汇编了你的机器代码。

要学习/训练它,首先尝试使用 AVR Assembly 之类的东西可能是谨慎的做法,因为它只有 16 位指令。

如果您有程序集并希望手动将其汇编成机器代码:

第 1 步:查找您的处理器架构的指令集摘要。

第 2 步:找到您要汇编的指令。

第3步:用指令帧所需的数据填充相关位。

关于c - 汇编语言是如何生成机器码的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com