Ⅰ 汇编 ASCII 转换
用键盘输入字符(包括数字),显示其 ASCII 码。
程序,以及运行截图如下:
Ⅱ 汇编语言 编写一个程序,将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 AL, 07H
NEXT:
ADD AL, 30H
;下面是显示输出
MOV DL, AL ;送到DL
MOV AH, 2 ;显示单个字符
INT 21H ;显示
MOV AH, 4CH ;结束程序
INT 21H ;返回DOS
CODE ENDS
END START
Ⅲ 汇编程序 十六进制数转换成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 p(?)
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码值
我自己简单编了一个。。。 下面的程序是16位汇编,以十进制数89158为例,编译通过,运行正确。
; Program Name: Dec_ASCII.asm
Dec_ASCII SEGMENT
ASSUME CS:Dec_ASCII,DS:Dec_ASCII
ORG 100H
Start: jmp Begin
ASCII DB 5 p(' ') ;保存十进制无符号数的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
Ⅳ 试编写一个汇编语言源程序,将键盘输入的ASCII码转换为二进制。
;将键盘输入的ASCII码转换为二进制。
;直接回车程序结束。
;.com 文件格式
code segment
main proc far
assume cs:code,ds:code
org 100h
start:
PUSH CS
POP DS
NN1:
MOV AH,02
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
mov ah,01
int 21h
cmp al,0dh
jnz goon
jmp endd
goon:
push ax
mov ah,09
lea dx,s1
int 21h
pop ax
call disp1
JMP NN1
endd:
INT 20H
S1 DB ' ASCII ========> ',24H
main endp
;--------------------------------
disp1 proc near
MOV BL,AL
mov cx,8
NEXT:
shl BL,1 ;逻辑左移
JC IS_1
MOV DL,30H
JMP XS1
IS_1:
MOV DL,31H
XS1:
MOV AH,02
INT 21H
LOOP NEXT
ret
disp1 endp
;--------------------------------
code ends
end start
以下是运行结果:
7 ASCII ========> 00110111
6 ASCII ========> 00110110
2 ASCII ========> 00110010
3 ASCII ========> 00110011
b ASCII ========> 01100010
s ASCII ========> 01110011
d ASCII ========> 01100100
h ASCII ========> 01101000
j ASCII ========> 01101010
x ASCII ========> 01111000
8 ASCII ========> 00111000
j ASCII ========> 01101010
f ASCII ========> 01100110
e ASCII ========> 01100101
Ⅵ 用汇编怎么将16进制转ASCII码
比如说1aH
转换成ASCII就是31h,41h
计算过程就是当<A时,+30h,否则加37h
mov mem,1ah
mov al,mem
and al,0f0h
shr al,4
cmp al,a
jb xx
add al,7h
xx:
add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,mem
and al,0fh
cmp al,a
jb xxx
add al,7h
xxx:
add al,30h
mov dl,al
mov ah,02h
int 21h
Ⅶ 汇编程序编程 二进制转ASCII码
data segment
binbuf db 12h
ascbuf db 8p(?)
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
Ⅷ 汇编语言十六进制转换成ASCII
CODESSEGMENT
ASSUMECS:CODES
START:
PUSHCS
POPDS
;此处输入代码段代码
MOVBX,8421H;给定一个4位的16进制数
MOVAH,2;向标准输出设备输出一个字符
MOVCX,16;循环16次
AGAIN:
MOVDL,'0';假定当前bx的最高位为0
ADDBX,BX;bx=bx*2也就是左移1位
JNCDISP;进位标志不置位时(即bx的最高位为0时)转disp
INCDL;进位标志置位时(即bx的最高位为1时)加1
;也就是变为'1'
DISP:
INT21H
LOOPAGAIN
MOVAH,4CH;程序结束
INT21H
CODESENDS
ENDSTART
Ⅸ 汇编语言十六进制数怎么转换为asc码
比如将1A5Fh转为ascii码,程序如下:
codesegment
assumecs:code
org100h
start:
jmpbbb
nop
xdw1A5Fh
bufdb10,13,0,0,0,0,'$'
bbb:
leabx,x
leadi,buf
incdi
incdi
movcx,4
line1:
movax,wordptr[bx]
rolax,4
movwordptr[bx],ax
andax,000Fh
cmpal,9
jgline2
addal,30h
jmpline3
line2:
addal,37h
line3:
movbyteptr[di],al
incdi
loopline1
leadx,buf
movah,9
int21h
movah,8
int21h
movah,4ch
int21h
codeends
endstart
Ⅹ 请问汇编语言十进制转换为ASCII码的程序段,急!
; 下面的程序是16位汇编,以十进制数89158为例,编译通过,运行正确。
; Program Name: Dec_ASCII.asm
Dec_ASCII SEGMENT
ASSUME CS:Dec_ASCII,DS:Dec_ASCII
ORG 100H
Start: jmp Begin
ASCII DB 5 p(' ') ;保存十进制无符号数的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