Writeint 不显示 EAX 寄存器中的值

Writeint not displaying the value in EAX register

我写了下面的汇编代码
它将 writeint 的输出显示为 +0
但是当我将调试点放在 writeint 之前的行上并查看寄存器时
我看到 EAX=0000BFBE。根据我的理解,writeint 应该打印 EAX
的值 登记。它显示 +0 的原因可能是什么?

.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

INCLUDE Irvine32.inc

.data
var1    byte    24
var2    word    4000h
var3    dword   0FFFF0000h
Z1    dword    ?
Z2    dword    ?
Z3    dword    ?
Z4    dword    ?

.code
main proc
xor eax, eax
mov al, var1
add al, 10

xor ebx, ebx
mov bx, var2
add bx, 100

sub ax,bx
mov eax, Z1
call writeint

invoke ExitProcess,0
main endp
end main

将断点放在之前的行上,我假设你的意思是你把断点放在这里:

mov eax, Z1

嗯,看来这条指令在断点处暂停之前并没有真正执行。这是导致 eax 成为 0000BFBE 的事件链:

xor eax, eax
mov al, var1
add al, 10

mov al, var1eax 设置为 18h18h + 1022h,因此整个 eax 当前为 00000022h.

xor ebx, ebx
mov bx, var2
add bx, 100

mov bx, var2bx 设置为 4000h 并且 4000h + 1004064h.

sub ax,bx

计算22h - 4064h,其补码结果为0bfbeh,因此整个eax0000bfbeh。这就是您看到的结果。

然而,mov eax, Z1 使所有这些都变得毫无用处。 Z1 已被零初始化,因此该行也将 eax 设置为 0。这就是为什么 writeint 显示 0.