簡體   English   中英

在 8086 中使用 16 位寄存器操作 32 位數字

[英]manipulating 32 bit numbers with 16 bit registers in 8086

我試圖編寫一個程序來獲取兩個 6 位十進制數並顯示它們的相加,但是在 16 位 8086 中,我將數字定義為雙字並將 LO 放在字 1 中,將 HO 放在字 2 中。類似於下面的代碼,但我不知道下一步要做什么,有人可以建議我下一步操作的算法嗎? 謝謝

x dd(?)
    next_no:
    mov cl,2
    mov ch,4

two_bit:
getch

sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x+2,di

dec cl
jnz two_bit
fourbit:
getch
sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x,di
dec ch
jnz fourbit

在這個程序中,di 是一個存儲通過循環生成的數字的地方,當用戶輸入一個數字時,di 將乘以 10,新的數字將添加到 di 中,例如:獲得 28 di=0*10+2=2 di= 的過程2*10*+8=28

我將提供一個獨立的示例,而不是遵循您未注釋的代碼。

假設您在 DX:AX 中有一個 32 位數字,在 CX:BX 中有一個 32 位數字(這種表示法意味着高 16 位存儲在 DX 中,而低 16 位存儲在 AX 中)。 要添加這些值並將結果保留在 DX:AX 中,您需要:

    add ax,bx
    adc dx,cx

add指令將兩個值並設定C(進位)的位,這取決於是否有進位或不為1或0。 adc指令將兩個值加上進位位的值(然后再次設置進位位)。 這樣,您可以通過繼續執行更多adc指令來添加任意大小的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM