实验四 分支结构程序设计实验

各题目程序源代码在这里:Leeeeo’s Assembly-Language</strong>

一、实验目的

1.掌握分支结构程序设计的基本设计方法;

2.掌握条件转移指令和无条件转移指令的使用方法;

3.掌握指令对标志寄存器各标志位的影响情况;

4.掌握多分支结构程序设计的方法,树型结构法和地址常数表法。

二、实验要求

1.学会使用DEBUG中的T命令,跟踪执行程序;

2.学会使用DEBUG中的P命令对INT指令的跟踪方法;

3.学会利用设置断点调试程序的方法。

三、实验内容

1.编写程序。已知在DATA开始的内存单元中,连续存放着三个一位十六进制数,找出其中最大数及最小数,存放在指定的内存单元中。

解题思路:

将三个数从Data单元取出三个数,两两比较,分不同情况,将最大数和最小数分别放入MAX合MIN单元。

2.编写程序。已知在DATA开始的内存单元中,连续存放着三个带符号数据,判断三个数是否同号:若同时为正,则在屏幕上显示“+”号;若同时为负,则在屏幕上显示“-”号;否则显示“*”号。

解题思路:

从DATA开始的内存单元中,依次取出三个数用80H测试,当第一个数为正数时,比较第二个数,若第二个数也为正数,则比较第三个数,若第三个数也为正数,则输出“+”号,其他情况输出“”号;当第一个数位负数时,比较第二个数,若第二个数也为负数,则比较第三个数,若第三个数也为负数,则输出“-”号,其他情况输出“”号。

 

3.编写程序。从键盘接受字符,判断该字符是否为字母、数字或非字母也非数字类字符。若为字母,则在屏幕上显示“L”;若为数字,则在屏幕上显示“D”;若为非字母也非字母也非数字,则在屏幕上显示“O”。

解题思路:

对输入键盘的字符的ASCII码进行判断。若字符的ASCII码在30-39H,则为数字;若字符的ASCII在41-5AH或61-7AH,则为为字母;其他情况,则为其他字符;

4.编写程序。已知DATAX和DATAY单元各存放一个带符号字节数据,从键盘上接收加(+)、减(-)、乘(*)或除(/)号,完成相应运算,结果在屏幕上显示出来

(1)当输入“+“号时,计算X+Y,并以十六进制形式显示出来;

(2)当输入“-“号时,计算X-Y,并以十六进制形式显示出来;

(3)当输入““号时,计算XY,并以十六进制形式显示出来;

(4)当输入“/“号时,计算X/Y,并以十六进制形式显示出来。

解题思路:

先从DATAX、DATAY单元中取出需要计算的带符号字节数据,然后从键盘读取一个字符,判断该字符是否为加(+)、减(-)、乘(*)或除(/)号中的一个,完成相应运算,然后后将结果输出到屏幕上。

5.编写程序。从键盘输入若干个任意字符,如果是小写字母a~z之间的字符,请将它们转换成相应的大写字母;若为其他字符,则保持不变,将转换后的新字符保存在指定的存储单元中。

解题思路:

对输入字符进行判断,若该字符的ASCII码在61-7AH之间,则为小写字母,则将该字符的ASCII码减去20H,即可得到对应的大写字母ASCII码,再将结果保存在指定的存储单元中;若该字符的ASCII码不在61-7AH之间,则跳转读取下一个字符。

 

四、实验中遇到的问题及解决办法

1、实验内容第四个题:两个比较大的数相乘的时候会溢出,导致得到的结果不正确。同样的还有两个数相减,不够减的情况。

解决办法:因为是字节数据,最大为7FH,所以结果都用字数据表示,则不会溢出。但是字数据结果要显示在屏幕上需要依次从高位把每一个数字输出,因此把字数据结果分成两个字节数据输出。

2、实验内容第五个题:因为如果要输入若干个任意字符,那么程序就会一直运行没法停止。

解决办法:用了一个计数器,是程序执行一定次数后停止。在DEBUG中先用G命令让它执行设定的次数,再用D命令查看内存单元存放数据是否正确。

各题目程序源代码在这里:Leeeeo’s Assembly-Language</strong>