汇编程序编程 二进制转ASCII码

汇编程序编程 二进制转ASCII码,第1张

data segment

binbuf db 12h

ascbuf db 8dup()

data ends

code segment

assume cs:ode,ds:data

begin: mov ax,data

mov ds,ax

mov al,binbuf

mov cl,al

kk:mov bl,al mod 2

mov cl,cl/2

lea di,ascbuf

mov [di],bl

add di

cmp cl,0

jnz kk

mov ah,4ch

int 21h

code ends

end begin

; 下面的程序是16位汇编,以十进制数89158为例,编译通过,运行正确。

; Program Name: Dec_ASCIIasm

Dec_ASCII SEGMENT

ASSUME CS:Dec_ASCII,DS:Dec_ASCII

ORG 100H

Start: jmp Begin

ASCII DB 5 dup(' ') ;保存十进制无符号数的ASCII

ASCII_End DB '$' ;字符串结束标志

Decimal DW 89158 ; 十进制无符号数,最大65535。

Begin: lea di,ASCII_End ; 字符串尾地址

dec di

mov bx,10 ; 用于除10,取商数和余数

std ;设置变址寄存器变址方向

mov ax,Decimal ; 取十进制无符号数

ASCII_Ctr: xor dx,dx

div bx ; 除10,取商数和余数

xchg ax,dx ;交换商数和余数

or al,30h ;转换成ASCII码

stosb ;保存ASCII码

mov ax,dx ;把商数放入ax中

cmp ax,0

ja ASCII_Ctr ;商数大于0,继续取余数

lea dx,ASCII ;字符串首地址

mov ah,9 ; 显示结果

int 21h

Exit_Proc: mov ax,4c00h ;结束程序

int 21h

Dec_ASCII 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中。

1、首先,定义两个字符变量z和Z,用以保存转换的字符。

2、接着,定义一个整型变量n,保存用来转换的ASCII码。

3、把n的值赋给变量z,实现字符的转换。

4、输出窗口中,输出将ASCII码转换为的字符。

5、给变量n重新赋值,其值为大写字母的ASCII码。

6、将ASCII码转换为对应的大写英文字母,并在输出窗口中输出。

7、运行程序,代码中输入的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码。

#include<iostream>

using namespace std;

int main()

{

int num;

cin>>num; //定义一个数字,并输入。假设输入的数字是2

int out ; //数字out是用来做中间数据,进行计算的

out = 'a' + num; //字符a对应着ASCII码中的97,再加上2为99,对应ASCII中的c。

cout<<char(out) ; //把数字97(out代表的数字)强制转换成字符型变量,再输出。

return 0;

//最终的输出结果为字母c,这样可以完成0~9转换成a~j的问题,其他的可以参考。

}

}

不知你要的是C语言的还是汇编的,都给你吧\x0d\\x0d\C语言的:\x0d\#include \x0d\\x0d\typedef unsigned char uchar;\x0d\\x0d\#define NUMBER 10\x0d\\x0d\ucharBufferIn[NUMBER]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x1a,0x1b};//16进制数存放区\x0d\ucharBufferOut[2NUMBER];//ASCII码存放区\x0d\\x0d\////////////////////////////////////////////////////////////////\x0d\//功能:将多字节16进制数转换为ASCII字符\x0d\//入口:x:待转换16进制数,x>=0且x返回转换完成后的ASCII码字符数据,返回0为失败\x0d\////////////////////////////////////////////////////////////////\x0d\ucharGetASCII(uchar x)\x0d\{\x0d\if(x>0x0f)\x0d\{\x0d\return 0; \x0d\}\x0d\\x0d\if(x>9)\x0d\{\x0d\return ('A'+x-10);\x0d\}\x0d\return ('0'+x); \x0d\}\x0d\\x0d\////////////////////////////////////////////////////////////////\x0d\//主程序\x0d\////////////////////////////////////////////////////////////////\x0d\voidmain()\x0d\{\x0d\uchar i;\x0d\ \x0d\for(i=0;i

以上就是关于汇编程序编程 二进制转ASCII码全部的内容,包括:汇编程序编程 二进制转ASCII码、请问汇编语言十进制转换为ASCII码的程序段,急!、给出一个十六进制数,将其转换成ASCII码值的单片机程序及其实验结果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存