第三章 寄存器(内存访问)
内存中字的存储
- 内存单元==字节单元
- 字单元:由两个连续的内存单元组成,16位寄存器存储一个字,高8位地址存高字节,低8位地址存低字节
DS和[address]
DS寄存器通常用来存放要访问的数据的段地址
直接上例子
1
2
3
mov bx,1000H
mov ds,bx
mov al,[0]
8086CPU中,往DS里面写东西只能以
mov ds,寄存器
的方式,而不能像ax寄存器那样mov ax,1
CPU在执行上述类似指令的时候,会将[…]里的内容作偏移地址,取默认存在ds里的作为段地址来访问对应内存
字的传送
一个例子:
mov、add、sub指令
mov
1 | mov 寄存器,数据 |
add&sub
1 | add 寄存器,数据 |
经实验,add和sub不支持寄存器与段寄存器之间的操作

体会数据和程序的区别
例:
程序和数据本身存放形式没有区别,关键是看存的的段地址:ds段的就是数据,cs段的就是程序指令。
CPU提供的栈机制
push ax :表示将寄存器ax中的数据送入栈(字型数据高位字节先入栈)
pop ax 表示从栈顶取出数据送入ax(先出的为低位字节)
入栈和出栈操作都是以字为单位进行的
8086CPU中的SS(段寄存器):SP(寄存器)在任意时刻都指向栈顶元素。push和pop指令执行时,CPU从SS和SP中得到栈顶地址
入栈时,栈顶从高地址向低地址方向延伸
栈空时,SS:SP指向栈空间最高地址单元的下一个单元,如:
push 和 pop都有可能导致栈顶越界
8086CPU不会保证我们对栈的操作不会超界,要自己操心~
push 和 pop 指令
push(pop) 寄存器/段寄存器/内存单元
Comments