码迷,mamicode.com
首页 > 其他好文 > 详细

第三章

时间:2018-12-16 23:22:52      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:不能   技术分享   数据   覆盖   修改   偏移地址   第三章   直接   img   

内存中字的存储

字单元,即存放一个字形数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节,取低地址内存单元地址作为字数据地址。我们将起始地址为N的字单元简称为N地址字单元。

 

DS和[address]

“[...]”表示一个内存单元,“[...]”中的0表示内存单元的偏移地址。8086CPU自动取ds中的数据为内存单元的段地址。8086CPU不支持将数据直接送入段寄存器的操作,只能用一个寄存器来进行中转,即先将1000H送入一个一般的寄存器,如bx,再将bx中的内容送入ds。

 

mov、add、sub指令

技术分享图片

技术分享图片

技术分享图片

 

 

 

add、sub指令的操作数不能是段寄存器

 常数作第二个操作数时,如果是最高位是16进制的a~f前面要加0,如mov ax,0a400h

 在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应

CPU提供的栈机制

后进先出的操作规则

push  ax表示将寄存器ax中的数据送入栈中,pop   ax表示从栈顶取出数据送入ax。8086CPU的入栈和出栈操作都是以字为单位进行的。

8086CPU中,有两寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。

出栈后,SS:SP指向新的栈顶,但pop操作前的栈顶元素依然存在,但是它以不在栈中,当再次执行push等入栈指令后,它将被新的数据覆盖。

Push、Pop指令

执行push时,CPU的两步操作是:先改变SP,后向SS:SP处传送。执行pop时,CPU的两步操作是:先读取SS:SP处的数据,后改变SP。

操作对象不能是常数

栈顶的变化范围最大为0~FFFFH在D、E、U、A命令中可使用段寄存器,如-d cs:0(查看当前代码段中的指令代码)-d ss:0(查看当前栈段中的内容)

debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行

第三章

标签:不能   技术分享   数据   覆盖   修改   偏移地址   第三章   直接   img   

原文地址:https://www.cnblogs.com/g56355/p/10127946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!