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, var1
将 eax
设置为 18h
而 18h + 10
为 22h
,因此整个 eax
当前为 00000022h
.
xor ebx, ebx
mov bx, var2
add bx, 100
mov bx, var2
将 bx
设置为 4000h
并且 4000h + 100
为 4064h
.
sub ax,bx
计算22h - 4064h
,其补码结果为0bfbeh
,因此整个eax
为0000bfbeh
。这就是您看到的结果。
然而,mov eax, Z1
使所有这些都变得毫无用处。 Z1
已被零初始化,因此该行也将 eax
设置为 0。这就是为什么 writeint
显示 0.
我写了下面的汇编代码
它将 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, var1
将 eax
设置为 18h
而 18h + 10
为 22h
,因此整个 eax
当前为 00000022h
.
xor ebx, ebx
mov bx, var2
add bx, 100
mov bx, var2
将 bx
设置为 4000h
并且 4000h + 100
为 4064h
.
sub ax,bx
计算22h - 4064h
,其补码结果为0bfbeh
,因此整个eax
为0000bfbeh
。这就是您看到的结果。
然而,mov eax, Z1
使所有这些都变得毫无用处。 Z1
已被零初始化,因此该行也将 eax
设置为 0。这就是为什么 writeint
显示 0.