3.1 内存中字的存储
CPU中,用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节。
由于内存单元是字节单元,则一个字要用两个地址连续的内存单元来存放。低位字节存放在低地址单元中,高位字节存放在高地址单元中。
3.2 DS和[Address]
[address] 即 DS:address
注:8086CPU不支持将数据直接送入段寄存器的操作。
3.3 字的传送
8086CPU是16位结构,可以一次传送一个字。
3.4 mov,add,sub指令
mov指令的几种形式
mov reg,idata
mov reg,reg
mov reg,[address]
mov [address],reg
mov sreg,reg
注:add,sub指令也有与mov指令一样的格式
3.5 数据段
将一段内存当作数据段,是我们在编程时的一种安排,可以在具体操作的时候,用DS存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。
3.6 栈
一种特殊的存储结构,遵循LIFO或FILO的操作规则。
3.7 CPU提供的栈机制
8086CPU提供入栈和出栈指令,PUSH和POP。
CPU中有两个寄存器,SS和SP,SS指示栈的段地址,SP指示栈的偏移地址。 >>>>任意时刻,SS:SP指向栈顶元素<<<<
push reg 操作过程:
1) SP=SP-2
2) 将数据送入SS:SP指示的地址
pop reg 的操作过程正好相反:
1) 从SS:SP指示的地址读取数据
2) SP=SP+2
3.8 栈顶超界的问题
8086CPU并没有提供预防栈顶超界的机制,需要我们自己注意。
3.9 push,pop指令
push/pop reg/sreg/[address]
tips: 清零操作,可以使用"sub ax,ax"指令,大小为2个字节,而使用"mov ax,0"的大小为3个字节
3.10 栈段
8086CPU中,一个栈段最大的容量为64KB
实验2 用机器指令和汇编指令编程
略