You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MASM汇编函数返回结果异常求助:预期-33实际得65503

问题分析与解决

问题原因

你遇到的问题是16位寄存器结果未符号扩展为32位导致的:

  • 汇编代码中,idiv cx执行后,商存储在16位寄存器AX中,AX = -33对应的16位补码是0xFFED。
  • C++中声明的Tester2()返回32位int类型,x86调用约定下返回值通过32位寄存器EAX传递。但你仅对AX赋值,EAX的高16位默认保持为0,最终EAX = 0x0000FFED,对应十进制的65503,而非预期的-33。

解决方案

在ret指令前添加cwde指令,将16位AX的符号位扩展到32位EAX的高16位,确保返回值正确符号扩展:

; 修改后的汇编代码
Tester2 proc

mov ax, -100
cwd
mov cx, 3
idiv cx
cwde  ; 新增:将AX符号扩展到EAX

ret 
Tester2 endp

end

验证说明

cwde指令会根据AX的最高位(符号位)填充EAX的高16位:当AX为负数(最高位1)时,EAX的高16位会被设为全1,此时EAX = 0xFFFFFFED,对应32位有符号整数的-33,与预期一致。

内容的提问来源于stack exchange,提问作者eve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:04:50