东北大学汇编上机实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三顺序结构程序设计实验
一、实验目的
1.掌握顺序结构程序的基本设计方法;
2.掌握数据传送指令和算术运算指令的用法;
3.掌握逻辑操作指令和移位操作指令的用法;
4.掌握状态标志位操作指令的用法;
5.掌握简单的I/O功能调用。
二、实验要求
1.熟练掌握DEBUG中的各命令的使用方法;
2.学会利用系统功能调用,来实现键盘输入字符、显示字符的方法;
3.学会十进制数字与其对应的ASCII码相互转换的方法;
4.学会十六进制数字与其对应的ASCII码相互转换的方法;
5.学会利用查表的方法实现代码的转换。
三、实验内容
1.编写十六进制数的乘法程序。要求从键盘上输入两个一位十六进制数据,乘积存入SUM单元。
2.编写程序,求表达式5X+Y的值,要求:X、Y值从键盘输入,X、Y均为一位十六进制数据,将计算结果存入SUM单元。
四、解题思路
利用INT 21H的1号功能可以从键盘上输入数据, 通过通用寄存器保存中间结果,完成各项计算功能。将结果的ASCII码保存在内存单元和DL寄存器中,然后利用INT 21H的2号功能将其输出到屏幕上。输出到屏幕上一次只能显示4位二进制数,所以一个字节需要分两次才能显示出来。
五、编程实现
5.1 内容1
DSEG SEGMENT
HTAB DB '0123456789ABCDEF'
SUM DW 0,0
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG ;初始化DS寄存器
MOV DS,AX
MOV AH,01H ;从键盘上输入一个数X(默认放入AL)
INT 21H
SUB AL,30H ;输入的数据ASIIC码翻译成十六进制
MOV BL,AL ;X放入到BL中
MOV DL,'*' ;规定要显示的符号必须在DL中
MOV AH,02H ;显示’*’
INT 21H
MOV AH,01H ;从键盘输入第二个数Y(默认放入AL)
INT 21H
SUB AL,30H ;输入的数据ASIIC码翻译成十六进制
MUL BL ;AL*BL
MOV SUM,AX ;保存数据到SUM中
MOV CH,AL ;利用CH和DH存放
MOV DH,AL
MOV DL,'=' ;规定要显示的符号必须在DL中
MOV AH,02H ;显示‘=’
INT 21H
MOV CL,4
SHR DH,CL ;DH中保存了之前AL中的高四位
MOV AL,DH ;查表规定数据必须在AL中
LEA BX,HTAB ;利用查表方法显示
XLAT
MOV DL,AL ;显示AL中的高四位
MOV AH,02H
INT 21H
AND CH,0FH ;CH中保存了之前AL中的低四位
MOV AL,CH ;查表规定数据必须在AL中
XLAT ;查表方法显示
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
运行结果如下如图3-1
图3-1
5.2 内容2
DSEG SEGMENT
HTAB DB '0123456789ABCDEF'
SUM DW 0,0
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV AH,01H ;从键盘上输入X,默认保存到AL中
INT 21H
SUB AL,30H
MOV BL,5 ;BL中保存数据5
MUL BL ;X*5默认保存到AX中
MOV CX,AX ;X*5保存在CX中
MOV DL,'*' ;屏幕上显示'*'前规定需要保存到DL中
MOV AH,02H ;显示’*’
INT 21H
MOV AL,05H ;利用查表法输出5,之前必须放入到AL中
LEA BX,HTAB ;查表获取地址
XLAT ;查表转换
MOV DL,AL ;屏幕显示数据5之前规定需要放到DL中
MOV AH,02H ;显示5
INT 21H
MOV DL,'+' ;屏幕显示’+’之前规定需要放到DL中
MOV AH,02H ;屏幕显示’+’
INT 21H
MOV AH,01H ;从键盘上输入数据Y
INT 21H
SUB AL,30H
MOV BL,AL ;Y保存到BL寄存器中
MOV BH,00H
ADC CX,BX ;实现5X+Y
MOV SUM,CX ;保存结果
MOV DL,'=' ;屏幕显示‘=’之前规定需放入到DL寄存器中
MOV AH,02H ;显示’=’
INT 21H
MOV BH,CL ;保存CL,因为下面指令SHR需用到CL寄存器
MOV CH,CL ;保存CL,因为下面指令SHR需用到CL寄存器
MOV CL,4
SHR BH,CL ;右移4位,即为原来结果的高4位
MOV AL,BH ;放到AL中,便于查表转换后显示出来
LEA BX,HTAB ;查表
XLAT
MOV DL,AL ;显示结果的高4位
MOV AH,02H
INT 21H
AND CH,0FH ;原来结果低4位处理
MOV AL,CH ;查表转换
XLAT
MOV DL,AL ;显示结果低4位
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
运行结果如图3-2
图3-2
六、实验总结
6.1 心得体会
6.2 遇到的问题
实验过程中遇到的问题很多,我就挑典型的几个错误分享一下。
1.实验内容1中,INT 21H会改变AL中的值,所以AL中的数据要在该语句之前保存;
2.实验内容2中,我刚刚开始输入Y时忘记写SUB AL,30H,后来运行结果屏幕显示的结果总是比实际结果大3,这个错误找了很久,给我印象深刻。