【问题标题】:Incrementing register past its limits. Assembly language addition递增寄存器超出其限制。汇编语言添加
【发布时间】:2016-06-14 12:18:11
【问题描述】:

执行以下行后,EAX 中的值是多少?

mov    eax, 1002FFFFh
inc    ax

答案是1002000h

我的问题是,为什么答案不是1003 0000h1002 0000h 考虑到我们最初是从 32 位开始的,而答案不知何故是 32-4 位。

【问题讨论】:

    标签: assembly binary x86 increment cpu-registers


    【解决方案1】:

    您正在增加 16 位的 AX,并溢出到 0x0000
    所以答案是 0x10020000(不是你所说的 0x1002000,可能是错字)

    要获得 0x10030000 作为结果,您必须改为增加 EAX

    【讨论】:

    • 在哪里可以找到有关此语法的更多信息: '0x0000' ,这是某种十六进制专有语法吗?在这种情况下是否会出现 OF 标志?
    • 哦,很抱歉造成混乱,这是十六进制的 C 样式 :-) 0x10030000 表示您使用 10030000h 的意思
    • @SajSeesSound:NASM 和 GNU 汇编器支持 0xDEADBEEF 风格的常量,如 C,以及 MASM 风格的 0DEADBEEFh。仅限 Windows 的汇编程序通常只支持烦人的 ...h 样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2018-08-26
    • 2012-01-19
    相关资源
    最近更新 更多