0

我想创建一个打印AHALBHBL寄存器值的过程。我有这个:

prntABHL:
    PUSH    BL
    PUSH    BH
    PUSH    AL
    PUSH    AH
    PUSH    fourNums  ! defined in data as "%d, %d, %d, %d\n"
    PUSH    _PRINTF
    SYS
    ADD SP, 12        ! reset stack
    RET

这会导致PUSH指令出现​​四个寄存器错误。我假设是因为PUSH需要 16 位值,并且AHAL是 8 位值。

AH如果、ALBHBL寄存器中的值不是 16 位长,如何将它们指定为函数的参数?有没有一种相当直接的方法来解决这个问题?

4

1 回答 1

1

如果您只想将 8 位寄存器的值推送为 16 位值,那么如果您有例如,这很容易。cx或任何其他可免费使用的 16 位通用寄存器 ( cx, dx, bp, si, di):

编辑:movzx在 386 之前的处理器上不可用。替换为 8088/8086 指令。

xor   cx, cx
mov   cl, bl
push  cx
mov   cl, bh
push  cx
mov   cl, al
push  cx
mov   cl, ah
push  cx

如果您没有可免费使用的 16 位通用寄存器,则必须保存要推送的值并将其从那里推送到堆栈。

于 2012-11-26T17:58:49.247 回答