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

引言

前面,我们用 [0] 、[bx] 的方法,在访问内存的指令中,定位内存单元的地址。这一章中,我们主要讲解一些更灵活的定位内存地址的方法和相关的编程方法。

我们的讲解将通过具体的问题来进行。

7.1 and 和 or 指令

7.2 关于ASCII码

7.3 以字符形式给出的数据

7.4 大小写转换的问题

7.5 [bx+idata]

  • 在前面,我们可以用 [bx] 的方式来指明一个内存单元,我们还可以用一种更为灵活的方式来指明内存单元:

    [bx+idata] 表示一个内存单元,它的偏移地址为 (bx)+idata(bx中的数值加上idata)

  • 我们看一下指令 mov ax, [bx+200] 的含义:

    • 将一个内存单元的内容送入 ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为 bx 中的数值加上200,段地址在 ds 中。
    • 数学化的描述为:(ax) = ((ds)*16+(bx)+200)
  • 指令 mov ax, [bx+200] 也可以写成如下格式(常用):

    • mov ax, [200+bx]
    • mov ax, 200[bx]
    • mov ax, [bx].200

7.6 用[bx+idata]的方式进行数组的处理

数组元素在内存中的组织是一段地址连续的内存单元。

7.7 SI 和 DI

  • SI和DI是8086CPU中和bx功能相近的寄存器,但是SI和DI不能够分成两个8位寄存器来使用(SI和DI在8086CPU中是16位寄存器)。

7.8 [bx+si] 和 [bx+di]

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

注:mov ax,[bx+2+si] 这句的意思是把内存中偏移地址 bx+2+si 处的两个内存单元(双字节)内容拷贝到 ax 寄存器中。因为 ax 是16位寄存器,以后的学习中,记住拷贝的长度和相关寄存器的长度一致。

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

猜你喜欢

转载自www.cnblogs.com/narisu/p/9505397.html