【发布时间】:2021-06-11 11:59:25
【问题描述】:
以下代码打印值:-83396
我在这里做的计算是Z2 = (var3 – var2 - 1000) + (var1 – 500)
所以 Z2 = (FFFF0000h - 4000h- 1000) + (24 - 500)
我不确定结果如何是-83396?我只是存储值
在寄存器中为 var2、var3 计算
.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
xor ebx,ebx
mov eax, var3
movzx ebx, var2
sub eax, ebx
xor ebx,ebx
sub eax, 1000
xor ebx, ebx
movzx ebx, var1
sub ebx, 500
add eax, ebx
mov Z2, eax
call writeint
clc
invoke ExitProcess,0
main endp
end main
【问题讨论】:
-
根据我的计算器,这是正确的答案(使用
(0xFFFF0000 - 0x4000- 1000) + (24 - 500) - 2**32将其包装到有符号整数范围内);你期望它是什么?FFFF0000h是-65536的 2 的补码位模式;也许你不知道? IDK 还有什么其他原因会让您对答案感到惊讶,因此作为问答的副本结束。 -
另外,您没有存储
var2或var3,而是将它们作为输入加载到到寄存器中。
标签: assembly masm twos-complement