汇编语言第三版 第二章 寄存器
2016-06-15 22:26
225 查看
问题1.8086CPU的地址总线为20bit,而数据总线为16bit--也就是说每次传输的数据为16bit,那么如何使用16bit的数据总线来实现20bit的地址总线的地址传输?
答:8086CPU使用两个16bit的地址合成一个20bit的物理地址.
16bit A: XXXX
16bit B: XXXX
20bit物理地址的合成
A *16 也就是将A(16进制表示的数值),向左移动一位,然后加上B。A * 16 + B。物理地址 = 段地址 * 16 + 偏移地址
16bit A: XXXX 左移一位
20bit A‘: XXXX0 相加B
16bit B: XXXX
在8086CPU中扮演保存段地址和偏移地址寄存器为CS和IP。在CPU内部使用地址加法器 实现两个地址的逻辑加法。
问题2:CS和IP是如何变化的?
在CPU获取下一条指令的时候,首先在CS:IP指定的内存中读取指令,然后将指令放入【指令缓冲器】中,然后IP=IP+读取指令的长度。
1). 自动变化。在读取一条指令的时候,IP就会发生变化,IP=IP+读取指令的长度。
2). 程序改变。jmp 段地址:偏移地址。jmp 1000:100 执行该条命令之后,cs=1000,ip=100。如果仅仅修改ip的数值,可以使用寄存器的数值,来改变ip。
jmp ax,执行完毕之后,cs不变,ip = ax,等价于 jmp ip,ax;
问题3:什么是段?
在8086中允许用户将N(N<=64KB)的一组代码,存在一组地址连续、起始地址为16的整数倍的内存空间中。
答:8086CPU使用两个16bit的地址合成一个20bit的物理地址.
16bit A: XXXX
16bit B: XXXX
20bit物理地址的合成
A *16 也就是将A(16进制表示的数值),向左移动一位,然后加上B。A * 16 + B。物理地址 = 段地址 * 16 + 偏移地址
16bit A: XXXX 左移一位
20bit A‘: XXXX0 相加B
16bit B: XXXX
在8086CPU中扮演保存段地址和偏移地址寄存器为CS和IP。在CPU内部使用地址加法器 实现两个地址的逻辑加法。
问题2:CS和IP是如何变化的?
在CPU获取下一条指令的时候,首先在CS:IP指定的内存中读取指令,然后将指令放入【指令缓冲器】中,然后IP=IP+读取指令的长度。
1). 自动变化。在读取一条指令的时候,IP就会发生变化,IP=IP+读取指令的长度。
2). 程序改变。jmp 段地址:偏移地址。jmp 1000:100 执行该条命令之后,cs=1000,ip=100。如果仅仅修改ip的数值,可以使用寄存器的数值,来改变ip。
jmp ax,执行完毕之后,cs不变,ip = ax,等价于 jmp ip,ax;
问题3:什么是段?
在8086中允许用户将N(N<=64KB)的一组代码,存在一组地址连续、起始地址为16的整数倍的内存空间中。
相关文章推荐
- Java EE之Servlet技术
- Program4_B
- 【LeetCode】347. Top K Frequent Elements
- 25、DOM的高级应用2-------表格内容的排序
- PAT
- bootstrap实现嵌入的button
- Android中软键盘常见的问题
- 工作几年的感悟
- JAVA学习随笔(2)--Integer类
- html5 canvas绘制矩形和圆形
- 软件工程-课程总结
- Ubuntu 16.04 Sublime Text3安装/激活/解决中文输入/常用插件
- 泛型 <T> 继承
- 千牛
- leetcode Count Numbers with Unique Digits
- HDU2072 单词数(解法二)
- 设计模式-6-建造者
- 20145313张雪纯课程总结
- MobaXterm 全能型开源远程终端
- 简易php博客(2)_前台