这个分支编程的实验和上个循环编程的作业一样都是5.1前后的汇编实验,同样是三个题,很简单就能搞定,不过整理起来实验报告真是一个麻烦事。

实验一

有 3 个字变量 xy z
x>y ,则求 z=xy+1
否则,求 z=x+y1

十分基础的分支问题,只需要 cmp 判断 x y 大小,然后 jl 跳转即可,代码如下:

接着,查看寄存器等相关信息。

可以明确看到数据段从 076A:0 开始,查看数据段内存。

此时我们的数据是 x 小于 y ,结果应该为 2,运行完程序并再次查看数据段内存。

结果无误,这种分支没有问题,接着我们调整数据,让 y 小于 x

此时,结果应该为 CH ,运行完程序并再次查看内存。

结果无误,至此,我们的两个分支都没有问题,实验一完毕。

实验二

有 1 个字节变量 a 和 1 个字变量 x
a 为偶数,则把 x 中低字节清 0,高字节不变;
a 为奇数,则把 x 中高字节清 0,低字节不变。

和上一个实验一样,换汤不换药,利用一次右移一次左移,与原数判断即可,代码如下:

查看寄存器等相关信息。

如上,数据段内存起始地址为 076A:0 ,查看对应内存。

此时, a 为偶数,如果 C4H 被覆盖则无误,运行完程序并再次查看内存。

结果正是我们想要的,那么我们修改一下 a 为奇数。

此时,应该被清零的是 05H ,再次运行完并查看内存。

的确是 05H 被清零了,至此,实验没毛病,实验二完成。

实验三

有3个字变量 xy z ,一个字节变量 f
计算 z=xy
z>0 ,则 f=1
z<0 ,则 f=1
z=0 ,则 f=0

真是没什么可说的,直接上代码:

查看寄存器等相关信息。

从数据段对应内存 076A:0 起查看内存。

此时 xy 结果应该是 1 ,所以 z FFFFH f FH 的话就是我们想要的。

看来这个分支是没有问题的,接着调整数据。

然后运行完程序并查看内存。

此时, z 结果为 0, f 结果为 0,没毛病,继续调整数据,使 z 结果为正数。

这样的话, z 的结果应该为 1H f 的值也为 1H 。查看数据……

GG,完全没有问题,至此,验证三个分支均无误,实验三完成。

我本不想这么写报告的,实在是太慢了,无奈要求如此,要么不做,要么就好好按着要求做吧……