第七章
更灵活的定位内存地址的方法
一、
and
和or指令
1. and指令:逻辑与指令,按位进行与运算
2. or指令:逻辑或指令,按位进行或运算
二、
关于ASCII码
1. 计算机中,所有的信息都是二进制,而人能理解的信息是已经具有约定意义的字符。而我们要把这些信息存储在计算机中,就要对其进行编码,将其转化为二进制信息进行存储。而计算机要将这些存储的信息再显示给我们看,就要再对其进行解码。只要编码和解码采用相同的规则,我们就可以将人能理解的信息存入到计算机,再从计算机中取出。
2. 世界上有很多编码方案,有一种方案叫做ASCII编码,是在计算机系统中通常被采用的。
三、
以字符形式给出的数据
1. 在汇编程序中,可以用’…...’的方式指明数据是以字符的形式给出的,编译器将它们转化为相应的ASCII码。
四、
大小写转换的问题
1. 一个字母不管它原来是大写还是小写,将它的第5位置0,它就必将变为大写字母,将它的第5位置1,它就必将变为小写字母。这样将不需要在处理前判断字母的大小写。
五、
[bx+idata]
1. [bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata
2. mov ax,[bx+idata] 有多种表示方式:
1) mov ax,[idata+bx]
2) mov ax,idata[bx]
3) mov ax,[bx].idata
六、
用[bx+idata]的方式进行数组的处理
1. 在定位字符串中字符的方式上,C语言和汇编语言很类似:
C语言:a[i],b[i]
汇编语言:0[bx],5[bx]
2. [bx+idata]的方式为高级语言实现数组提供了便利机制。
七、
SI
和DI
1. si和di是8086CPU中和bx功能相近的寄存器,注意si和di不能够分成两个8位寄存器来使用。
2. 有时可以利用[bx(si/di)+idata]的方式,来使程序变得简洁。
八、
[bx+si]
和[bx+di]
1. 更灵活的内存指定方式:[bx+si]和[bx+di]。这两者的含义类似。
2. mov ax,[bx+si]也可以写成mov ax,[bx][si]
九、
[bx+si+idata]
和[bx+di+idata]
1. [bx+si+idata]和[bx+di+idata]的含义相似。
2. mov ax,[bx+si+idata]的其他写法:
mov ax,[bx+idata+si]
mov ax,[idata+bx+si]
mox ax,idata[bx][si]
mov ax,[bx].idata[si]
mov ax,[bx][si].idata
十、
不同的寻址方式的灵活应用
1. [idata]用一个常量来表示地址,可用于直接定位一个内存单元
2. [bx]用一个变量来表示内存地址,可用于间接定位一个内存单元
3. [bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元
4. [bx+si]用两个变量表示地址
5. [bx+si+idata]用两个变量和一个常量表示地址
6. 从[idata]一直到[bx+si+idata],我们可以用更加灵活的方式来定位一个内存单元的地址。这使我们可以从更加结构化的角度来看待所要处理的数据。
7. 为了节省寄存器资源,我们可以把一些数据暂时存储到存储器中(多个数据的情况下使用栈的方式更合理且方便),这样可以增强程序的通用性。
8. 一般来说,在需要暂存数据的时候,我们都应该使用栈。
9. 寻址方式的适当应用,使我们可以以更合理的结构来看待所要处理的数据。而为所要处理的看似杂乱的数据设计一种清晰的数据结构是程序设计的一个关键的问题。
实践课程中的程序