举个例子,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码
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 ;...
汇编语言 十六进制转换为ASCII码
BUF 子单元的的 每个字节的 16 进制数 加上 30h
...将AL寄存器中的一位十六进制数转化成ASCII码 显示输出
;将AL寄存器中的一位十六进制数转化成ASCII码,显示输出。;推荐答案,写的并非是一位。;程序如下:ASSUME CS:CODE CODE SEGMENT START:MOV AL, 0FH ;在这里可写 00H~0FH,这就是一位16进制数 AND AL, 0FH ;无用位清零,保留该数字 ;下面是变成ASCII码 CMP AL, 0AH JB NEXT ADD...
如何把16进制数转换为对应的ASCII字符?
谢谢各位关注,我在做一个单片机上的console程序,单片机通过串口和上位机通讯,指令和返回数据全部采用ASCII码,由于需要反馈一些寄存器数据——这些数据是16进制的,通过串口输出时我想把它们变成ASCII码方便阅读。例如,十六进制0x4A,转换为ASCII字符 ‘4’和‘A’,而不是得到这个十六进制对应的ASCII,比如0x4A='J'请各位...
十六进制转换ASCII码汇编语言
HEX2ASC:PUSH ACC ANL A,#0FH LCALL CHANGE MOV B,A POP ACC SWAP A ANL A,#0FH LCALL CHANGE RET ;返回值A,B,A为高位,B为低位 CHANGE:CJNE A,#10,CHG1 CHG1:JC CHG2 SUBB A,#10 ADD A,#'A'RET CHG2:ADD A,#'0'RET ...
16进制数如何转换为ASCII码?
1. 将16进制数中的每个数字字符转换为十进制。例如,16进制中的'f'对应十进制中的15。2. 将每个字母字符转换为其ASCII码值。大写字母转换为十进制时,需要加上0x30(即56),小写字母转换时则加上0x37(即55)。例如,16进制中的'a'转换为十进制是10,加上0x30得到68,对应ASCII码中的大写字母...
汇编语言十六进制转换成ASCII
CODES SEGMENT ASSUME CS:CODES START: PUSH CS POP DS ;此处输入代码段代码 MOV BX, 8421H ;给定一个4位的16进制数 MOV AH, 2 ;向标准输出设备输出一个字符 MOV CX, 16 ;循环16次 AGAIN: MOV DL, '0' ; 假定当前bx...
使用汇编把十六进制转换成相应的ASCII值是怎么个思路,用自然语言描述...
十六进制转ASCII值 把4位值跟10相比 小于加38 其它的加55 然后输出;转十进制 假设这个十六进制数在内存中,那么把这个数除以10分别输出就行了。
汇编语言程序设计教程 16进制数转换成十六进制asc2码输出。。。_百度知...
你好 汇编好久不用了 给你两个子程序 自己组合吧 (14) 标号: HASC 功能:单字节十六进制数转换成双字节ASCII码 入口条件:待转换的单字节十六进制数在累加器A中。出口信息:高四位的ASCII码在A中,低四位的ASCII码在B中。影响资源:PSW、A、B 堆栈需求: 4字节 HASC: MOV B,A ;暂存待...
HEX转换为ASCII码是怎样进行的。具体是怎样变换的?
Hex(十六进制)转换为ASCII码的过程本质上是将16进制数转换为10进制数,以便与ASCII字符编码对应。这种转换基于每个16进制位的权值,就像十进制数的表示方法一样。每个16进制位,如'8', 'A', '3', '0', 'E',对应于16的幂次,从最高位开始计算。例如,'8A30E'的16进制值可以分解为:8 * ...