Ⅰ 用匯編語言編寫多位元組壓縮bcd碼減法程序,要求顯示被減數,減數及結果
;修改'899',和'999'的長度,即可計算任意長度的相加
;如d10db'18929387499'
;d12db'18234287439'
;補充,這是相加,你要求是相減,搞差了,減法的附在後面
dsegsegment
d10db'899'
len1equ$-d10;注意d10與d12長度相同,可以做不同,但比較麻煩,這里沒做
d11db'+'
d12db'999';長度與d10相同
d13db'=','$'
d2dblen1+1p(0),'$'
dsegends
assumecs:cseg,ds:dseg
csegsegment
start:
movax,dseg
movds,ax
movah,9
leadx,d10
int21h
leasi,d10
leadi,d12
leabx,d2
addsi,len1-1;指向個位數位置
adddi,len1-1;指向個位數位置
addbx,len1;指向個位數位置
movcx,len1;計算器
clc;清除cf
c0:
movah,0;清除ah
moval,[si];取對應位置上的數字相加
andal,0FH;
movdl,[di];
anddl,0FH;
addal,dl;相加
aaa;調整
addal,[bx];加上可能的進位
aaa;再調整
mov[bx],al;保存到對應的位置上
mov[bx-1],ah;可能存在的進位,保存到對應的位置上
decsi;下一位相加
decdi
decbx
loopc0
movcx,len1+1
leabx,d2
c1:
xorbyteptr[bx],30H;將結果轉換為ascII值
incbx
loopc1
movcx,len1
leabx,d2
c2:
moval,[bx];查找結果中,第1個結果不是0的數字
cmpal,30H;從此開始顯示結果,以免出現0123這樣的結果
jnzp0
incbx
loopc2
p0:
movdx,bx
movah,9
int21h
movah,4ch
int21h
csegends
endstart
;這是減法的代碼
;有個bug,被減數必須大於減數時才正確。
;暫時先這樣
dsegsegment
d10db'991'
len1equ$-d10;注意d10與d12長度相同,可以做不同,但比較麻煩,這里沒做
d11db'-'
d12db'192';長度與d10相同
d13db'=','$'
d2dblen1+1p(0),'$'
dsegends
assumecs:cseg,ds:dseg
csegsegment
start:
movax,dseg
movds,ax
movah,9
leadx,d10
int21h
leasi,d10
leadi,d12
leabx,d2
addsi,len1-1;指向個位數位置
adddi,len1-1;指向個位數位置
addbx,len1;指向個位數位置
movcx,len1;計算器
clc;清除cf
c0:
movah,0;清除ah
moval,[si];取對應位置上的數字相加
andal,0FH;
movdl,[di];
anddl,0FH;
subal,[bx];減去可能的借位
aas;再調整
subal,dl;相減
aas;調整
negah;如有借位,轉換為正數1
mov[bx],al;保存到對應的位置上
mov[bx-1],ah;可能存在的進位,保存到對應的位置上
decsi;下一位相加
decdi
decbx
loopc0
movcx,len1+1
leabx,d2
c1:
xorbyteptr[bx],30H;將結果轉換為ascII值
incbx
loopc1
movcx,len1
leabx,d2
c2:
moval,[bx];查找結果中,第1個結果不是0的數字
cmpal,30H;從此開始顯示結果,以免出現0123這樣的結果
jnzp0
incbx
loopc2
p0:
movdx,bx
movah,9
int21h
movah,4ch
int21h
csegends
endstart
Ⅱ 匯編語言中的bcd碼默認是壓縮bcd還是非壓縮bcd
這個,沒有默認,只有開發者定義使用哪種編碼。早年的時候,計算機的配備比較低,為了節省內存,使用壓縮的BCD碼就比較好,現在存儲這方面的限制比較小了,非壓縮也無所謂了。主要看開發者喜歡哪種方式了。
Ⅲ 匯編語言壓縮BCD碼和非壓縮BCD碼是怎麼回事
BCD碼是表示十進制數的,非壓縮BCD碼是用8位表示的,其實只用低4位,高4位全為0。
例如,十進制數36,用非壓縮BCD碼表示為:0000 0011 0000 0110 ,這是兩個位元組。
壓縮BCD碼,就把高4位的0省掉了,用一個位元組表示兩個BCD碼了。
還是,十進制數36,用壓縮BCD碼表示為:0011 0110 ,就一個位元組就行了。節省了一個位元組。
Ⅳ 匯編語言程序設計:一個字的壓縮BCD碼的減法
壓縮的BCD碼減法的十進制調整指令是DAS,指令格式為:DAS(隱含對寄存器AL操作) 功能為:如果AL的低四位>09H,或者標志位AF=1,則將AL減06H調整,AF=1;如果AL的高四位>09H,或者標志位CF=1,則將AL-60H調整,CF=1。
Ⅳ 如何用匯編語言實現將非壓縮BCD碼轉換成對應的壓縮BCD碼
MOV R2, #05H;非壓縮BCD碼
MOV R3, #06H
MOV A, R2 ;將R2傳給A
SWAP A ;A的高低4位交換
ORL A, R3 ;將R3與A或運算
MOV R4, A ;運算後的值即壓縮碼
關鍵是SWAP和ORL運算。
Ⅵ 匯編 壓縮BCD碼有哪些
十進制數的二進製表示形式,低四位表示一位高四位表示一位,例如:66H=66。所以可以根據自己的需要定義
Ⅶ 51單片機匯編語言把ASCII碼轉換為壓縮BCD碼
mov R6,#30H
mov R7,#0
mov DPTR,#2000H
mov R2,10
L1:
movx A,@DPTR
inc DPTR
anl A,#0FH
swap A
mov R0,A
movx A,@DPTR
inc DPTR
anl A,#0FH
orl A,R0
push DPH
push DPL
mov DPH,r6
mov DPL,r7
movx @DPTR,A
inc DPTR
mov R6,DPH
mov R7,DPL
pop DPL
pop DPH
djnz R2,L1
Ⅷ 如何用匯編語言實現將壓縮BCD碼轉換成對應的非壓縮BCD碼
;入口al,出口ax
packtobcdprocnear
pushbx
pushcx
movbl,al
andbl,15
movcl,4
shral,cl
movah,al;高位放在ah中
moval,bl;地位放在al中
popcx
popbx
ret
packtobcdendp
Ⅸ 用匯編語言將壓縮BCD碼轉換成對應十進制數字的ASCLL碼
將壓縮BCD碼轉換成對應十進制數字的ASCLL碼,其實就是將在BCD碼的基礎上加30,這就是比較經典的匯編例題啊。
Ⅹ 跪求匯編語言4位壓縮BCD碼與4位壓縮BCD碼相乘的程序!
;入口參數
;
AL:4位壓縮BCD碼於低4位
;
BL:4位壓縮BCD碼於低4位
;出口參數
;
AL:壓縮BCD碼形式的乘積
DAM
PRO
PUSH
BX
PUSH
CX
MOV
BH,0AH
MOV
CL,4
XOR
AH,AH
MUL
BL
XOR
AH,AH
DIV
BH
SHL
AL,CL
XOR
AL,AH
POP
CX
POP
BX
DAM
ENDP