前言
昨天晚上去做实验了,老师要求凑够3分,自夏季学期二叉树遍历的课设打击,我自知做难题力不从心,上次我没得选择,这次我有了选择的余地,就挑了一道1分的大小写转换和一道2分的猜数字游戏,来完成本次的汇编实验
一、大小写转换题目要求
• 输入:
➢从键盘输入一个字符
• 处理:
➢如果是小写字母,转换为对应的大写字母
➢如果是大写字母,转换为对应的小写字母
• 输出:
➢开始时提示用户输入
➢将结果显示在屏幕上
➢如果输入的不是字母,在屏幕上给出提示信息。
二、代码设计和测试
1.全部代码
代码如下:(CSDN没有汇编用的语法高亮,属实8行)
.model small
.data
inf db 'Please input a letter:', '$' ;提示用户输入
wrong db 'Not a letter!', 0dh, 0ah, '$' ;输入错误信息提示
crlf db 0dh, 0ah, '$'
.code
start: mov ax, @data
mov ds, ax
lea dx, inf
mov ah, 9
int 21h ;21h中断9号功能,显示提示串
mov ah, 1
int 21h ;21h中断1号功能,读入字符
;下面就是根据ascii码值判断字符类别
cmp al, 41h
jb error ;比大写字母'A'还小
cmp al, 5bh
jb uplow ;'A'~'Z'
cmp al, 61h
jb error ;大于'Z'小于'a'
cmp al, 7bh
jb uplow ;'a'~'z'
jmp error ;大于'z'
uplow: xor al, 20h ;完成大小写转换
lea dx, crlf
mov ah, 9
int 21h
mov dl, al
mov ah, 2
int 21h
jmp done
error: lea dx, crlf ;错误信息提示
mov ah, 9
int 21h
lea dx, wrong
mov ah, 9
int 21h
done: mov ax, 4c00h
int 21h
end start
2.测试
输入小写字母
输入大写字母
输入非字母字符
可以看到有输入提示,能正确实现大小写转换,输入非字母字符时能进行错误提示。
需要注意的地方
(1)把代码段段地址给到ds寄存器
写这个程序的时候,我是有注意到,有加上啦,但是之前自己试着写课件上的BCD码显示的汇编程序时没注意,debug半天没想明白,看了一下HELLO_WORLD的代码,我哭了,第一次还是要注意一下。
(2)大小写转换的方式
其实只是反转了ASCII码中的一位。
例如小写字母a,是61H,二进制即01100001
对应大写字母A,是41H,二进制即01000001
只有一位不同,其他字母大小写增长速度也是一致的,所以只要反转那一位就好了。
总结
作为被选中的1分题,总体而言是很简单了,所以我较多的心思都放在让提示和显示更加美观,以及如何划分分支上面。适合新手练手。