一、解答题
1. 阅读下面的程序,指明在该程序执行完后,Ml 、M2、M3中存放的是什么?各为多少?
【答案】程序的功能是统计在内存TABLE 开始存放的10个有符号的正数、负数和0的个数,正数的个数放在M3中,负数的个数放在M2中,0的个数放在Ml 中。
原因在于,将要判断的数和0比较,如果JGE 成立,则转向G2标号处,再次判断JG ,成立则表示为正数,则转向G3标号处,将M3的内容加1,如果不成立则表示为0, 将Ml 的内容加1; 如果JGE 不成立,则表示为负数,将M2的内容加1。
程序执行完后。
2. 若8086执行SUBAH ,AL 后的结果是AH=85H, OF=1。问:
(1)执行前AH 和AL 内的数哪个大? (2)AH 存的是正数还是负数? 为什么? (3)结果AH=85H是否正确? 为什么?
【答案】(1)执行SUBAH ,AL 后的结果是AH=85H。
从OF=l,可知AH —AL 有溢出,只有两个异号的数相减才会溢出,故:
又因指令SUBAH , AL 执行后,AH=85H,结果为负,所以有:
第 2 页,共 51 页
从而
因此AH 存的是正数,AL 存的是负数。
所以AH 中的数大于AL 。
(2)只有两个异号的数相减才会溢出,而
(3)因为OF=l, 表明产生了溢出,因此结果AH=85H不正确。
3. 试设计一个数据段DSEG ,它的段基址从01000H 开始,定义下列字符变量或数据变量,并画出它们的 内存分配图。
(1)FIRST 为十六进制数的字变量4020H ; (2)SECOND 为二进制数的字节变量01011100B ; (3)THIRD 为十进制数的字节变量64; (4)STRING 为字符串变量ADDITION ; (5)ASCDATA 为 ASCII 数字变量“46782”; (6)TABL 为10个字的数字变量;
(7)REPDA TA 为数字0、2、3、0、6重复5次的字节变量; 【答案】根据题意设计的数据段DSEG 如下:
内存分配图如图所示,在内存中所有的数据都是二进制存放的,一般用十六进制表示。
第 3 页,共 51 页
图 内存分配示意图
4. 如果从存储器的10000H 地址开始分配段区,要求代码段占用4KB 空间,数据段占2KB 节空间、堆栈段占用512B 空间。按代码段、数据段和堆栈段的顺序连续分段,写出CS 、DS 、SS 各段寄存器内容是什么?
【答案】从存储器的10000H 地址开始分配,那么其实段基址为1000H , 所以CS=1000H; 代码段占4KB 字节,即4096B=1000H, 那么数据段起始地址为10000H+1000H=11000H,段基址为1100H , 即DS=1100H; 数据段占2KB ,即2048B=800H, 那么堆栈段的起始地址为11000H+800H=11800H,段基址为1180H , 即SS=1180H。
因此有CS=1000H, DS=1100H, SS=1180H。
5. 将下列十进制数变为8421BCD 码:(1)8609; (2)5254; (3)2730; (4)1998。
【答案】(1)(2)(3)(4)
6. 指出下列程序完成什么功能。
第 4 页,共 51 页