本章将从内存访问的角度继续学习几个寄存器
3.1 内存中字的存储
CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。
内存中,一个字用两个地址连续的内存单元来存放,低位字节存放在低地址单元,高位字节存放在高地址单元。
3.2 DS和[address]
DS寄存器通常用来存放数据的段地址, [...]用来表示内存单元的偏移地址,例如访问10000H单元内容的代码如下:
mov bx, 1000H
mov ds, bx
mov al, [0]
上面三条指令将10000H中的数据读到al中。
3.3 字的传送
只要在mov指令中给出16位寄存器就可以进行16位数据的传送了。
3.4 mov、add、sub指令
(1)mov 指令的几种形式
mov 寄存器,数据
mov 寄存器, 寄存器
mov 寄存器, 内存单元
mov 内存单元, 寄存器
mov 段寄存器,寄存器
(2)add和sub 指令的几种形式
add 寄存器,数据
add 寄存器, 寄存器
add 寄存器, 内存单元
add 内存单元,寄存器
sub 寄存器,数据
sub 寄存器,寄存器
sub 寄存器,内存单元
add 内存单元,寄存器
3.5 数据段
将一段内存当作数据段,是我们编程时的一种编排
比如, 将123B0H~123B9H的内存单元定义为数据段,现在要累加这个数据段中的前3个单元中的数据,代码如下
mov ax, 123BH
mov ds, ax
mov al, 0
add al, [0]
add al, [1]
add al, [2]
3.6 栈
栈的特性:后进入这个空间的数据,最先出去LIFO(last in first out)
3.7 CPU提供的栈机制
8086CPU提供入栈和出栈指令, PUSH(入栈)和POP(出栈)
push ax 表示将寄存器ax中的数据送入栈中
pop ax 表示从栈顶取出数据送入ax
push ax执行的两步
(1) sp=sp-2
(2) 将ax中的数据送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。
pop ax 执行的两步
(1) 将SS:SP指向的内存单元的数据送入ax中
(2) SP=SP+2
栈空状态指针
栈空, SS:SP指向栈空间最高地址的下一个单元。
3.8 栈顶越界的问题
8086CPU不保证我们对栈的操作不会越界,因此编程时我们要自己注意栈顶越界问题。
3.9 push、pop指令
push、pop指令的形式
push 寄存器
pop 寄存器
push 段寄存器
pop 段寄存器
push 内存单元
pop 内存单元
3.10 栈段
将一段内存当作栈,是我们编程时的一种安排
检测点3.1
(1)2662H, E626H,E626H,2662H,D6E6H,FD48H,2C14H,0000H,00E6H,0000H,0026H,000CH
检测点3.2
(1)
mov ax, 2000H
mov ss, ax
mov sp, 10H
(2)
mov bx, 1000H
mov ss, bx
mov sp, 0000H
谢谢大家, 多多关照!