Ⅰ 用汇编语言编写多字节压缩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