汇编语言学习(四)~寄存器(内存访问)
内存中字的存储
字单元:存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成
高地址内存单元存放字型数据的高位字节,低地址内存单元存放字型数据的低位字节
起始地址为N的字单元称为N地址字单元
DS和[address]
8086PC中,内存地址由段地址和偏移地址组成,存储在DS寄存器中
下面三条指令将10000H(1000:0)中的数据读到al中
mov bx,1000H
mov ds,bx
mov al,[0]
解析:
使用mov指令将一个内存单元中的内容送进一个寄存器中:mov 寄存器名,内存单元地址
[...]表示一个内存单元,上述例子中的0表示内存单元的偏移地址,执行指令时8086CPU自动读取ds中的数据为内存单元的段地址
8086不支持将数据直接送入段寄存器的操作,如ds,所以必须用一个寄存器(bx)来进行中转
例题:
mov、add、sub指令
mov:
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
a命令写入指令,t命令执行
- mov 寄存器,寄存器
ds中的值送入到了寄存器ax中
数据段
这个就相当于计算题,看内存单元存储的数据,下题为例
栈
栈是一种具有特殊的访问方式的存储空间:后进先出(LIFO)
CPU提供的栈机制
8086CPU提供入栈、出栈指令:PUSH、POP,以字为单位进行
段寄存器SS:存放栈顶段地址;SP:存放栈顶偏移地址 任何时刻,SS:SP指向栈顶元素
入栈时,栈顶从高地址向低地址方向增长
PUSH:先改变SP,后向SS:SP处传送
POP:先读取SS:SP处数据,后改变SP
注意:SS:SP指向新的栈顶后,pop前的栈顶元素仍然存在
栈顶超界问题
自己注意……,8086CPU没有能帮你的
栈顶超界很危险:比如在你规定的这段栈空间外存放了其他重要数据和代码,可能会由于入栈出栈时不小心意外改写这些数据
注意:SS属于段寄存器,不能直接送入数据,需要其他寄存器作为中转站