每个人。我在 NASM 中编写了一个程序,计算作为变量提供的字符串的长度:
section .data
; str1 db '12345678901'
str1 db '123456789012'
section .text
global _start
_start:
mov eax, str1
mov ecx, -1
.loop:
inc ecx
cmp byte [eax + ecx], 0
jne .loop
.done:
mov eax, 1
mov ebx, ecx
int 80h
当我使用第一个字符串(在此清单中注释)运行程序时,它返回正确的值 11。使用第二个字符串,它比应有的值多 13 - 1。我不知道为什么会这样。它是在 64 位机器上组装的。我尝试用 GDB 检查它,但我不明白这一点......