第三章 寄存器(内存访问)
1、字型数据考虑两个字节,本高字单元+本字单元
2、DS和[address]:DS存放要访问数据的段地址。
3、mov指令可以完成两种传送功能:1.将数据直接送入寄存器;2.讲一个寄存器中的内容送入到另一个寄存器。除此之外,mov指令还可以将一个内存单元中的内容送入到一个寄存器。例mov al,[0]。执行指令时,8086CPU会自动取DS中的数据为内存单元的段地址。
4、如何把1000H送入DS?8086CPU不支持将数据直接送入段寄存器的操作,DS是一个段寄存器(硬件设计问题)。数据——通用寄存器——段寄存器。
5、如何将al中的数据送入内存单元10000H?
6、[0]何时是一个字,何时是一个字节?
7、mov 寄存器 段寄存器
8、如果是段寄存器DS指向的那就是数据段,存放数据;如果是段寄存器CS指向的那就是代码段,存放的是代码;如果是段寄存器SS指向的那就是栈段,存放的是栈。
9、栈:基本操作进栈(push)和出栈(pop)。例push ax:将寄存器ax中的数据送入栈中;POP ax:从栈顶取数据存入ax中。
10、如何知道栈顶位置?两个寄存器:段寄存器SS 存放栈顶的段地址,寄存器SP 存放栈顶的偏移地址,任意时刻,SS:SP指向栈顶元素,不断更新。
11、栈空的时候SP指向最高地址的下一位地址。
12、C语言函数调用,变量调用与栈有关,这个处理系统自动处理。调用函数的时候将自己的变量全部入栈,调用完成后出栈。
13、pop取数据只移动指针,然后复制数据,不会删除数据。
14、栈顶越界
15、PUSH和POP格式:后面可以加1.通用寄存器;2.段寄存器;3、内存单元。
16、xor ax ax,将ax置零(异或)
17、用栈存储数据出栈顺序和入栈顺序相反。
18、POP:先读取SS:SP的值,后SP加二;PUSH:先SP的值减二,然后传送数据。都是修改SP的内容,栈顶的变化范围最大为0——FFFFH。
19、栈段:起始地址为16的倍数,栈为空的时候sp=栈底+1。一个栈段最大容量是64KB。
20、如果栈满,再次压栈,栈顶将环绕,覆盖了原来栈中的内容。
21、栈早期是用来保存函数的返回值。现在栈是用来临时存放数据的。栈是为了函数的存在而存在的。。
检测点:
1.mov ax, 2000
mov ss, ax
mov sp, 10H
2.mov ax,1000H
Mov ss,ax
Mov sp 0H
仔细观察图3.19的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
因为用T指令进行调试时,会产生中断。而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。