2012-11-26 114 views
0

我想创建一个打印AHALBHBL寄存器的值的过程。我有这样的:在汇编器中打印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位的值,并且AHAL是8位的值。

我怎样才能在AHALBH,并BL寄存器作为参数指定的值的函数,如果他们不是16位长?有没有合理的解决这个问题的简单方法?

回答

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位通用寄存器自由使用,你必须保存保存到别的地方推值,并将它推到从那里叠加。

+0

我收到一条错误消息,在执行'MOV CL,BL'和其他将某些东西移动到CL的行上的'Register error'。你有什么想法可能导致什么?它们具有匹配的长度。 –

+0

你在用什么汇编语言? – nrz

+0

我正在使用8088汇编程序 –