8086CPU内存的访问

来源:互联网 发布:东莞高埗金蝶软件 编辑:程序博客网 时间:2024/05/16 12:10
 内存中字的储存
    1.  一个字 是两个字节 16位
2.DS数据段寄存器 [address]偏移地址
3.字的传送
4.mov add sub(减法)
5.数据段
6.栈
7.cpu提供的栈机制
8.栈顶的越界问题
9.push pop 指令
10.栈段


实验:
在内存 0处 存放20000(4E20H)
0  20H
1  4EH   (高位对高地址)
注意 :0号是低地址单元,1号是高地址单元。
      一个内存地址存放一个字节!
问题:0地址字节单元存放的字节数据是多少??16进制的20
     0地址字单元,存放的字型数据是多少??4E20H,也就是20000
结论:任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他们看成两个内存
      单元,也可以看成一个地址为N的字单元中的高位字单元和低位字单元。
 
 DS和[address]
 CPU要读取一个内存单元的时候,必须给出这个内存单元的地址。
在8086CPU中,内存地址由段地址和偏移地址组成。
8086CPU有一个DS寄存器,通常用来存放要访问数据的段地址。
 
例如:我们要读取10000H单元的内容可以 用如下程序段 进行:
mov bx,1000H
mov ds,bx
mv al,[0]
上面三条指令将1000H(1000:0)中的数据读到al中
 
mov al,[0]
已知的mov指令可完成的两种传送功能:
(1)将数据之间送入寄存器
 (2)将一个寄存器中的内容送入另一个寄存器中
 除此之外  mov指令 还可以将一个内存单元中的内容 送入一个寄存器。
 8086cpu不支持将数据直接送入段寄存器,ds是一个段寄存器。(硬件设计的问题)
 数据》》通用寄存器》》段寄存器
 
 怎样将数据从寄存器存入内存单元??
 mov bs,1000H
 mov ds,bx
 mov [0],al
 
 字型数据的传送
 8086Cpu是16位的结构,16根总线,所以一次性传送16位的数据,也就是一次性传送一个字。
 比如:
 mov bx,1000H
 mov ds,bx
 mov ax,[0]   ;1000:0处的字型数据送入ax(ax就是16位,al或者 ah存入的默认是8位)
 mov [0],cx  ;cx中的16位数据送到1000:0处
 
 
 
0 0