我试图在 NASM 中做一个循环,它简单地写入一个变量 1 然后再做一次,但是在变量上增加 1 个字节...我想出了这个设计
mov ebx, 0
mov rax, 1
test_loop:
cmp ebx, 4
je test_loop_end
mov [numbet_to_text + ebx], al
inc ebx
jmp test_loop
test_loop_end:
但是当我用这个检查它时,它不会调用:
mov ebx, [numbet_to_text]
cmp ebx, 1111
je teste
检查 gdb 发现当我在写入其中一个字节后写入一个字节时它被损坏了所以......
写入字节 0 ---> 1 ok,但是当我写入 byte up 时我会得到
字节 0----> 随机值.. 和字节 1 ----> 1
正如你在打印件上看到的那样,当我写入 0x40201b 时,我得到一个 1...没关系...但是当我写一个字节时,我会得到 0x40201c 1...好的,但在这种情况下 0x40201b 会得到一个随机值257 我不明白为什么
mov ebx, [numbet_to_text] cmp ebx, 1111 je teste
在 numbet_to_text 处的内存中写入 4 个连续的 bytes 后,您可以预期的值为 0x01010101。当然不是十进制数 1111.
0x40201B contains byte 0x01
0x40201C contains byte 0x01
0x40201D contains byte 0x01
0x40201E contains byte 0x01
第一次写入 0x40201B 后显示 0x00000001 (1)
第二次写入 0x40201B 后显示 0x00000101 (257)
第三次写入 0x40201B 后显示 0x00010101 (65793)
第 4 次写入 0x40201B 后显示 0x01010101
mov rax, 1 mov [numbet_to_text + ebx], al
如果这有可能是 64 位代码,那么最好写:
mov [numbet_to_text + rbx], al