东北大学汇编上机实验3

  • 格式:doc
  • 大小:46.00 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,这个错误找了很久,给我印象深刻。