首页 > 其他分享 >asm:操作数寻址的七种方式(intel8086 - masm.exe)

asm:操作数寻址的七种方式(intel8086 - masm.exe)

时间:2023-01-11 01:22:07浏览次数:42  
标签:操作数 exe masm intel8086 地址 寻址 内存 寄存器 位数

asm:操作数寻址的七种方式(intel8086 - masm.exe)

 

 

 

 

  在汇编汇编语言中,很多命令需要“操作数(参数)”。“操作数”给出的方式,有三类。第一类,“直接”给出操作数;第二类,操作数存储在“寄存器”内;第三类,操作数存储在“内存”内。其中,直接给出操作数,包含一种方法。在“寄存器”中给出操作数,包含一种方法。在“内存”中给出操作数,包含五种方法。由此可见,给出“操作数”,一共包含七种方法。

 

 

 

 

一、(立即数寻址)立即数寻址: 直接给出“操作数”。

 

1             mov    ax, 0000h        ;  立即数寻址
2             mov    ds,    ax

 

 

 

 

 

 

二、(寄存器寻址)寄存器寻址: 操作数,存储在“寄存器”内。先将操作数存储在“寄存器X”中,然后将“寄存器X”作为命令的操作数。

 

1             mov ax,  0000h
2             mov ds,  ax            ;  寄存器寻址
3             mov bx,  0000h

 

 

 

 

 

 

三、(内存寻址)直接寻址: 直接给出“操作数”在内存的偏移地址。

 

  1、地址总线:假设“地址总线”包含n根线。那么“地址总线”,一次性可以传送n位二进制数。那么“地址总线”,一共可以传递2exp(n)个不同的数据(地址)。那么,“地址总线”一共可以访问内存单元的数量是2exp(n)。那么,“地址总线”的寻址范围为:0~2exp(n)。说明:2exp(n) = 2的n次方。

 

  2、segment(段):segment(段),是CPU中的概念。由于CPU中“寄存器的位数”,限制了输入输出数据的位数。如果CPU输出的数据是“内存地址”,那么“寄存器的位数”就限制了CPU操作内存的范围。当寄存器位数小于地址总线位数的时候;CPU访问内存的地址范围小于地址总线提供内存的范围。为了发挥地址总线的全部能力,需要增加CPU生成地址数据的位数。为了增加CPU地址数据的位数,采用了“拼接”数据的方式。拼接数据的方式:地址数据位数=段地址+偏移地址;段的概念诞生了。内存分段的数量,如何确定?“寄存器位数n”生成n位不同的二进制数据的数量;“寄存器位数n”可以生成2exp(n)个n位不同的二进制数据;那么,内存可以分为2exp(n)个段。由此可知,16位的寄存器,可以产生2exp(16)=65536个n位不同的数据;那么,16位寄存器,可以将内存分成65536个段。现在开始讲解“偏移地址”。寄存器位数n,决定每个段的内存范围。同段寄存器的道理相同。寄存器位数n,可以访问2exp(n)个内存空间。16位的寄存器,可以产生64436个不同的n位数据。即16位的寄存器,可以访问65536个内存单元。由于内存最小的单位是字节(1byte=8bits),那么16位寄存器可以方位的内存空间大小是:65536 x 1 byte = 65536bytes= 65536/1024=64 KB(Kilo Bytes)。即偏移范围是64KB,每个段的大小是64KB。

 

  3、寻址方式【段地址+偏移地址】:

    3.1、说明:段是逻辑概念。段,是因为寄存器位数不足以产生与地址总线位数相匹配的地址数据而产生的逻辑概念。

    3.2、段:分段数量,由寄存器的最大位数决定。

    3.3、段的大小:段的大小,由偏移范围决定,偏移范围由寄存器的位数决定。

    3.4、16位寄存器:段的最大数量是2exp(16)=65536个。每个段的内存大小是65536bytes=64KB。16位寄存器可以访问的最大内存:段的数量*段的大小=65536*64KB=4096MB=4GB

    3.5、8086地址的拼接方式:内存地址=(16位段地址寄存器)x16 + (16位偏移地址寄存器);内存地址等于,“段地址寄存器”向左移动1位,然后加上,“偏移地址寄存器”。

 

  4、直接寻址,属于【段地址 + 偏移地址】

 

  5、直接寻址:操作数存储在内存中。操作数存储在内存的数据段内。数据段的段地址存储在“寄存器DS”内。操作数的偏移地址可以直接给出。

 

  6、计算示例中的内存地址:数据段地址DS=1000H,偏移地址:0000H,数据在内存中的地址=DS*16+0000H=10000H。

1             mov ax,    00eeh
2             mov [0000],    ax
3             mov    ds,    [0000]        ;  直接寻址

 

 

 

 

四、(内存地址)寄存器间接寻址:

 

  1、操作数,存储在内存中。操作数,存储在内存的“数据段”内。

1             mov ax, 0000h
2             mov ds, ax
3             mov bx, 0
4             mov cx,    [bx]        ;  寄存器间接寻址

 

 

 


五、(内存寻址)寄存器相对寻址方式:



标签:操作数,exe,masm,intel8086,地址,寻址,内存,寄存器,位数
From: https://www.cnblogs.com/lnlidawei/p/17042680.html

相关文章