我正在用 Assembly x86-64 编写一个程序,其目标是增加一个值 (num) 直到它达到 10。但是,尽管使用正确的比较来检查 num 是否小于 10,程序仍会继续执行并打印 10 之后的值:
[BITS 64]
default rel
section .data
extern ExitProcess, printf
msg db "%d", 10, 0
num dq 0
section .text
global main
main:
sub rsp, 56
again:
mov r8, [num]
add r8, 1
mov [num], r8
lea rcx, [msg]
mov rdx, [num]
call printf
cmp r8, 10
jge end
jmp again
end:
xor rax, rax
call ExitProcess
执行此操作将打印:
1
2
3
4
5
6
7
8
9
10 ; <--- ??? don´t stop
11
12
13
14
15
16
17
18
19
20
21
[...]
但是当达到 10 时它应该停止。为什么会发生这种情况?