You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:23:44