pxlt.net
当前位置:首页>>关于用汇编语言将BCD码转化为十六进制数的资料>>

用汇编语言将BCD码转化为十六进制数

Hex2Bcd: CLR A MOV BCDDATA,A ;正负号初始化 MOV A,R6 JNB ACC.7,H2B MOV BCDDATA,#0AH ;建负号标志 CPL A MOV R6,A MOV A,R7 CPL A INC A MOV R7,A JNZ H2B INC R6 H2B: MOV R4,#0AH MOV B,R4 MOV A,R6 DIV AB

8位的应该是高四位*10,再+低四位,然后就可以了,相互转化不好弄

一个十六进制数最大255,所以转换为压缩BCD码需要两个字节,转换方法是:1、第一步,用该数除以100,结果存入高八位字节的低四位.2、第二步用余数除以10,结果存入低八位的高四位.3、第三遍,将余数存入低八位的低四位.例程:H2BCD: MOV B,#100 DIV AB MOV R2,A MOV A,B MOV B,#10 DIV AB SWAP A,B ANL A,#0F0H ORL A,B MOV R3,A RET

十进制数也就是bcd码,或者压缩bcd码.如果是bcd码,直接加30h就可以了.如果是压缩bcd码,那么分离成两个bcd码,分别加30h就可以.

1234567891011121314151617181920212223242526272829303132 code segment assume cs:code data_num db 12h,23h,34h,45h,4 dup(0) start: push cs pop ds push cs pop es lea si,data_num mov di,si add di,4 cld mov cx,4 @m1: lodsb mov

数学上的数字0-9,用2进制表示,分别是:0000, 0001 ,0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001 而计算中,一个byte有8位,0000 0000,刚好可以容纳得下2个这样的数字,比方:al中存储的是 0001 0010,把高4位和低4位分别看作一个这样的数字,即十进制的12,我们把这样的表示法叫作BCD编码,刚刚这个例子叫做压缩的BCD编码.如果al中8位只表示一个BCD数字,ah中表示另一个BCD数字,则这种占用8位表示编码的方式,叫作非压缩BCD编码.可以看出,不管压缩,还是非压缩,都是2进制表示,最终都可以表达为16进制数字.

ANL 20H, #0FHANL 21H, #0FHANL 22H, #0FHMOV A, 20HMOV B, #10MUL ABADD A, 21HMOV B, #10MUL ABADD A, 22HMOV 23H, ASJMP $END

先将BCD码转换为十进制,然后在再转换成十六进制8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码.和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用.

//不用数组 不考虑负数和0 #include int main() { int num; printf("Please input a number\n"); scanf("%d",&num); printf("the number is %d:\nthe convert is :",num); while ( num > 0 ) { printf("%d",num % 10); num /= 10; } printf("\n"); return 0; }

老兄,用汇编语言写这个,别指望别人为了20分帮你写啊.中心思想可以告诉你,BCD码就是0-9,其余A、B、C、D、E、F都是无效,只要考虑这几个数字.你要先把这些数字传到AX中,换一种形式,然后再传回来.汇编里面有专门关于BCD 码的那节命令,我记不得了,可以供你参考的.还有一个简单的方法,你可以去查看计算机等级考试(三级)pc技术软件考试习题集,里面说不定有你要的东西.软件这东西,开始的时候就是你抄我我抄你,熟练了以后再自己写的.别忘记给我悬赏分啊

ncry.net | 9213.net | dbpj.net | rprt.net | qhnw.net | 网站首页 | 网站地图
All rights reserved Powered by www.pxlt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com