lm68140318 发表于 2023-11-22 09:35:18

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

isdkz 发表于 2023-11-22 09:35:27

这段代码中的问题在于使用 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 指令会正确执行预期的次数,从而解决计算问题。

lm68140318 发表于 2023-11-22 09:37:06

isdkz 发表于 2023-11-22 09:35
这段代码中的问题在于使用 loop 指令时未正确设置 ecx 寄存器的初始值。 loop 指令会自动将 ecx 寄存器的值 ...

GPTAI没理解我的意思,请亲自看看

人造人 发表于 2023-11-22 13:59:49

nameSize是一个宏常量,没有地址,把取地址符号去掉试试
页: [1]
查看完整版本: VS显示变量数值