我想创建一个打印AH
、AL
、BH
和BL
寄存器值的过程。我有这个:
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 位值,而 AH
和 AL
是 8 位值。
如果AH
、AL
、BH
和BL
寄存器中的值不是 16 位长,我如何将它们指定为函数的参数?有没有一种相当直接的方法来解决这个问题?
如果您只想将 8 位寄存器的值推送为 16 位值,那么如果您有 eg,这很容易。 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 位通用寄存器,则必须保存要推送到其他地方的值并将其从那里推送到堆栈。