80x86 組合語言 組合 BCD 碼的乘法

2021-07-09 15:03:00 字數 1471 閱讀 6018

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以外的東西參與用符號或者常數表示 ...