汇编语言---------王爽第七章

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

  • and 和 or指令
  • and指令
  • or指令
  • 关于ASCII码
  • 以字符形式给出的数据
  • [BX+IDATA】
  • SI和DI
  • [bx+si]和[bx+di]
  • [bx+si+idata]和[bx+di+idata]
  • 不同的寻址方式的灵活应用

and 和 or指令

and指令

and指令:逻辑与指令,按位进行与运算。两个位多是1才为1,其他情况都为0。
比如 and al,10111111B指令将al的第六位设为0其位不变。

or指令

or指令:逻辑或指令,按位或指令。两个位置多是0才为0,其他情况多是1。比如 or al 10000000将al的第八位设为1,其他位保持不变。

关于ASCII码

在计算机中所有的信息都是二进制,而人们能理解的信息是已经具有约定意义的字符,所以我们将字符编码为ASCII码。编码是一种规则,规定了哪些数码与哪些数字意义对饮,比如在ASCII码规定65为A,97为a。

以字符形式给出的数据

我们可以在汇编程序中用’…'的方式指明数据以字符的形式给出。编译器将它们转化为相对应的ASCII码,比如 mov al ‘b’相当于 mov al,62H。

[BX+IDATA】

【bx+idata】idata我们之前规定为常量,[bx+idata]的偏移地址相当于(bx)+idata,段地址还是在ds中。 有了这个表达式我们便可以从高级的结构来看待所要处理的数据。可以将要处理的数据看成数组来处理。比如有两个字符串要处理可以把这两个字符串看成两个数组。第一个数组的偏移地址可以写成[BX+IDATA],其中IDATA是这个数组的起始偏移地址。第二个数组的偏移地址也可以这样写。
我们看一下指令mov ax,[bx+200]的含义:
将一个段地址在ds,偏移地址为bx中的值加上200的内存单元的字型数据传送给ax中。
该指令也可以写成如下的格式:
mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200

SI和DI

si和di是8086CPU中和bx功能相近的寄存器,si和di不能够分成两个8位寄存器来使用。

[bx+si]和[bx+di]

这两个寄存器也可以同时运用到表示偏移地址的表达式中,[BX+SI]和[BX+DI]的偏移地址是在表示中的两个寄存器中的值相加。
有了以上偏移值表达式我们可以更好看待数据如何处理。
比如指令mov ax,[bx+si]
将一个段地址为ds偏移地址为bx和si中的值相加的存储单元的字型数据传送给ax
该指令也可以写成如下的格式:
mov ax,[bx][si]

[bx+si+idata]和[bx+di+idata]

指令mov ax,[bx+si+idata]的含义如下:
将一个段地址为ds,偏移地址为bx+si+data的值的内存单元的字型数据传送给ax。
该指令也可以写成如下格式:
mov ax,[bx+200+si]
mov ax,[200+bx+si
mov ax,200[bx][si]
mov ax,bx.200[si]
mov ax,[bx][si].200

不同的寻址方式的灵活应用

  1. [idata]用一个常量来表示地址,可用于直接定位一个内存单元。
  2. [bx]用一个变量来表示内存地址,可用于直接定位一个内存单元
  3. [bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元
  4. [bx+si]用两个变量表示地址
  5. [bx+si+idata]用两个编号和一个常量表示地址

你可能感兴趣的:(汇编语言---------王爽第七章)