汇编语言实现非压缩BCD码转压缩BCD码及8位二进制数转BCD码程序
本篇文章给大家谈谈 如何用汇编语言实现将非压缩BCD码转换成对应的压缩BCD码? ,以及 用汇编语言编写一个将8位二进制数转化成BCD码的程序 对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
非压缩BCD码:非压缩型BCD码一个字节可存放一个一位十进制数,其中高4位的内容不做规定(也有部分书籍要求为0,二者均可),低4位二进制表示该位十进制数。非压缩BCD码在汇编中的调整指令为AAA(加法的ASCII码调整)、AAS(减法的ASCII码调整)、AAM(乘法的ASCII码调整)、AAD(除法的ASCII码调整)。
;通常4bit表示1位bcd数,非压缩是指一个单元(8bit)放一个BCD数。这就很简单:MOV CX, MOV AL,(CX)AND AL,0FH ADD AL,30H ;得到一个ascII码数,在AL中 INC CX MOV AH,(CX)AND AH,0FH ADD AH,30H ;得到第二个ascII码数,在AH中
这个很简单啊,把这些非压缩BCD码的低四位和30H相或,不就得到相应的ASCII码了嘛!程序如下:dseg bcd db 02h,04h,01h,08h cnt dw 4 ascii db 4 dup(?)dseg ends cseg cs:cseg,ds:dseg begin:mov ax,dseg mov ds,ax lea si
比如非压缩BCD码存在30H,31H,32H,转换后存在33H,34H BCDCH:MOV A,31H SWAP A ANL A,#0F0H MOV B,A MOV A,32H ANL A,#0FH ORL A,B MOV 33H,A MOV A,30H ANL A,#0FH MOV 34H,A RET
bcd码是表示十进制数的,非压缩bcd码是用8位表示的,其实只用低4位,高4位全为0。例如,十进制数36,用非压缩bcd码表示为:0 0110 ,这是两个字节。压缩bcd码,就把高4位的0省掉了,用一个字节表示两个bcd码了。还是,十进制数36,用压缩bcd码表示为:0011 0110 ,就一个字节
1. 取得低四位 原码与0F进行逻辑与,取得低四位并将高四位清0,得到 0000 0110 2取得高四位 原码左移四位,将高四位移动到低四位上,然后与0F进行逻辑与,取得高四位的值作为BCD码,并将新数的高四位清0,得到0000 0101 若满意请及时采纳,谢谢
可以这样:将其高低八位分别移入8位寄存器,高八位移入的寄存器逻辑左移4位,后与低八位移入的寄存器相或,将高八位寄存器赋给原来的寄存器或存储器中;例如:MOV CL,4 MOV AX,0506h SHL AH,CL OR AH,AL;高低八位寄存器相或,得AH=(0101 0110)B 得到AX的对应的BCD码在AH中。参考资料
如何用汇编语言实现将非压缩BCD码转换成对应的压缩BCD码?
求,成为电子工程师进行单片机系统编程时的首先编程语言。在本设计中,由于C语言程序有利于实现较 复杂的算法,汇编语言程序具有较高的效率并且容易精确计算程序运行的时间,而超声波测距器的程序既 有较复杂的距离计算又要求精确计算超声波测距时程序运行的时间,所以本设计采用C语言和汇编语言 混合编程来实
2进制,8进制,10进制,16进制,之所以叫X进制,是因为他们都相等,只不过表现形式不一样。估计你是想转化成BCD码。 之所以叫X码,就是因为他和进制不相等,只是为了人的视觉方便,才人为定义的!!!
求单片机 数制转换(二进制转换十进制)的汇编语言????谢谢
二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理。二进制的1111,即2#1111 ,等于10#的15。而BCD#2#1111却是一个非法数据,因为BCD码只能表示十进制的0-9之间的数,这一-串2#1111还是等于10#15。因为BCD码的
当两个BCD码相加,如果和等于或小于 1001(即十进制数9),不需要修正;如果相加之和在 1010 到1111(即十六进制数 0AH~0FH)之间,则需加 6 进行修正;如果相加时,本位产生了进位,也需加 6 进行修正。这样做的原因是,机器按二进制相加,所以 4 位二进制数相加时,是按“逢十六进一”的原则
BCD码减法也可用补码运算代替,原理和之前写过的八位二进制数补码运算原理相同。八位二进制数的范围是00H~FFH,八位BCD码的范围是00H~99H,也可以像补码运算一样画一个时钟,起点是00H,00H逆时针的第一个数是99H。只要有时钟,就可以用补码运算规则,那么BCD码的补码如何求。举例说明,红色弧线
1、加3移位法 以二进制数( Xn)B=(10+Xn)D为例,串行输入三位后,(0101)B=5(D)左移一位后:()B=(10+Xn)D 如果()B直接输出显示为:当Xn=0时,=0x0A。此为错误的BCD码。采用加3移位法,修正移位结果:串行输入三位后,结果大于4
当然不是这样算了,DA不是简单的进制转换 减法时先将减数化为100的补数,这题即是81H 然后相加 00001 加后结果 进行DA转换 低四位小于9,不变,所以第四位不用加数;高四位大于9,要进行BCD调整,所以要加6,即 10000 得出
1、bin就是二进制码,首先打开电脑自带的计算器,点击三根横线。2、在菜单中点击选择程序员。3、进入程序员计算器,点击bin。4、输入你要转换的bin码,以1为例,得到一个十进制数字3577。5、百度首页搜索码与十进制在线转换工具,点击工具进入。6、进入工具,点击选择十进制转BCD。7、
4ch int ends end start
使用减法方法将八位二进制转成三位bcd码。该数从单位20H取得大概方法是将该数减100直到不能再
1、首先左移要转换的二进制码1位; 左移之后,BCD码分别置于百位、十位、个位; 如果移位后所在的BCD码列大于或等于5,则对该值加3;继续左移的过程直至全部移位完成,并检查每一列对应的bcd码是否 2、接着看信号列表。3、然后二进制代码设计。4、十进制代码。5、十六进制,最后就完成了。注意
比如我的二进制码为: 则BCD码为一位一位的转换:0 0 0000 0001 一般我们都是将十进制代码转成BCD码的:0=0000 1=0001 2=0010 3=0011 4=0100 5=0101 6=0110 7=0111 8=1000 9=1001 至于你要程序:给你个思路吧,你可以做个顺序结构,对比你输入

PUSH BX PUSH CX PUSH DX PUSH DI ;现场保护 MOV CX,3 ;16位二进制码转换成压缩BCD码最多需要3个字节 RE: SUB DX,DX ;dx清零 DIV WORD PTR 0AH ;AX除于10,商可能越界,所以DX-AX连用,故将0AH转换为字 MOV BL,DL ;将余数保存,因为DL==DX SUB DX,DX ;dx清零 DIV WORD PTR 0AH
电压值转换V1=AD*500/256;十进制转换 bai=V1/100 ;shi=V10/10 ;ge=V1 ;用C语言来做的话就是这样的式子,很简单。但若用汇编的话因为涉及到双字节的乘除法 指令无法完成,比较麻烦,可以从网上找模板修改套用。
code cs:code org : jmp bbbx db 123y dw ?bbb: push cs pop ds push cs pop es mov al,x mov bx,0 mov cx,0m1: cmp al,100 jl m2 sub al,100 inc cl jmp m1m2: cmp al,10 jl m3 sub
将其高低八位分别移入8位寄存器,高八位移入的寄存器逻辑左移4位,后与低八位移入的寄存器相或,将高八位寄存器赋给原来的寄存器或存储器中;例如:MOV CL,4 MOV AX,0506h SHL AH,CL OR AH,AL;高低八位寄存器相或,得AH=(0101 0110)B 得到AX的对应的BCD码在AH中。参考资料:无
除以10,余数就是个位;再除以10,就行了。
用汇编语言编写一个将8位二进制数转化成BCD码的程序
bcd码通常是指8421码就是将十进制的数以8421的形式展开成二进制,大家知道十进制是0~9十个数组成,这十个数每个数都有自己的8421码 bcd码是四位二进制码,也就是将十进制的数字转化为二进制,但是和普通的转化有一点不同,每一个十进制的数字0-9都对应着一个四位的二进制码,对应关系如下:十进制
首先将ASCII码化成十进制,想直接到BCD不行 BCD码有8421、2421等 一般多用8421型的 是什么意思呢,举个例子(8421):比如8(BCD)=1000 即8X1+4X0+2X0+1X0=8 (2421):8(BCD)=1110 道理都是一样的。单位的十进制就像上面一样,那么像2156【BCD (8421)】=0 0110 以上是
第(1)空中,当CX为奇数时,要将地址最低的ASCII码即第一个ASCII码按照非组合BCD码格式转换,即一个字节只存第一个的BCD码。所以只需将AL的高四位屏蔽掉,再用STOSB指令将AL存储到DI中。EVN段,当ASCII码字符个数CX为偶数时,接连取两个数,将前一个数AL(如34H)的高四位屏蔽掉,并赋值给
其实ascII码是很容易得到的,书上一般都会有那个表格,对应的你可以读出你所需的字符所对应的二进制代码,当你把8位二进制代码写出时,我们就可以转换为BCD码了,具体方法是:8,4,2,1。比如我的二进制码为: 则BCD码为一位一位的转换:0 0 0000 0001 一般我
ASCII的数字转换为BCD码数值很简单的,直接减30H就可以了。
ascii码到十进制(BCD)的转换 其实ascII码是很容易得到的,书上一般都会有那个表格,对应的你可以读出你所需的字符所对应的二进制代码,当你把8位二进制代码写出时,我们就可以转换为BCD码了,具体方法是:8,4,2,1。比如我的二进制码为:则BCD码为一位一位的转换:一般我们都是将十进制代码转成BCD码的:0=00001=00012=00103=00114=01005=01016=01107=01118=10009=1001至于你要程序:给你个思路吧,你可以做个顺序结构,对比你输入的ascII码,当对到相同的0或1时,直接进行查表(tab),表格很简单,因为只有01,所以就写两个就好了,就是,0001,然后返回。要是还不明白可以继续提问。
首先将ASCII码化成十进制,想直接到BCD不行BCD码有8421、2421等 一般多用8421型的是什么意思呢,举个例子(8421):比如8(BCD)=1000 即8X1+4X0+2X0+1X0=8(2421):8(BCD)=1110道理都是一样的。单位的十进制就像上面一样,那么像2156【BCD (8421)】=0 0110以上是有权BCD码还有就是无权BCD码,像余三码,格雷码等, 其中余三码用的普遍一些像余三码 就是在有权码的基础上加3即0011 B举个例子:456(余三码)=0 什么意思?就是4(8421) +0011=0100+0011=0111以此类推,后面都是一样 。像汇编语言,有人说可以,但我不知道该从哪方面说。我不否认,因为汇编语言写出来之后是经过计算机处理的,计算机的程序是经过人大脑的,理性思维,这个转换过程一定要经过十进制的转换,不过,在计算机中,十进制都以二进制的形式存储的,但这个转换过程,在设计时,头脑要考虑的。也就是说,在汇编语言写进微机中隐形中有十进制的转换 。
1、首先左移要转换的二进制码1位; 左移之后,BCD码分别置于百位、十位、个位; 如果移位后所在的BCD码列大于或等于5,则对该值加3;继续左移的过程直至全部移位完成,并检查每一列对应的bcd码是否2、接着看信号列表。3、然后二进制代码设计。4、十进制代码。5、十六进制,最后就完成了。注意事项:BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。
假设AL中存放的是需要的8位数xor ah,ahmov cx,: sal al,1 ;左移adc ah,0;加 loop1最终结果AH中为1的个数。
这个需要用三片74185级联实现连接方法看图
先做位运算然后转换BCD,不用百十个的钱。建议你去看一下BCD的定义,这个问题就简单了
可以参考以前的问题:
;我这程序里边有个十六进制转十进制的.你参考吧.;-------------------------------;数据段定义: ;定义缓冲区接收用户输入的查找范围字符串buf db 10db ?db 10 dup(?);定义输入是否有非数字字符标志 1;用以权值的增加或减少 10;输入数字的每一位的权值 dw 13,10,' input a 1~~10000:',13,10,'$' db 13,10,' an item ! 0:exit, 1:start',13,10,'$' db 13,10,' input !',13,10,'$' ends;--------------------------------------------------------code ;---------------------------------------------------------- cs:code,ds::;---------------------------------------push ax;---------------------------------------;把数据段首地址赋予dsmov ax, ds,ax ;---------------------------------------;主程序 proc far p1:;要求用户选择进入查找还是推出lea dx, ah,9int 21h;接收用户的选择mov ah,01int 21h;判断用户是否输入正确的选项cmp al,'0'je p3cmp al,'1'jne p1;调用check子程序,将用户输入字符串转化为数字call check;判断用户的输入是否都是数字字符cmp just,0je p2;调用子程序,查找并输出相应的素数列表call p1;输出提示输入数字字符p2:lea dx, ah, p1p3: axpop dsmov ax, endp;---------------------------------------;子程序 proc;初始化mov bx,0mov ,1mov ,0ah;输出提示用户输入要查询素数的范围lea dx, ah, 21h;接收用户的输入,保存于缓冲区lea dx, ah, 21h;----------------------------------------;将输入的字符的个数保存于si,用于计数mov al, si,axSum:;取第si+1个字符,判断它是否为数字字符mov al, al,'0'jb g1cmp al,'9'ja g1and ax,000fh;将此位数字乘以相应的权值并加到bx;mul ; add bx,ax;将权值乘以10; mov ax,; mul ; mov , sijnz Sum;置是否包含字符标志位mov just,1jmp g2 g1:mov just,0g2: endp;-------------------------------------;子程序 proc;把初始化为输入数值的最高位权值;因在check子程序中,多乘了一次10mov ax, ,ax;CX←输入的数值mov cx,bxmov si,1h;恢复ax的值:mov ax,si;检查下一个数值next:inc axcmp ax,cxja Exit;除数应该从2开始mov bx,2h;判断一个数是否能被比它小的数整除text:cmp bx,axjnb si, bxcmp dx, bxmov ax,sijmp text;打印当前素数:mov bx,axand dx,0hmov di,:div diadd ax, si,dx;save dl,almov ah,2hint ax, di,axmov ax, di,0hjne l1;输出一个空格mov dl, ah,2hint ax,bxcmp ax,cxjb next Exit: PROC NEAR ;递归子程序PUSH BPMOV BP,SPMOV AX,CMP AX,2JE AX,1JE :DEC FIB ;调用递归子程序POP AXMOV AX, ;将前两项相加ADD AX,MOV ,AXJMP :MOV AX,1MOV , FIB ;调用递归子程序POP :POP BPPOP PROC NEAR;将16进制转化为10进制的子程序MOV AX,DIMOV CX, CX, CX, CX, CX, BX,0MOV , PROC DX,0DIV DXCMP AL,0JZ :MOV BX,CMP BX,0JZ :ADD AL, DL,ALMOV AH,02INT BX,1MOV ,:POP DXMOV AX, ENDP;-------------------------------------code start
也以56为例来说明步骤上面问题是要分别取得压缩BCD码的高四位和第四位,然后再分别作为非压缩码的低四位,而高四位用0来填充取得,具体步骤如下1. 取得低四位原码与0F进行逻辑与,取得低四位并将高四位清0,得到 0000 01102取得高四位原码左移四位,将高四位移动到低四位上,然后与0F进行逻辑与,取得高四位的值作为BCD码,并将新数的高四位清0,得到0000 0101若满意请及时采纳,谢谢
bcd码是表示十进制数的,非压缩bcd码是用8位表示的,其实只用低4位,高4位全为0。例如,十进制数36,用非压缩bcd码表示为:00110,这是两个字节。压缩bcd码,就把高4位的0省掉了,用一个字节表示两个bcd码了。还是,十进制数36,用压缩bcd码表示为:,就一个字节就行了。节省了一个字节。
关于 如何用汇编语言实现将非压缩BCD码转换成对应的压缩BCD码? 和 用汇编语言编写一个将8位二进制数转化成BCD码的程序 的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
























