在汇编程序中打印 AH、AL、BH 和 BL 寄存器中的值



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

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

这会导致PUSH指令上的四个寄存器错误。我假设是因为PUSH期望一个 16 位值,而 AHAL 是 8 位值。

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

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

编辑: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 位通用寄存器,则必须保存要推送到其他地方的值并将其从那里推送到堆栈。

最新更新