x86 NASM汇编:db字节标签与数组寄存器赋值差异解惑
关于x86 NASM汇编中字节加载到双字寄存器的疑问
我正在学习x86 NASM汇编,从基础内容入手,编写了如下代码并希望理解其输出:
section .data msg db 'Testing', 0xA size db 8 array db 21, 22, 17, 3 section .text global _start _start: ; sys_WRITE the string mov eax, 4 mov ebx, 1 mov ecx, msg mov edx, [size] int 0x80 ; Exit - Return code is the first element of array mov eax, 1 mov ebx, [array] int 0x80
输出结果为:
Testing .shstrtab.text.data %
我已经明白,用db在.data段定义字符串长度size会导致上述异常输出——这是因为将字节数据加载到双字大小的edx寄存器时,寄存器高位会残留垃圾数据,导致sys_write写入了超出预期的内容(解决方案是用dd声明size,但这不是我关注的重点)。
但我疑惑的是:为什么数组不会出现这种情况?执行echo $?后返回值是21,这不应该是垃圾数据才对吗?我希望从基础层面理解该问题,已知解决方案但不清楚背后原因,恳请解惑。(注:%符号可能是Oh-My-Zsh主题导致)
内容的提问来源于stack exchange,提问作者Stopfield
相关产品推荐
相关产品推荐

