在内存中存储时,因为内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。编程
CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086PC中,内存地址由段地址和便宜地址组成。
8086CPU中有一个DS寄存器,一般用来存放要访问数据的段地址。设计
读取10000H中的内容,能够用以下的程序段进行:code
mov bx 1000H //10000H用段地址和偏移地址表示为1000:0 mov ds,bx mov al,[0] //[0]中的0说明这个内存单元的偏移地址是0, //它的段地址默认放在ds中8086CPU不支持将数据直接送入段寄存器的操做(这是8086CPU硬件设计的问题),ds是一个段寄存器,因此mov ds,1000H是非法的。
要想将1000H送入ds寄存器,只能用一个寄存器进行中专,即先将1000H送入一个通常的寄存器,如bx,再将bx中的内容送入ds。对象
- 1000H表示段地址
- [0]表示偏移地址是0
将al中的数据送入内存单元10000H中内存
mov bx,1000H mov ds,bx mov [0],al
8086CPU是16位结构,有16跟数据线,因此,能够一次性传送16位的数据。硬件
mov bx,1000H mov ds,bx mov ax,[0] //1000:0处的字型数据送入ax, //[0]说明操做对象是一个内存单元,而且内存单元的偏移地址 //是0,它的段地址默认放在ds中 mov [0],cx //cx中的16位数据送到1000:0处
mov命令能够有以下几种形式:程序
- mov 寄存器,数据
好比,mov ax,5- mov 寄存器,寄存器
好比:mov ax,bx- mov 寄存器,内存单元
好比:mov ax,[0]- mov 内存单元,寄存器
好比:mov [0],ax- mov 段寄存器,寄存器
好比:mov ds,ax- mov 寄存器,段寄存器
- mov 内存单元,寄存器
在编程时,咱们能够根据须要,将一组内存单元定义为一个段。
将一段内存看成数据段,是咱们在编程时的一种安排,咱们能够在具体操做的时候,用ds存放数据段的地址,再根据须要,用相关指令访问数据段中的具体单元。数据
假如,咱们将123B0H~123BAH的内存单元定义为数据段。咱们如今要累加这个数据段中的前3个单元中的数据,代码以下:co
mov ax,123BH mov ds,ax //将123BH送入ds中,做为数据段的段地址 mov al,0 //用al存放累加结果 add al,[0] //将数据段第一个单元(偏移地址为0)中的数值加到al中 add al,[1] //将数据段第二个单元(偏移地址为1)中的数值加到al中 add al,[2] //将数据段第三个单元(偏移地址为2)中的数值加到al中
累加数据段中的前3个字型数据。block
mov ax,123BH mov ds,ax //将123BH送入ds中,做为数据段的段地址 mov ax,0 //用ax存放累加结果 add ax,[0] add ax,[2] add ax,[4] //一个字型数据占两个单元,因此偏移地址是0、二、4
- 字在内存中存储时,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
- 用mov指令要访问内存单元,能够在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
- [address]表示一个偏移地址为address的内存单元。
- 在内存和寄存器之间传送字型数据时,高地址单元和高8位地址、低地址单元和低8位寄存器相对应。
- mov、add、sub是具备两个操做对象的指令。jmp是具备一个操做对象的指令。