更灵活的定位内存地址的方法

    前面我们使用[0][bx]的方法定位内存单元。

1.       andor指令

a)       and指令:逻辑与指令,按位进行与运算。通过该指令可将操作对象的相应位设为0,其他位不变。

b)       or指令:逻辑或指令,按位进行或运算。通过该指令可将操作对象的相应位设为1,其他位不变。

2.       字符串

字符串使用单引号括起来的,字符串的每个字符都会转换成ASCLL码进行存储。

大写字母和小写字母相差32D20Ha——61H97DA——41H65D)。但大写字母和小写字母在二进制位中只是第五位不同,其他位都相同(第五位大写:0,小写1),因此在大小写转换修改第五位即可。

3.       [bx+idata]

前面使用[BX]的方式来指明一个内存单元,还可以用一种更灵活的方式来指明内存单元:[bx+idata]或者[bx].idata;它的偏移地址为(bx+idata。((ds)*16+(bx)+idata)。

4.       使用[bx+idata]方式进行数组的处理

有了[bx+idata]这种表示内存单元的方式,就可以用更高级的结构来看到所要处理的数据。

5.       SIDI

SIDI8086CPU中和bx功能相近的寄存器,SIDI不能够分成两个8位寄存器来使用。可以和bx替换,进行保存偏移地址。

        在处理数据之前首先要搞清楚数据存储在什么地方,即数据的内存地址。

6.       [bx+si][bx+di]

a)       可以使用[bx(si/di)][bx(si/di)+idata]的方式来指明一个内存单元,还可以用更灵活的方式:[bx+si][bx+di]

b)       [bx+si][bx+di]的含义相似,[bx+si]表示一个内存单元,它的偏移地址为(bx)+(si)(即:bx中的数值加上si中的数值)。

7.       [bx+si+idata][bx+di+idata]

[bx+si][bx+di]类似,最后需要加上idata形成最终的偏移地址。

8.       不同的寻址方式的灵活运用

a)       [idata]:用一个常量来表示地址,可用于直接定位一个内存单元

b)       [bx]:用一个变量来表示内存地址,可用于间接定位一个内存单元

c)       [bx+idata]:用一个变量和常量表示地址,可在一个骑士地址的基础上用变量间接定位一个内存地址

d)       [bx+si]:用两个变量表示地址

e)       [bx+si+idata]:用两个变量和一个常量表示地址。

9.       暂存数据

在进行循环的时候,loop指令只能读取cx中的数据进行循环。

那么当有嵌套循环时怎么办呢? 在开始内循环前使用一个寄存器临时保存外循环的(cx),在结束内循环后再将临时保存的(cx)恢复到cx中。

在保存临时(cx)时程序中已使用的寄存器是不能用来保存cx,并且寄存器的数量有限,那么可以使用内存来保存cx。如果使用内存保存,那么就需要开辟一段内存空间进行保存。

内存保存数据弊端:

当有多个数据需要保存时,使用内存保存数据容易混乱,需要记住数据放到了哪个单元中。一般来说,在需要暂存数据的时候,我们都应该使用栈(pushpop),可对其进行他书的操作。