这一个咋一看很唬人,是前面知识的大杂烩,也是看了一些大神的代码才看懂
其实也就是那几个步骤,但是比较复杂
目录
1:对整个data段进行定位,取数。
但这里的问题是data段里又分了好多种信息,所以要多用一个寄存器来分别对这些信息定位,格式可以用ds:0H,ds:54H,ds:A8H分别定位到年份,收入,雇员三个子段。
现在又来了个问题,这每个子段又是一个个小段,比如年份里就有21年,我们每次要取的都是其中之一。所以还需要另外一个寄存器帮助我们确定当年具体是在哪一年,我选了si寄存器
上面是将bx的值乘4赋给si寄存器,这个可以帮我们知道如今到了哪一年。
比如,最开始,bx=0;那么si=4*bx也等于0,那说明我在的年份在ds:0H[si],也即ds:0H[0]处,为1975,用两个寄存器就可以将其取出;当第二轮循环,bx=1时,si=4,那就说明年份的起始地址为ds:0H[4] ,1976,同样,用两个寄存器可将其取出
2.对table段进行定位
table段的定位可以放在循环中,因为table每一行是16个字节,这样我们对其段地址加上bx,也就是第几年的时候,就可以自动完成换行了。
比如说,一开始bx=0,那es = table +0,就是在table的第一行
随后,bx=1, es = table + 1,因为es是段寄存器,加一就代表着真正地地址加了16,也就完成了换行,之后的可类比这个
在对table的每一行完成定位后,还有每一行的内容需要定位,因为是固定的,所以只需要用es:0H[0]和es:0H[1]就可以表示四字节的年份
可以参考该代码段,下面两行