匯編語(yǔ)言系列之匯編實(shí)現(xiàn)各種碼制的轉(zhuǎn)換(思路詳解)
軟件:emu8086
語(yǔ)言:匯編語(yǔ)言(Assembly)
注意:本文列出了十六進(jìn)制轉(zhuǎn)二進(jìn)制、十進(jìn)制、ASCII碼及大小寫(xiě)字母轉(zhuǎn)換的代碼,全部代碼為博主獨(dú)自一人編寫(xiě),會(huì)有瑕疵,謹(jǐn)慎使用。
1.十六進(jìn)制轉(zhuǎn)換為二進(jìn)制數(shù)設(shè)計(jì)
1.1設(shè)計(jì)要求:
設(shè)計(jì)轉(zhuǎn)換程序,將鍵盤(pán)鍵入的四位十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為等值的二進(jìn)制數(shù),并在終端顯示。要求:完善程序結(jié)構(gòu),設(shè)置程序錯(cuò)誤出口。輸入的不是0-F間的值,顯示錯(cuò)誤提示信息,并要求重新輸入。
1.2設(shè)計(jì)思路:
依次輸入四個(gè)十六進(jìn)制數(shù)并依次存放到BX中,最后將BX中結(jié)果一位一位輸出為二進(jìn)制。

1.3程序清單:
DATA SEGMENT
pkey DB "pleas input 4 hex(0~F):$"
ekey DB 0dh,0ah,'it is wrong!',0dh,0ah,'pleas input 4 hex(0~F) again:','$'
huiche DB 0dh,0ah,'result is:',0dh,0ah,'$'
numm DB 5 dup(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
STATE:
MOV AX,DATA
MOV DS,AX
MOV CX,4 ;輸入十六進(jìn)制數(shù)循環(huán)4次
LEA SI,numm ;開(kāi)辟變址寄存器SI
LEA DX,pkey
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
lp: MOV AH, 1
INT 21H ;DOS功能調(diào)用,輸入4個(gè)十六進(jìn)制數(shù)
CMP AL,'9'
JA abow9
CMP AL,'0'
JB eero
SUB AL,30h ;輸入為0~9時(shí)ASCII碼減30H存放
JMP lop
eero:LEA DX, ekey ;輸入不在0~9且不在A~F時(shí),顯示錯(cuò)誤
MOV AH, 9
INT 21H
JMP lp
abow9:CMP AL,'A'
JNB abowa
JMP eero
abowa:CMP AL,'F'
JA eero
SUB AL,37h ;輸入為A~F時(shí)ASCII碼減37H存放
JMP lop
lop: MOV [SI],AL
ROL BX,4
ADD BX,[SI] ;將輸入的數(shù)據(jù)存入BX寄存器中
INC SI
DEC CX
JNZ lp
MOV CX,16 ;輸出二進(jìn)制數(shù)循環(huán)16次
LEA DX,huiche
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
lp1: ROL BX,1 ;左移1位后顯示的是最高位
MOV DL,BL
AND DL,01H ;屏蔽DL高7位
ADD DL,30H ;加30H對(duì)應(yīng)ASCII碼
MOV AH,2
INT 21H ;DOS功能調(diào)用,將內(nèi)容按位輸出
DEC CX
JNZ lp1
CODE ENDS
END STATE
1.4程序運(yùn)行結(jié)果及分析:
存放和輸出時(shí)會(huì)遇到一些小問(wèn)題,本程序通過(guò)移位和加法指令實(shí)現(xiàn)存放,比較麻煩但可以實(shí)現(xiàn),后面的程序有所改進(jìn)。

圖1 十六進(jìn)制轉(zhuǎn)換為二進(jìn)制數(shù)設(shè)計(jì)結(jié)果
2.十六進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù)設(shè)計(jì)
2.1設(shè)計(jì)要求:
設(shè)計(jì)轉(zhuǎn)換程序,將鍵盤(pán)輸入的一位十六進(jìn)制數(shù)轉(zhuǎn)換為等值的十進(jìn)制數(shù),并在終端顯示。設(shè)計(jì)要求:完善程序結(jié)構(gòu),設(shè)置程序錯(cuò)誤出口。輸出的不是0-F間的數(shù)字,顯示錯(cuò)誤提示信息,并要求重新輸入。
2.2設(shè)計(jì)思路:
輸入一位十六進(jìn)制數(shù),判斷是否為0~9,a~f,A~F,各自轉(zhuǎn)換后輸出。

2.3程序清單:
DATA SEGMENT
pkey DB 0dh,0ah,"pleas input 1 hex(0~F):$"
huiche DB 0dh,0ah,'result is:$'
end2 DB 0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$'
numm DB 3 dup(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
STATE:
MOV AX,DATA
MOV DS,AX
LEA SI,numm ;開(kāi)辟緩沖區(qū)
LEA DX,pkey
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
LP: MOV AH, 1
INT 21H ;DOS功能調(diào)用,輸入1個(gè)十六進(jìn)制數(shù)
CMP AL,'9'
JA abow9
CMP AL,'0'
JB eero ;輸入小于0重新輸入
ADD AH,2FH ;輸入為0~9高位給0輸出
JMP OUTPUT
abow9: CMP AL,'A'
JNB abowA
JMP eero ;輸入大于9小于A重新輸入
abowA:CMP AL,'F'
JA abowF
SUB AL,11H
ADD AH,30H ;輸入A~F高位給1,低位減11H輸出
JMP OUTPUT
abowF:CMP AL,'a'
JNB abow1a
JMP eero ;輸入大于F小于a重新輸入
abow1a:CMP AL,'f'
JA eero ;輸入大于f重新輸入
SUB AL,31H
ADD AH,30H ;輸入a~f高位給1,低位減31H輸出
JMP OUTPUT
eero:LEA DX,end2
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出錯(cuò)誤字符串
JMP LP
OUTPUT:
MOV BX,AX
LEA DX,huiche
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
MOV [SI],BH
MOV DL,[SI]
MOV AH,2
INT 21H ;DOS功能調(diào)用,高位輸出
MOV [SI],BL
MOV DL,[SI]
MOV AH,2
INT 21H ;DOS功能調(diào)用,低位輸出
JMP STATE
CODE ENDS
END STATE
2.4程序運(yùn)行結(jié)果及分析:
這里輸出分高位和低位輸出,因?yàn)槭且晃皇M(jìn)制數(shù)的轉(zhuǎn)換,如果換兩位或更多就需要將程序修改到更智能化。

圖2 十六進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù)設(shè)計(jì)結(jié)果
3.十六進(jìn)制轉(zhuǎn)換為ASCII碼
3.1設(shè)計(jì)要求:
設(shè)計(jì)轉(zhuǎn)換程序,將鍵盤(pán)鍵入的十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼,并在終端顯示。
3.2設(shè)計(jì)思路:
將輸入數(shù)的高位左移轉(zhuǎn)ASCII輸出,低位轉(zhuǎn)ASCII輸出。

3.3程序清單:
DATA SEGMENT
pkey DB 0dh,0ah,"please input 1 hex(0~F):$"
huiche DB 0dh,0ah,'result is:$'
end2 DB 0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$'
numm DB 3 dup(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
STATE:
MOV AX,DATA
MOV DS,AX
LEA SI,numm ;開(kāi)辟緩沖區(qū)
LEA DX,pkey
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
LP: MOV AH, 1
INT 21H ;DOS功能調(diào)用,輸入1個(gè)十六進(jìn)制數(shù)
CMP AL,'9'
JA abow9
CMP AL,'0'
JB end1 ;輸入小于0重新輸入
JMP OUTPUT
abow9: CMP AL,'A'
JNB abowA
JMP end1 ;輸入大于9小于A重新輸入
abowA:CMP AL,'F'
JA end1 ;輸入大于F重新輸入
JMP OUTPUT
end1:LEA DX,end2
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出錯(cuò)誤字符串
JMP LP
OUTPUT:
MOV BX,AX
ROL BX,4
AND BH,0FH
ADD BH,30H ;高位是AX左移四位再加30H得到
AND AL,0FH
MOV BL,AL
ADD BL,30H ;低位是AL低四位加30H得到
LEA DX,huiche
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
MOV [SI],BH
MOV DL,[SI]
MOV AH,2
INT 21H ;DOS功能調(diào)用,高位輸出
MOV [SI],BL
MOV DL,[SI]
MOV AH,2
INT 21H ;DOS功能調(diào)用,低位輸出
JMP STATE
CODE ENDS
END STATE
3.4程序運(yùn)行結(jié)果及分析:

圖3 十六進(jìn)制轉(zhuǎn)換為ASCII碼設(shè)計(jì)結(jié)果
4.英文字母大小寫(xiě)轉(zhuǎn)換設(shè)計(jì)
4.1設(shè)計(jì)要求:
英文字母大小寫(xiě)轉(zhuǎn)換本質(zhì)上是ASCII碼直接的轉(zhuǎn)換。要求掌握大小寫(xiě)字母在計(jì)算機(jī)內(nèi)的表示方法及轉(zhuǎn)換方法。設(shè)計(jì)程序,連續(xù)將鍵盤(pán)輸入的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母,并在終端顯示。設(shè)計(jì)要求:小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母輸出,非字母或大寫(xiě)字母輸入,不做處理直接輸出。
4.2設(shè)計(jì)思路:
判斷輸入是否為a~z,是的話減20H輸出,不是直接輸出。

4.3程序清單:
DATA SEGMENT
pkey DB 0dh,0ah,"pleas input:$"
result DB 0dh,0ah,'result is:','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
STATE:
MOV AX,DATA
MOV DS,AX ;初始化數(shù)據(jù)段
LP: LEA DX,pkey
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
MOV AH, 1
INT 21H ;DOS功能調(diào)用,鍵盤(pán)輸入
CMP AL,'z'
JA LLP
CMP AL,'a' ;輸入不在a~z之間直接輸出
JB LLP
SUB AL,20H ;輸入為a~z轉(zhuǎn)換,ASCII碼減20H
MOV BL,AL
OUTPUT:
LEA DX,result
MOV AH,9
INT 21H ;DOS功能調(diào)用,輸出字符串
MOV DL,BL
MOV AH,2
INT 21H ;DOS功能調(diào)用,輸出DL中內(nèi)容
JMP LP
LLP: MOV BL,AL
JMP OUTPUT
CODE ENDS
END STATE
4.4程序運(yùn)行結(jié)果及分析:

圖4 英文字母大小寫(xiě)轉(zhuǎn)換設(shè)計(jì)結(jié)果
相關(guān)文章
詳解如何在Mac上用匯編語(yǔ)言寫(xiě)HelloWorld
這篇文章主要介紹了詳解如何在Mac上用匯編語(yǔ)言寫(xiě)HelloWorld,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
匯編語(yǔ)言實(shí)現(xiàn)在指定字符串中搜索字符''A''的方法
這篇文章主要介紹了匯編語(yǔ)言實(shí)現(xiàn)在指定字符串中搜索字符'A'的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
匯編語(yǔ)言?masm5與debug命令使用方法小結(jié)
本文總結(jié)了匯編程序的基本框架及規(guī)范、masm5工具的基本使用方法、debug命令的基本使用方法2023-08-08
詳解匯編語(yǔ)言RCL(帶進(jìn)位循環(huán)左移)和RCR(帶進(jìn)位循環(huán)右移)指令
這篇文章主要介紹了匯編語(yǔ)言RCL(帶進(jìn)位循環(huán)左移)和RCR(帶進(jìn)位循環(huán)右移)指令的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例
這篇文章主要介紹了匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

