VS显示变量数值
如图,为何无法计算.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
aName BYTE "Abraham Lincoln",0
nameSize= ($-aName) ;字符串长度
.code
main PROC
mov ecx, nameSize ;字符串长度给计数器ECX = 00000010h=16
mov esi,0
L1:;把字符压栈
movzx eax, aName
push eax
inc esi
loop L1
INVOKE ExitProcess,0
main ENDP
ENDmain 这段代码中的问题在于使用 loop 指令时未正确设置 ecx 寄存器的初始值。 loop 指令会自动将 ecx 寄存器的值减一,并检查其值是否为零,如果不为零则跳转到指定的标签处。但是在这段代码中, ecx 寄存器的初始值是 nameSize ,这个值是字符串长度,可能不会是循环的次数。因此,需要在使用 loop 指令之前,将 ecx 寄存器设置为预期的循环次数。
修正后的代码如下:
.code
main PROC
mov ecx, nameSize; 设置循环次数为字符串长度
mov esi, 0
L1:
movzx eax, aName
push eax
inc esi
loop L1
INVOKE ExitProcess, 0
main ENDP
END main
通过将 ecx 寄存器设置为字符串长度,可以确保 loop 指令会正确执行预期的次数,从而解决计算问题。 isdkz 发表于 2023-11-22 09:35
这段代码中的问题在于使用 loop 指令时未正确设置 ecx 寄存器的初始值。 loop 指令会自动将 ecx 寄存器的值 ...
GPTAI没理解我的意思,请亲自看看 nameSize是一个宏常量,没有地址,把取地址符号去掉试试
页:
[1]