非壓縮的bcd碼表示的兩位十進位制運算

2021-03-31 08:56:30 字數 2778 閱讀 9282

;x*y/t並把結果存入u , u+1, u+2, u+3

data segment

x dw 2 dup(?)

y dw 2 dup(?)

t db 1 dup(?)

u db 1 dup(?)

z dw 2 dup(?)

i dw 2 dup(?)

j dw 2 dup(?)

k db 1 dup(?)

m db 1 dup(?)

n db 1 dup(?)

data ends

code segment

assume cs:code , ds:data

start: 

mov ax, data

mov ds, ax

mov x, 0908h

mov y, 0302h

mov t, 06h 

mov cx, x

mov dx, y

mov al, cl

mov bl, dl

mul bl;x第一位相乘的結果

aammov z, ax;空出ax

mov al, ch

mul bl

aammov bx, z

mov bl, bh

mov bh, 0

add ax, bx

aaa;*********************

mov i, ax

mov al, dh

mov bl, cl

mul bl;x第二位相乘的結果

aammov bx, i

add ax, bx

aaamov i, ax

;**********************

mov al, ch

mov bl, dh

mul bl;x第三位相乘的結果

aam 

mov bx, i

mov bl, bh

mov bh, 0

add ax, bx

aaamov j, ax

;**********************

;除法mov al, ah

mov ah, 0

aad

div t

mov k, al;

mov bh, ah

mov ax, j

mov ah, bh

aaddiv t

mov u, al;儲存結果2

mov bh, ah

mov ax, i

mov ah, bh

aaddiv t

mov n, al;

mov bh, ah

mov ax, z

mov ah, bh

aaddiv t

mov m, al

mov al, m

mov ds:[0], al

mov al, n

mov ds:[1], al

mov al, u

mov ds:[2], al

mov al, k

mov ds:[3], al

mov ah, 4ch

int 21h

code ends

end  start

演算法具體:

1.其中對與第一道題目的演算法,完全是自己琢磨出來的,演算法的基本思想是這樣的:對於一位的非壓縮的

bcd碼我們可以很容易的得到結果,而對於二位

bcd碼,我們可以將其看作是四步這樣的操作的組合,模擬乘法的計算過程:

(所用變數不是程式的變數)

1.用

aam調整個位的乘積結果,然後將結果存入乙個數

i,待用 2.

再將乘數的個位和被乘數高位按

aam調整相乘,存入

j,調出i的高

8位,存入暫存器的低

8位,對其調入的暫存器的高8位賦

0,然後和j用

aaa調整相加,存回j。

3.

取乘數的高位和被乘數的低位,相乘,也一樣做

aam調整,存入k,將

j的和

k相加,結果存入k。做

aaa調整。 4.

將乘數的高

8位和被乘數的高位相乘,做

aam調整,存入

m,然後將k的高

8位存入暫存器的低

8位,對其調入的暫存器的高8位賦

0,然後和m做

add相加作

aaa調整,結果存入

m。至此,我們可以知道,i,

k的低

8位儲存的是結果的個位和十位,而

m儲存的是百位和千位。

以上是乘法的演算法,下面是除法,也是同樣的道理,我們用模擬方法:1.取

m的低

8位的值,和

t(除數)作

aad調整的除法,結果存入乙個變數

u,餘數傳入

ah用於下乙個運算。 2.

然後從m的低8

位存入al

。進行運算,作

aad調整。值存入

v,餘數傳入

ah用於下乙個運算。 3.

然後從k的低8

位存入al

。進行aad

調整運算。值存入

w,餘數傳入

ah用於下乙個運算。 4.

然後從i的低8

位存入al

。進行aad

調整運算。值存入

x。得到結果

uvwx

組成的一組非壓縮的

bcd

十進位制與BCD碼轉換的演算法

手頭上在做的專案需要用到ds1302實時時鐘,ds1302讀出來的資料是bcd碼,需要轉換,寫入也是。bcd是指用二進位制來表示十進位制數的編碼,即用4位二進位制來表示一位十進位制數,因此4位二進位制數表示最大的十進位制數9 1001 只取十六個數中的十個數。比如 bcd碼 0x99 153 該bc...

彙編 判斷乙個兩位十進位制數是否為平方數

思路 這道題的思路非常簡單,列舉100以內的平方數,再判斷是否與輸入的數相等 但用組合語言實現可能會有一些複雜 data segment x dw s1 db is a square number s2 db is not a square number data ends code segment...

最簡單粗暴的理解十進位制與BCD碼之間的轉換關係

模擬十六進製制與二進位制的關係即可簡單粗暴地得出十進位制與bcd碼的關係 1 16進製制數 0x15 的二進位制表示為00010101 2 十進位制數 15 的bcd碼表示為 00010101 哇哇哇,是不是很簡單。哈哈哈!這樣就可以很簡單的寫出十進位制與bcd碼之間的轉換函式了 function ...