汇编语言系列之汇编实现各种码制的转换(思路详解)

目录

  • 1.十六进制转换为二进制数设计
    • 1.1设计要求:
    • 1.2设计思路:
    • 1.4程序运行结果及分析:
  • 2.十六进制转换为十进制数设计
    • 2.1设计要求:
    • 2.2设计思路:
    • 2.3程序清单:
    • 2.4程序运行结果及分析:
  • 3.十六进制转换为ASCII码
    • 3.1设计要求:
    • 3.2设计思路:
    • 3.3程序清单:
    • 3.4程序运行结果及分析:
  • 4.英文字母大小写转换设计
    • 4.1设计要求:
    • 4.2设计思路:
    • 4.3程序清单:
    • 4.4程序运行结果及分析:
软件:emu8086
语言:汇编语言(Assembly)
注意:本文列出了十六进制转二进制、十进制、ASCII码及大小写字母转换的代码,全部代码为博主独自一人编写,会有瑕疵,谨慎使用。

1.十六进制转换为二进制数设计
1.1设计要求:
设计转换程序,将键盘键入的四位十六进制数据转换为等值的二进制数,并在终端显示。要求:完善程序结构,设置程序错误出口。输入的不是0-F间的值,显示错误提示信息,并要求重新输入。

1.2设计思路:
依次输入四个十六进制数并依次存放到BX中,最后将BX中结果一位一位输出为二进制。
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片



1.3程序清单:
DATA SEGMENTpkeyDB "pleas input 4 hex(0~F):$"ekeyDB0dh,0ah,'it is wrong!',0dh,0ah,'pleas input 4 hex(0~F) again:','$'huicheDB0dh,0ah,'result is:',0dh,0ah,'$' nummDB5 dup(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA STATE:MOV AX,DATAMOV DS,AXMOV CX,4; 输入十六进制数循环4次LEA SI,numm; 开辟变址寄存器SILEA DX,pkeyMOV AH,9INT 21H; DOS功能调用,输出字符串lp: MOV AH, 1INT 21H; DOS功能调用,输入4个十六进制数CMP AL,'9'JA abow9 CMP AL,'0'JB eeroSUB AL,30h; 输入为0~9时ASCII码减30H存放JMP lopeero:LEA DX, ekey; 输入不在0~9且不在A~F时,显示错误MOV AH, 9INT 21H JMP lpabow9:CMP AL,'A'JNB abowaJMP eeroabowa:CMP AL,'F'JA eeroSUB AL,37h; 输入为A~F时ASCII码减37H存放JMP lop lop: MOV [SI],ALROL BX,4ADD BX,[SI]; 将输入的数据存入BX寄存器中INC SIDEC CX JNZ lpMOV CX,16; 输出二进制数循环16次LEA DX,huicheMOV AH,9INT 21H; DOS功能调用,输出字符串lp1: ROL BX,1; 左移1位后显示的是最高位MOV DL,BLAND DL,01H; 屏蔽DL高7位ADD DL,30H; 加30H对应ASCII码MOV AH,2INT 21H; DOS功能调用,将内容按位输出DEC CX JNZ lp1CODE ENDSEND STATE


1.4程序运行结果及分析:
存放和输出时会遇到一些小问题,本程序通过移位和加法指令实现存放,比较麻烦但可以实现,后面的程序有所改进。
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片

图1 十六进制转换为二进制数设计结果

2.十六进制转换为十进制数设计
2.1设计要求:
设计转换程序,将键盘输入的一位十六进制数转换为等值的十进制数,并在终端显示。设计要求:完善程序结构,设置程序错误出口。输出的不是0-F间的数字,显示错误提示信息,并要求重新输入。

2.2设计思路:
输入一位十六进制数,判断是否为0~9,a~f,A~F,各自转换后输出。
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片



2.3程序清单:
DATA SEGMENTpkeyDB0dh,0ah,"pleas input 1 hex(0~F):$"huiche DB0dh,0ah,'result is:$'end2DB0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$'nummDB3 dup(0) DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA STATE:MOV AX,DATAMOV DS,AXLEA SI,numm; 开辟缓冲区LEA DX,pkeyMOV AH,9INT 21H; DOS功能调用,输出字符串LP: MOV AH, 1INT 21H; DOS功能调用,输入1个十六进制数CMP AL,'9'JA abow9 CMP AL,'0'JB eero; 输入小于0重新输入ADD AH,2FH; 输入为0~9高位给0输出JMP OUTPUTabow9: CMP AL,'A'JNB abowAJMP eero; 输入大于9小于A重新输入abowA:CMP AL,'F'JA abowFSUB AL,11HADD AH,30H; 输入A~F高位给1,低位减11H输出JMP OUTPUTabowF:CMP AL,'a'JNB abow1aJMP eero; 输入大于F小于a重新输入abow1a:CMP AL,'f'JA eero; 输入大于f重新输入SUB AL,31HADD AH,30H; 输入a~f高位给1,低位减31H输出JMP OUTPUTeero:LEA DX,end2MOV AH,9INT 21H; DOS功能调用,输出错误字符串 JMP LPOUTPUT:MOV BX,AXLEA DX,huicheMOV AH,9INT 21H; DOS功能调用,输出字符串MOV [SI],BH MOV DL,[SI]MOV AH,2INT 21H; DOS功能调用,高位输出MOV [SI],BL MOV DL,[SI]MOV AH,2INT 21H; DOS功能调用,低位输出 JMP STATECODE ENDSEND STATE


2.4程序运行结果及分析:
这里输出分高位和低位输出,因为是一位十六进制数的转换,如果换两位或更多就需要将程序修改到更智能化。
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片

图2 十六进制转换为十进制数设计结果

3.十六进制转换为ASCII码
3.1设计要求:
设计转换程序,将键盘键入的十六进制数据转换为对应的ASCII码,并在终端显示。

3.2设计思路:
将输入数的高位左移转ASCII输出,低位转ASCII输出。
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片


3.3程序清单:
DATA SEGMENTpkeyDB0dh,0ah,"please input 1 hex(0~F):$"huiche DB0dh,0ah,'result is:$'end2DB0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$'nummDB3 dup(0) DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA STATE:MOV AX,DATAMOV DS,AXLEA SI,numm; 开辟缓冲区LEA DX,pkeyMOV AH,9INT 21H; DOS功能调用,输出字符串LP: MOV AH, 1INT 21H; DOS功能调用,输入1个十六进制数CMP AL,'9'JA abow9 CMP AL,'0'JB end1; 输入小于0重新输入JMP OUTPUTabow9: CMP AL,'A'JNB abowAJMP end1; 输入大于9小于A重新输入abowA:CMP AL,'F'JA end1; 输入大于F重新输入JMP OUTPUTend1:LEA DX,end2MOV AH,9INT 21H; DOS功能调用,输出错误字符串JMP LPOUTPUT:MOV BX,AXROL BX,4AND BH,0FHADD BH,30H; 高位是AX左移四位再加30H得到AND AL,0FHMOV BL,ALADD BL,30H; 低位是AL低四位加30H得到LEA DX,huicheMOV AH,9INT 21H; DOS功能调用,输出字符串MOV [SI],BH MOV DL,[SI]MOV AH,2INT 21H; DOS功能调用,高位输出 MOV [SI],BL MOV DL,[SI]MOV AH,2INT 21H; DOS功能调用,低位输出JMP STATE CODE ENDSEND STATE


3.4程序运行结果及分析:
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片

图3 十六进制转换为ASCII码设计结果

4.英文字母大小写转换设计
4.1设计要求:
英文字母大小写转换本质上是ASCII码直接的转换。要求掌握大小写字母在计算机内的表示方法及转换方法。设计程序,连续将键盘输入的小写字母转换为大写字母,并在终端显示。设计要求:小写字母转换为大写字母输出,非字母或大写字母输入,不做处理直接输出。

4.2设计思路:
判断输入是否为a~z,是的话减20H输出,不是直接输出。
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片


4.3程序清单:
DATA SEGMENTpkeyDB0dh,0ah,"pleas input:$"result DB0dh,0ah,'result is:','$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA STATE:MOV AX,DATAMOV DS,AX; 初始化数据段LP: LEA DX,pkeyMOV AH,9INT 21H; DOS功能调用,输出字符串MOV AH, 1INT 21H; DOS功能调用,键盘输入CMP AL,'z'JA LLPCMP AL,'a'; 输入不在a~z之间直接输出JB LLPSUB AL,20H; 输入为a~z转换,ASCII码减20HMOV BL,ALOUTPUT:LEA DX,resultMOV AH,9INT 21H; DOS功能调用,输出字符串MOV DL,BLMOV AH,2INT 21H; DOS功能调用,输出DL中内容JMP LPLLP: MOV BL,ALJMP OUTPUTCODE ENDSEND STATE


4.4程序运行结果及分析:
汇编语言系列之汇编实现各种码制的转换(思路详解)
文章图片

【汇编语言系列之汇编实现各种码制的转换(思路详解)】图4 英文字母大小写转换设计结果

    推荐阅读