目录
- 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 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 ;输入十六进制数循环4次
lea si,numm ;开辟变址寄存器si
lea dx,pkey
mov ah,9
int 21h ;dos功能调用,输出字符串
lp: mov ah, 1
int 21h ;dos功能调用,输入4个十六进制数
cmp al,'9'
ja abow9
cmp al,'0'
jb eero
sub al,30h ;输入为0~9时ascii码减30h存放
jmp lop
eero:lea dx, ekey ;输入不在0~9且不在a~f时,显示错误
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时ascii码减37h存放
jmp lop
lop: mov [si],al
rol bx,4
add bx,[si] ;将输入的数据存入bx寄存器中
inc si
dec cx
jnz lp
mov cx,16 ;输出二进制数循环16次
lea dx,huiche
mov ah,9
int 21h ;dos功能调用,输出字符串
lp1: rol bx,1 ;左移1位后显示的是最高位
mov dl,bl
and dl,01h ;屏蔽dl高7位
add dl,30h ;加30h对应ascii码
mov ah,2
int 21h ;dos功能调用,将内容按位输出
dec cx
jnz lp1
code ends
end state
1.4程序运行结果及分析:
存放和输出时会遇到一些小问题,本程序通过移位和加法指令实现存放,比较麻烦但可以实现,后面的程序有所改进。
图1 十六进制转换为二进制数设计结果
2.十六进制转换为十进制数设计
2.1设计要求:
设计转换程序,将键盘输入的一位十六进制数转换为等值的十进制数,并在终端显示。设计要求:完善程序结构,设置程序错误出口。输出的不是0-f间的数字,显示错误提示信息,并要求重新输入。
2.2设计思路:
输入一位十六进制数,判断是否为0~9,a~f,a~f,各自转换后输出。
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 ;开辟缓冲区
lea dx,pkey
mov ah,9
int 21h ;dos功能调用,输出字符串
lp: mov ah, 1
int 21h ;dos功能调用,输入1个十六进制数
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功能调用,输出错误字符串
jmp lp
output:
mov bx,ax
lea dx,huiche
mov ah,9
int 21h ;dos功能调用,输出字符串
mov [si],bh
mov dl,[si]
mov ah,2
int 21h ;dos功能调用,高位输出
mov [si],bl
mov dl,[si]
mov ah,2
int 21h ;dos功能调用,低位输出
jmp state
code ends
end state
2.4程序运行结果及分析:
这里输出分高位和低位输出,因为是一位十六进制数的转换,如果换两位或更多就需要将程序修改到更智能化。
图2 十六进制转换为十进制数设计结果
3.十六进制转换为ascii码
3.1设计要求:
设计转换程序,将键盘键入的十六进制数据转换为对应的ascii码,并在终端显示。
3.2设计思路:
将输入数的高位左移转ascii输出,低位转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 ;开辟缓冲区
lea dx,pkey
mov ah,9
int 21h ;dos功能调用,输出字符串
lp: mov ah, 1
int 21h ;dos功能调用,输入1个十六进制数
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功能调用,输出错误字符串
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功能调用,输出字符串
mov [si],bh
mov dl,[si]
mov ah,2
int 21h ;dos功能调用,高位输出
mov [si],bl
mov dl,[si]
mov ah,2
int 21h ;dos功能调用,低位输出
jmp state
code ends
end state
3.4程序运行结果及分析:
图3 十六进制转换为ascii码设计结果
4.英文字母大小写转换设计
4.1设计要求:
英文字母大小写转换本质上是ascii码直接的转换。要求掌握大小写字母在计算机内的表示方法及转换方法。设计程序,连续将键盘输入的小写字母转换为大写字母,并在终端显示。设计要求:小写字母转换为大写字母输出,非字母或大写字母输入,不做处理直接输出。
4.2设计思路:
判断输入是否为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 ;初始化数据段
lp: lea dx,pkey
mov ah,9
int 21h ;dos功能调用,输出字符串
mov ah, 1
int 21h ;dos功能调用,键盘输入
cmp al,'z'
ja llp
cmp al,'a' ;输入不在a~z之间直接输出
jb llp
sub al,20h ;输入为a~z转换,ascii码减20h
mov bl,al
output:
lea dx,result
mov ah,9
int 21h ;dos功能调用,输出字符串
mov dl,bl
mov ah,2
int 21h ;dos功能调用,输出dl中内容
jmp lp
llp: mov bl,al
jmp output
code ends
end state
4.4程序运行结果及分析:
图4 英文字母大小写转换设计结果