第3章 寄存器(内存访问)
1 内存中字的存储
内存单元是字节
一个字要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
2 DS和[address]
内存单元地址 DS:[address]
3 字的传送/字节的传送
1)通过使用16位寄存器/8位寄存器来完成字/字节的传送。
2)使用mov指令访问内存单元时,可以再mov指令中只给出单元的偏移地址,段地址默认在DS寄存器中。
寄存器 内存 段寄存器之间可用mov指令互相传递数据
4 CPU提供的栈机制
push ax ---栈操作是以字单位的 高字节先入栈,低字节后入栈
pop bx --低字节先出栈,高自己后出栈。
任意时刻,SS:SP指向栈顶元素,push和pop指令从SS:SP处得到栈顶地址。
CPU只记录栈顶,栈空间的大小需要自己管理;
push ax
1) SP = SP -2;//栈顶从高地址向低地址方向增长
2) mov [SS:SP],ax
pop ax
1)SP=SP+2;
2)mov ax,[SS:SP]
5 push 和 pop
push 寄存器/段寄存器/内存单元
pop 寄存器段寄存器/内存
push和pop实质上是一种内存传送指令。
6 段综述
我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元。
可以用一个段存放数据,将它定义为数据段;
可以用一个段存放代码,将它定义为代码段;
可以用一个段当做栈,将它定义为栈段;
一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么都不是。关键取决于CPU中寄存器的设置,CS IP SS SP DS 的指向
7 Debug的使用
d 段地址:偏移地址 d ds:偏移地址
d ds:0 查看内存中的内容
d cs:0 查看当前代码段中的指令代码
d ss:0 查看当前栈段中的内容;
注意:debug的T命令在执行修改SS的指令时,下一条指令也紧接着被执行。这是由于debug使用T等指令引发中断,中断过程使用当前栈空间存放CPU关键数据,所以你的栈里存放不是你操作的数据。