-
目录
一、实验目的
二、实验内容
三、实验步骤以及结果
四、实验总结
一、实验目的
- 熟悉无符号数和有符号数乘法和除法指令的使用
- 掌握无符号位扩展指令的使用
- 掌握逻辑指令的使用
-
二、实验内容
1、编写一个汇编程序,要求从键盘中输入一个小写字母,将其转换为对应的大写字母后输出。
例如输入: a 输出 A
提示: 观察大小写字符ascii值之间的规律,可以利用加减法运算,也可以利用逻辑运算进行操作 ,要求至少利用一种方法。
2.利用移位指令计算DX←3×AX+7×BX,假设为无符号数运算,无进位。
3.(选做)预习JC跳转指令,计算1+2+3+…1000, 并将结果存到以ans为开头的缓冲区中。
三、实验步骤以及结果
实验一
1、编写一个汇编程序,要求从键盘中输入一个小写字母,将其转换为对应的大写字母后输出。
例如输入: a 输出 A
提示: 观察大小写字符ascii值之间的规律,可以利用加减法运算,也可以利用逻辑运算进行操作 ,要求至少利用一种方法。
下面的代码实现了将小写字母转化成大写字母,而且若输入非小写字母,则输出
Error: Input is not a lowercase letter
核心代码:
stack segment stack
stack ends
dataseg segment
inputChar db ? ; 定义一个字节变量用于存储输入的字符
dataseg ends
code segment
assume cs:code, ds:dataseg, ss:stack
start: ; 读取小写字母
mov ah, 01h ; 设置功能号,01h 为读取字符
int 21h ; 调用 DOS 中断
mov inputChar, al ; 将读取到的字符存储到 inputChar
; 检查是否为小写字母
cmp inputChar, 'a'
jb not_lowercase ; 如果小于 'a',则不是小写字母
cmp inputChar, 'z'
ja not_lowercase ; 如果大于 'z',则不是小写字母
sub inputChar, 20h ; 'a' - 'A' = 20h
; 输出转换后的大写字母
mov ah, 02h ; 设置功能号,02h 为显示字符
mov dl, inputChar ; 将转换后的字符放到 dl 寄存器
int 21h ; 调用 DOS 中断
jmp exit_program ; 跳转到程序结束
not_lowercase:
; 如果不是小写字母,则输出错误信息
mov ah, 09h ; 设置功能号,09h 为显示字符串
mov dx, offset errorMessage ; 设置要显示的字符串的地址
int 21h ; 调用 DOS 中断
errorMessage db 'Error: Input is not a lowercase letter$'
exit_program:
mov ax, 4C00h ; 设置 DOS 终止程序的功能号
int 21h ; 调用 DOS 中断
code ends
end start
实验结果:
2.利用移位指令计算DX←3×AX+7×BX,假设为无符号数运算,无进位。
令AX=0123H,BX=2345H,理想结果是FA4CH(无符号数)
下面是最终结果,可见DX=FA4CH
下面是核心代码:
不足之处:没有考虑溢出情况。
-
四、实验总结
- 实验12均完成,实验3未做
- 本次实验对相关的算术运算符认识更加深入。