编写程序,实现将一个两位的BCD码转换成ASCII码,例如(12)BCD转换成31H和32H.

编写程序,实现将一个两位的BCD码转换成ASCII码,例如(12)BCD转换成31H和32H.,第1张

data segment

  bcd1 db 12h  ;压缩的bcd code

  asc1 db 0,0 ;转换后的ascii code

data ends

code segment

assume cs:code, ds:data

start:

   mov ax,data

   mov ds,ax

   

   mov al,bcd1 ;(al)=12

   and al,0f0h ;(al)=10

   mov cl,4

   shr al,cl   ;(al)=01

   add al,30h  ;(al)=31h

   mov asc1[0],al

   mov al,bcd1 ;(al)=12

   and al,0fh  ;(al)=02

   add al,30h  ;(al)=32h

   mov asc1[1],al

   mov ah,4ch

   int 21h

code ends

    end start

HASC:MOV

A,R0

;从R0中取一个16进制(

二进制

)数(0-F)

ANL

A,#0FH

;屏蔽掉高4位

PUSH

ACC

;4位

二进制数

入栈

CLR

C

;清进(借)位位

SUBB

A,#0AH

POP

ACC

JC

LOOP

ADD

A,#07H

LOOP:ADD

A,#30H

MOV

R2,A

RET

实验结果:R0中的

十六进制数

(比如A),转换为ASCII码(41H)送入R2中。

任务代码为:

#include<stdioh>

main()

{

char w;

printf("请输入一个字母:");

scanf("%c",&w);

printf("与这个字母对应的ASCII码是:%d\n",w);

}

英文字母是字符型,ASCII码十进制的,因此只需要将字符型转换为十进制,在输出函数的时候强制转换类型。

扩展资料:

ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:

0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;

ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。

32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。

65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。

奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

参考资料:

ASCII 码-百度百科

举个例子,6CH,转换成ASCII码,是以十六进制形式显示:6CH,还是以十进制形式显示:108?

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

; -----------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -----------------------------------------

; 功能:把AL中的二进制无符号数转换成显式的十进制ASCII

; 入口:AL=二进制数;di=转换后的ASCII保存地址

; 出口:无

HEXASC_Dec Proc Near

push si

push cx

push bx

push di

mov bl,10

xor cx,cx

lea di,@@Temp_Save[3]

cld

@@Divide: xor ah,ah

div bl

or ah,30h

mov [di],ah

dec di

inc cx

test al,0ffh

jnz @@Divide

push di

pop si

inc si

pop di

pop bx

rep movsb

pop cx

pop si

ret

@@Temp_Save db 4 dup()

HEXASC_Dec EndP

; -----------------------------------------

; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AL=转换后的ASCII码

AL_ASCII Proc Near

cmp al,10 ;AL<10

jb @@To_ASCII ;AL<10,按数字处理

add al,7 ;AL>=10,按大写字母处理

@@To_ASCII: add al,'0' ;转换成相应的数字或大写字母

ret

AL_ASCII EndP

; -----------------------------------------

; 功能:将AL中的字节数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AX=转换后的ASCII码

HEXASC_Hex Proc Near

push cx

mov cx,4

xor ah,ah ;将AH置0

shl ax,cl ;将AX左移4位

shr al,cl ;将AL右移4位

xchg ah,al

call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码

xchg ah,al

call AL_ASCII

xchg ah,al

pop cx

ret

HEXASC_Hex EndP

; -----------------------------------------

Translate db '0' ;转换方式(默认:十进制数显示;若要十六进制显示,则改为:1)

BUF db 23,35,46,57,68,79,81,98,119,243

Elements EQU ($-BUF)/Type BUF ;元素个数

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

cld

lea si,BUF

lea di,Temp_STr

mov cx,Elements

HEX_ASCII: lodsb

IF Translate == '0'

call HEXASC_Dec

ELSE

call HEXASC_Hex

stosw

mov al,'H'

stosb

ENDIF

mov al,','

stosb

loop HEX_ASCII

dec di

mov al,'$'

stosb

Output Temp_STr

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Temp_STr:

Code ENDS

END Start ;编译到此结束

; -----------------------------------------

ADD AL,90H

DAA

ADD AL,40H

DAA

十进制数加调整指令DAA(Decimal Adjust After Addition)

该指令是用于调整AL的值,该值是由指令ADD或ADC运算二个压缩型BCD码所得到的结果。压缩型BCD码是一个字节存放二个BCD码,低四位和高四位都是一个BCD码。

其调整规则如下:

如果AL的低四位大于9,或标志位AF=1,那么,AL=AL+6,并置AF=1;

如果AL的高四位大于9,或CF=1,那么,AL=AL+60H,并置CF=1;

、如果以上两点都不成立,则,清除标志位AF和CF。

经过调整后,AL的值仍是压缩型BCD码,即:二个压缩型BCD码相加,并进行调整后,得到的结果还是压缩型BCD码。

ASCII码转十进制即按二进制转十进制方法,按权展开求和。

例:0110110b转十进制=02^6+12^5+12^4+02^3+12^2+12^1+02^0=542)十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法)

ASCII(AmericanStandardCodeforInformationInterchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统。

Asc 函数

返回一个 Integer,代表字符串中首字母的字符代码。

语法

Asc(string)

必要的 string 参数可以是任何有效的字符串表达式。如果 string 中没有包含任何字符,则会产生运行时错误。

说明

在非 DBCS 系统下,返回值范围为 0 – 255 。在 DBCS

系统下,则为 -32768 – 32767。

注意    AscB

函数作用于包含在字符串中的字节数据,AscB 返回第一个字节的字符代码,而非字符的字符代码。AscW 函数返回 Unicode 字符代码,若平台不支持 Unicode,则与 Asc

函数功能相同。

Asc 函数示例

本示例使用 Asc 函数返回字符串首字母的字符值(ASCII 值)。

Dim MyNumber

MyNumber = Asc("A")   ' 返回 65。

MyNumber = Asc("a")   ' 返回 97。

MyNumber = Asc("要")   ' 返回 -11606

以上就是关于编写程序,实现将一个两位的BCD码转换成ASCII码,例如(12)BCD转换成31H和32H.全部的内容,包括:编写程序,实现将一个两位的BCD码转换成ASCII码,例如(12)BCD转换成31H和32H.、给出一个十六进制数,将其转换成ASCII码值的单片机程序及其实验结果、ASCII码是怎么转化为十进制的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10071936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存