bh 與 bl 中各存放著乙個 2 位已組合十進位制 bcd 數,求其乘積返回 dx。
返回 dx 也要變成 bcd 數。
組合型(也稱為壓縮型)的bcd碼,是不能直接做乘法運算的。
因為,在 8088/8086 指令系統中並沒有這樣的乘法指令。
可以採取的方法之一是:
先把 bcd 形式的乘數、被乘數都變換成二進位制數,再用二進位制的乘法指令,算出乘積。
按照題目要求,還要再把乘積變換成 bcd 碼。
這種方法,並不簡單。
另乙個方法是:
迴圈累加。
利用乘數來控制迴圈次數,每一次迴圈,都把被乘數,加到乘積裡面。
加的時候。還可以利用十進位制調整指令,直接就把乘積,變成 bcd 碼。
這種方法,比較簡單。
做而論道利用第二種方法,程式設計如下。
assume cs:code
code segment
start:
mov bx, 1234h ;欲求:dx=12h*34h=0408h
;用 bh 控制迴圈,把 bl 內容累加
;----------------------------
mov dx, 0
mov cl, bh
and cl, 0fh ;留下bh的個位
mov ch, 0
lp1:
mov al, dl
add al, bl
daamov dl, al
mov al, dh
adc al, 0
daamov dh, al
loop lp1
;----------------------------
mov cl, 4
shr bh, cl ;右移四位
mov cl, bh ;留下bh的十位
mov ch, 0
push cx
mov cl, 4
shl bx, cl ;左移四位,乘以10
and bx, 0ff0h ;留下bl*10
pop cx
lp2:
mov al, dl
add al, bl
daamov dl, al
mov al, dh
adc al, bh
daamov dh, al
loop lp2
;----------------------------
;執行到此處,即得出:dx=0408h
mov ah, 4ch
int 21h
;----------------------------
code ends
end start
;----------------------------
提問者評價:謝謝!
80x86組合語言 分類統計
組合語言的程式設計題!急 有100個學生成績,存放在以data為首址的位元組儲存單元中。試統計其中90 含90 以上的人數,60 90 含60 之間的人數,60以下的人數,分別存入max,middle,min三個變數中。15 分鐘前 做而論道 十七級 最快回答 assume ds qq,cs cc ...
組合語言 80x86定址方式
1 立即定址方式 立即定址方式中指令的運算元是8位或16位立即數,並直接出現在指令中。例如 mov al,10h 源運算元為立即定址 執行後al 10h mov ax,0a48h 源運算元為立即定址 執行後ax 0a48h 立即定址只能用於源運算元,不能用於目的運算元。2 暫存器定址方式 暫存器定址...
80x86組合語言定址方式介紹
運算元直接包含在指令 中,可以是8或者16位。立即數作為指令的一部分,直接從biu指令佇列取出,因此速度更快。唯一缺點 只能作為源運算元。指令中所需的運算元在cpu某個暫存器中,可以是8位 16位段暫存器,這個操作完全在cpu內部,因此執行也很快。以下指令需要cpu以外的東西參與用符號或者常數表示 ...