本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一个字有两个字节大小
DS [address]
1.Data Segment数据段寄存器
2.偏移地址
sub 相减
CPU不止认识1和0 还认识加法
所有一切运算都能化成加法
3.1内存中字的存储
低对低 高对高 相对应
字型数据和字节型数据
3.2 DS和[address]
CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址
8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址
mov指令的三种传送功能
mov al,[0] 索引对应的内存单元
mov指令的格式:
mov 寄存器名,内存单元地址
“[...]”表示一个内存单元 ,“[...]”中的0表示内存单元的偏移地址
内存单元的段地址是DS
8086CPU自动获取DS中的数据为内存单元的段地址
为什么不能将1000H直接放入DS(段寄存器中)
8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器。
数据可直接送入通用寄存器
mov ds,1000H是非法的
数据->通用寄存器->段寄存器
如何将通用寄存器中的数据送入内存中
使用段寄存器做媒介
3.3字的传送
sub ax,bx
其中sub ax,bx就是ax中的值减bx中的值,等于1,然后把结果,也就是1,放入ax中。
3.4 mov、add、sub指令
为什么add的操作对象不能是段寄存器
硬件限制
3.5数据段
用cs指向该数据:代码段
用ds指向该数据:数据段
3.1~3.5小结
可行 mov ax,[0] 段地址默认在DS寄存器中
检测点3.1
2662
E626
E626
2662
D6E6
D6E6
05B2
0
00E6
0
0026
000C
3.6栈
注意:pop只是复制栈顶的数据,并非剪切
CPU如何知道一段内存空间被当做栈使用
段寄存器SS 存放栈顶的段地址
寄存器SP 存放栈顶的偏移位置
任何时刻,SS:IP指向栈顶元素
执行push和pop的时候,如何知道哪个单元是栈顶单元?
push指令的执行过程
如果将1000H~1000FH这段空间当做栈,初始状态栈是空的,此时,SS=1000H,SP=?
SP=0010H
指向最高地址单元的下一个单元
pop之后 1000CH和1000DH单元中仍有数据内容存在
attention: