+ -
当前位置:首页 → 问答吧 → 菜鸟求助,如何把非压缩的BCD码转换为ASCII码?有朋友能指教下不?

菜鸟求助,如何把非压缩的BCD码转换为ASCII码?有朋友能指教下不?

时间:2011-01-08

来源:互联网

将非压缩的BCD码转换为ASCII码,关键点在哪里?非压缩的BCD码如何表示?

作者: C8LuKa   发布时间: 2011-01-08

AND AL,0FH ;先把高4位变成0
OR AL,30H ;先把高4位变成3,就成了ASCII码了。

非压缩BCD码就是用一个8位的单元存储一位数字。它的低4位存放0-9间的数,高4位没用。

作者: shzhfu   发布时间: 2011-01-08

好吧。。我自己回复个吧。。。非压缩的BCD码可以这样表示 BCD DB 0608H 表示为 68 的非压缩BCD码。。。还有没有高人能回答我的问题啊。。。关键步骤还是不会。。。最好能有个人把代码写写。。。求高人指点

作者: C8LuKa   发布时间: 2011-01-08

【虎彡】压缩型BCD码转换成十六进制形式屏幕输出 

assume cs:code 
code segment 
start: 

  mov al,93h 
  mov dl,al  
  and dl,0fh  
  shr al,1  
  shr al,1  
  shr al,1  
  shr al,1  
  MOV BL,10  
  MUL BL  
  ADD AL,DL  
  MOV AH,AL  
  shr ah,1  
  shr ah,1  
  shr ah,1  
  shr ah,1  
  mov al,0fh  
  MOV BL,AH  
  MOV AH,[SI+BX] ;AH<-[SI+5]  
  mov dl,ah  
  mov ah,02h  
  int 21h  
  MOV BL,AL  
  MOV AL,[SI+BX] ;AH<-[SI+D]  
  mov dl,al  
  mov ah,02h  
  int 21h  
  mov ax,4c00h  
  int 21h  

  mov ax,4c00h  
  int 21h  
code ends  
end start 
【虎彡】压缩型BCD码以10进制的形式屏幕输出
assume cs:code 
code segment  
start:  
  mov al,93h 
  MOV AH,AL  
  SHR AH,1  
  SHR AH,1  
  SHR AH,1  
  SHR AH,1  
  ADD AH,30H  
  mov dl,ah  
  mov ah,02h  
  int 21h  
  and al,0fh  
  add al,30h  
  mov dl,al  
  mov ah,02h  
  int 21h  
  mov ax,4c00h  
  int 21h  
code ends  
end start 

作者: znxllyuan   发布时间: 2011-01-08

引用 1 楼 shzhfu 的回复:

AND AL,0FH ;先把高4位变成0
OR AL,30H ;先把高4位变成3,就成了ASCII码了。

非压缩BCD码就是用一个8位的单元存储一位数字。它的低4位存放0-9间的数,高4位没用。

这个是什么情况啊?你说的好像还是压缩的BCD码啊?

作者: C8LuKa   发布时间: 2011-01-08

引用 3 楼 znxllyuan 的回复:

【虎彡】压缩型BCD码转换成十六进制形式屏幕输出

assume cs:code
code segment
start:

mov al,93h
mov dl,al
and dl,0fh
shr al,1
shr al,1
shr al,1
shr……

老大啊。。。非压缩的啊。。。你这不给力啊

作者: C8LuKa   发布时间: 2011-01-08

引用 5 楼 c8luka 的回复:
引用 3 楼 znxllyuan 的回复:

【虎彡】压缩型BCD码转换成十六进制形式屏幕输出

assume cs:code
code segment
start:

mov al,93h
mov dl,al
and dl,0fh
shr al,1
shr al,1
shr al,1
shr……

老大啊。。。非压缩的啊。。。你这不给力啊
\
  非要嚼烂了喂给你才吃?

  非压缩型和压缩性的区别就一点不知道????
  
  恕我直言 请先看书吧

作者: znxllyuan   发布时间: 2011-01-08

引用 6 楼 znxllyuan 的回复:

引用 5 楼 c8luka 的回复:
引用 3 楼 znxllyuan 的回复:

【虎彡】压缩型BCD码转换成十六进制形式屏幕输出

assume cs:code
code segment
start:

mov al,93h
mov dl,al
and dl,0fh
shr al,1
shr al,1
shr al,1
shr……

老大啊。。。非压缩的啊。……

。。。囧。。。用得着那么生气不?我是不懂才问的啊。。。懂的就好说了。。。你这是再蔑视小白的话我也没有话说了哦

作者: C8LuKa   发布时间: 2011-01-08

楼主先看看给力的,再说。
http://nucstorm.ncksoft.com/asmbook/page269.html#101

作者: masmaster   发布时间: 2011-01-08

恨铁不成钢啊

  圣凡哥 我终于知道你当年的心情了 
 
  态度,决定一切

  闪猴儿·~

作者: znxllyuan   发布时间: 2011-01-08

不回答就算了,这样子弄?我知道两者之间的区别啊,我还可以先把非压缩的BCD码转换程压缩的再做呢,可是我就是想知道直接用非压缩的情况是怎么做的啊!!!!!!!!

作者: C8LuKa   发布时间: 2011-01-08

引用 9 楼 znxllyuan 的回复:

恨铁不成钢啊

圣凡哥 我终于知道你当年的心情了

态度,决定一切

闪猴儿·~

这个您走好,消气,不送,大家各做各的,我就一股子犟脾气,我还这想知道直接是怎么做的呢

作者: C8LuKa   发布时间: 2011-01-08

这个真是想不通啊。。。为什么要大家做个非压缩态大家情绪那么激动啊,激动就算了,刚刚也说怎么表示非压缩态的情况,上来就说是压缩态的,看标题进!!!!!

作者: C8LuKa   发布时间: 2011-01-08

引用 2 楼 c8luka 的回复:
好吧。。我自己回复个吧。。。非压缩的BCD码可以这样表示 BCD DB 0608H 表示为 68 的非压缩BCD码。。。还有没有高人能回答我的问题啊。。。关键步骤还是不会。。。最好能有个人把代码写写。。。求高人指点

前面是按1位非压缩BCD码回答的。

如果是2位的非压缩BCD码,那
BCD DB 0608H
应该是
BCD DW 0608H

其实
BCD DW X6Y8H (如果把它当BCD码看,那不管X和Y是什么都代表同一个数68),所以先用AND把它们的高4位清0,再用OR把高4位变成3即可。
AND BCD,0F0FH
OR BCD,3030H
其中后一步是关键,因为经过BCD码调整指令调整过的数,高4位已经为0,所以在调整指令后,可以不要第一句。
 

作者: shzhfu   发布时间: 2011-01-08