EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
DSEG SEGMENT
SOURCE DB N DUP()
RESULT DB N/2 DUP(0)
NAME0 DB 'INPUT1DAT',0
NAME1 DB 'OUTPUT1DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DB 256 DUP()
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, SS:SSEG, DS:DSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV ES,AX
LEA DX,SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; BEGIN
MOV CX,0
LEA BX,SOURCE
NEXT: MOV AL,[BX]
CMP AL,0
JZ GOON
INC CX
INC BX
JMP NEXT
GOON: LEA SI,SOURCE
LEA DI,RESULT
ROR CX,1 ;是偶数吗?
JNC EVN ;是
ROL CX,1 ;否
LODSB
AND ____(1)__AL__,0FH
STOSB
DEC CX
ROR CX,1
EVN: LODSB
AND ____(2)_AL___,0FH
MOV BL,AL
LODSB
PUSH CX
MOV CL,___4_(3)____
SAL AL,___CL_(4)____
POP CX
____(5)_OR___ AL,BL
STOSB
LOOP EVN
; END
EXIT: LEA DX,RESULT
LEA SI,NAME1
MOV CX,N/2
CALL SAVE
RET
START ENDP
CSEG ENDS
END STA
★此程序要首先理解什么是压缩的BCD码。压缩的BCD码就是一字节存放两位BCD码。还要懂得如何将十进制的ASCII码转换成BCD码。考查了ROR,ROL,LODSB,STOSB等指令的用法。
程序的数据段中定义了四个字节型变量,原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是堆栈段,定义了一个256个字节的堆栈区。堆栈段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
先来看NEXT这一段程序,将BX中的内容送AL中。BX是原始数据的偏移地址,其初值为0。将AL与末尾字符0比较,若相等,则转向GOON段;否则,CX和BX都加1,继续转向NEXT段。所以NEXT段的作用是统计ASCII码字符的个数,用CX来表示。
GOON段,先将原始数据的偏移地址送SI中,结果数据存放的偏移地址送DI中。开始判断ASCII码字符的个数即CX为奇数还是偶数。将CX循环逻辑右移一位,将最低位移入CF中。由CF来判断CX的奇偶性。若CF=0,表示CX为偶数,则转向ECN段;否则,CX为奇数时,将CX循环逻辑左移一位,CX恢复原值。再用LODSB指令将由SI作为地址指针的串元素装入到AL中,同时修改SI,指向下一个元素。
第(1)空中,当CX为奇数时,要将地址最低的ASCII码即第一个ASCII码按照非组合BCD码格式转换,即一个字节只存第一个的BCD码。所以只需将AL的高四位屏蔽掉,再用STOSB指令将AL存储到DI中。
EVN段,当ASCII码字符个数CX为偶数时,接连取两个数,将前一个数AL(如34H)的高四位屏蔽掉,并赋值给BL(04H);再用LODSB指令取下一个数AL(如35H),将AL算术左移四位,原来的低四位移入到高四位,低四位变成0(得到50H)。所以第(2)、(3)、(4)分别填写“AL”,“4”,“CL”。
第(5)空是将转换后的两个BCD码相或 *** 作,就变成了压缩BCD码(54H)。所以第(5)空填写“OR”。
首先将ASCII码化成十进制,想直接到BCD不行
BCD码有8421、2421等 一般多用8421型的
是什么意思呢,举个例子(8421):比如8(BCD)=1000 即8X1+4X0+2X0+1X0=8
(2421):8(BCD)=1110
道理都是一样的。单位的十进制就像上面一样,
那么像2156BCD (8421)=0010 0001 0101 0110
以上是有权BCD码
还有就是无权BCD码,像余三码,格雷码等, 其中余三码用的普遍一些
像余三码 就是在有权码的基础上加3即0011 B
举个例子:456(余三码)=0111 1000 1001 什么意思?
就是4(8421) +0011=0100+0011=0111
以此类推,后面都是一样 。
像汇编语言,有人说可以,但我不知道该从哪方面说。我不否认,因为汇编语言写出来之后是经过计算机处理的,计算机的程序是经过人大脑的,理性思维,这个转换过程一定要经过十进制的转换,不过,在计算机中,十进制都以二进制的形式存储的,但这个转换过程,在设计时,头脑要考虑的。也就是说,在汇编语言写进微机中隐形中有十进制的转换 。
首先51单片机是8位的,BCD转换ASCII是不是把16进制数转成字符,如0X23变成"23",ASCII的‘0-9’是0X30-0x39,先把高位4位取出加上0x30就转成ASCII,然后是低4位,ASCII的‘A-F’是0X65-0x70,如果数是字母,取出数加上0x65-10;
以上就是关于汇编ASCII码到十进制(BCD)的转换全部的内容,包括:汇编ASCII码到十进制(BCD)的转换、如何把ASCII码转换成BCD码、51单片机 BCD转换ASCII等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)