Ⅰ 匯編 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