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

时间:2012-11-26 17:45:12

标签: assembly x86 x86-16

我想创建一个打印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位值。

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

1 个答案:

答案 0 :(得分:1)

如果您只想将8位寄存器的值作为16位值推送,那么如果您有例如,则很容易。 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位通用寄存器,则必须保存要在其他位置推送的值并将其从那里推送到堆栈。