实验二 汇编语言程序设计
实验二 汇编语言程序设计
实验目的
- 掌握顺序和循环程序结构和设计方法。
- 熟悉在 PC 机上建立、汇编、连接、调试和运行 8086/8088 汇编语言程序的过程。
实验内容
- X、Y、Z、V 均为字变量,在 X、Y、Z、V 字单元中存放是 16 位带符号数。试编写汇编语言程序完成以下功能:
- 计算表达式值 (V – (X * Y + Z - 720)) / X
- 将上述表达式运算结果整数放在 SUM1 单元,余数放在 SUM2 单元
- 使用地址表实现如下功能:根据输入的数字 1 ~ 7,分别显示相应的英文星期名,如果输入其他字符,则重新输入。
- 求一个班 50 名学生成绩的平均值、最大值和最小值,并将结果显示出来。
- 从键盘读入一个字符串,以 Enter 结束,字符串不超过 60 个字符,并打印该字符串;查找中间是否有自己名字拼音首字母缩写的子串。如果有,输出 “TRUE”;否则,输出 “FALSE”。
实验过程和程序
任务 1
X、Y、Z、V 均为字变量,在 X、Y、Z、V 字单元中存放是 16 位带符号数。试编写汇编语言程序完成以下功能:
- 计算表达式值 (V – (X * Y + Z - 720)) / X
- 将上述表达式运算结果整数放在 SUM1 单元,余数放在 SUM2 单元
1 | ; cal.asm |
任务 2
使用地址表实现如下功能:根据输入的数字 1 ~ 7,分别显示相应的英文星期名,如果输入其他字符,则重新输入。
1 | ; table.asm |
任务 3
求一个班 50 名学生成绩的平均值、最大值和最小值,并将结果显示出来。
1 | ; grade.asm |
任务 4
从键盘读入一个字符串,以 Enter 结束,字符串不超过 60 个字符,并打印该字符串;查找中间是否有自己名字拼音首字母缩写的子串。如果有,输出 “TRUE”;否则,输出 “FALSE”。
1 | ; string.asm |
实验结果
任务 1
如下代码所示,在 X、Y、Z、V 变量中分别存了几个数字,运行程序,计算结果
1 | data segment |
程序得到了正确的结果:商是 2,余数是 1。
任务 2
运行结果如图所示,可以正常转换:
任务 3
为了方便数据录入,我在编写代码时只考虑了 10 个成绩,如下图,在 grade 数组中有 10 个成绩。下面的为结果存放的内存,注释部分为期待的结果。
1 | data segment |
运行程序:可以看到结果正确:
任务 4
在此题中,我的名字拼音首字母为 “gxw”,在编写代码后,运行程序:
实验体会
本次实验和上一次实验最大的不同是本次实验将代码写在了文件中,然后用 MASM 和 LINK 工具来编译和链接。这样写代码时更加方便,代码也可以保留下来。
实验中用到了地址表,相当于 switch 语句。可以根据需要跳转到不同的语句,比如第二题中,根据用户输入来跳转到不同的输出语句。
实验中还用到了循环语句的写法,使用循环可以简化程序。例如对数组的求和以及遍历数组。
实验中用到了比较字符串的指令和重复前缀,结合这两个命令可以实现从字符串中查找子串的目的。