我想创建一个打印AH
,AL
,BH
和BL
寄存器值的过程。我有这个:
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位值,AH
和AL
是8位值。
如果AH
,AL
,BH
和BL
寄存器中的值不是16位长,我如何指定它们作为函数的参数?是否有一种相当直接的方法来解决这个问题?
答案 0 :(得分: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位通用寄存器,则必须保存要在其他位置推送的值并将其从那里推送到堆栈。