2012-11-26 118 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彙編程序 –