1.在内存中字的存储方式
在8086CPU中:高位字节放在较高的地址单元内,低地址内存单元中存放字型数据的低位字节。(小端法)
2.DS寄存器:存储数据段的段地址。
例:mov bx,1000H
mov ds,bx
mov al,[0]
就可以将10000H(1000:0)中的数据读入al中。
注意:在8086CPU中不支持直接将数据直接送入段寄存器的操作。(即:不可mov ds,1000,这一点上同CS,IP)
3.mov,add,sub汇编指令。
mov指令,功能:赋值
add指令,功能:相加
sub指令,功能:相减,sub ax,bx (功能相当于C语言中ax-=bx)
汇编指令 | 用法 | 例子 |
mov |
mov 寄存器,数据 mov 寄存器,寄存器 mov 寄存器,内存单元 mov 内存单元,寄存器 mov 段寄存器,寄存器 |
mov ax,8 mov ax,bx mov ax,[0] mov [0],ax mov ds,ax |
add |
add 寄存器,数据 add 寄存器,寄存器 add 寄存器,内存单元 add 内存单元,寄存器 |
add ax,8 add ax,bx add ax,[0] add [0],ax |
sub |
sub 寄存器,数据 sub 寄存器,寄存器 sub 寄存器,内存单元 sub 内存单元,寄存器 |
sub ax,9 sub ax,bx sub ax,[0] sub [0],ax |
push |
push 寄存器 push 段寄存器 push 内存单元 |
push ax push ds push [0] |
pop |
pop 寄存器 pop 段寄存器 pop 内存单元 |
pop ax pop ds pop[0] |
4数据段:定义:将一组长度为N(N<=64KB),地址连续,起始地址为16的倍数内存单元作为专门储存数据的内存空间。
5栈
定义:将一组长度为N(N<=64KB),地址连续,起始地址为16的倍数内存单元当作栈空间来使用。
特性:先入后出LIFO(Last In First Out),就如同一个一段封口的管子,只能在一端进行放东西和取东西的操作。
指令:入栈指令 PUSH,出栈指令POP(用法见上表)
SS:堆栈段寄存器,用来储存栈底位置
SP:表示栈顶指针,指向栈顶地址
SS:SP始终指向栈顶
POP执行时,先将SS:SP指向的内存空间的值赋值给POP的操作对象。然后SP指针+2
PUSH执行
由于8086CPU不进行越界检查(这点和C语言类似),所以容易发生越界问题。
栈段的最大空间为64KB(2^16-1)