有些人说汇编语言等于机器语言,只是我们在汇编语言中使用助记符。
读完彼得索尔德的《编码》后,我仍然无法理解某些汇编代码如何转换成机器码。
例如(来自Tutorials Point的汇编课程):
我理解的是,msg包含“Hello, world!”并移动到ECX中。
但是我知道,在x86中,ECX只能存储32位。
那么我们如何将超过32位的“Hello, world!”移动到ECX中呢?
这部分的等效部分是什么?
在机器码中?
读完彼得索尔德的《编码》后,我仍然无法理解某些汇编代码如何转换成机器码。
例如(来自Tutorials Point的汇编课程):
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
section .data
msg db 'Hello, world!', 0xa ;our dear string
我理解的是,msg包含“Hello, world!”并移动到ECX中。
但是我知道,在x86中,ECX只能存储32位。
那么我们如何将超过32位的“Hello, world!”移动到ECX中呢?
这部分的等效部分是什么?
section .data
msg db 'Hello, world!', 0xa ;our dear string
在机器码中?
section .data msg db 'Hello, world!', 0xa
。我的意思是它的“机器码”版本是什么? - Coder88section .data
本身并不生成机器代码,而是为您进一步使用配置汇编器。db 'Hello, world!', 0xa
只是制作了我上面描述的字节字符串。您没有告诉汇编器在内存中放置这个字符串的位置,因此它选择一个位置,例如在地址0x8201处。然后符号msg
表示地址(仅是一个数字)0x8201。这都是符号化的,需要一些思考。祝你好运。 - thb