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码值的单片机程序及其实验结果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)