这是一个简单的程序:
%include 'utils/system.inc'
section .data
first: db 'First is bigger', 0xA,0
second: db 'Second is bigger', 0xA,0
a: db 18
b: db 20
section .text
global start
start:
mov rax, [a wrt rip]
mov rbx, [b wrt rip]
cmp rax, rbx
jle else
mov rsi, qword first
mov rdx, 0x10
jmp end
else:
mov rsi, qword second
mov rdx, 0x11
end:
xor rax, rax
xor rbx, rbx
mov rax, 0x2000004
mov rdi, stdout
syscall
xor rdi, rdi
mov rax, 0x2000001
syscall
问题是变量a
包含的值不同于18。
以下是lldb
向我展示的内容:
(lldb)p a
(void *)$ 0 = 0x0000000000001412
(lldb)p b
(void *)$ 1 = 0x0000000000000014
(lldb)p - 格式小数a
任何想法发生了什么?我知道,如果我将a
声明为dq
,那就没问题,但我想了解它为什么会发生。