码迷,mamicode.com
首页 > 编程语言 > 详细

汇编语言第二章总结

时间:2018-10-14 21:00:32      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:修改ip   bit   连续   长度   指令   定位   相对   程序   实现   

补充知识:一个典型的CPU由运算器、控制器、寄存器等器件构成;而对于汇编语言,CPU中的主要部件是寄存器。程序员用指令读写寄存器来实现对CPU的控制。本章研究的是8086CPU

2.1-2.3 寄存器

  8086CPU的寄存器都是16位的,可以存放两个字节。其中,用来存放一般性的数据,被称为通用寄存器,它们为AX, BX, CX, DX。

  由于8086CPU上一代的CPU的寄存器都是8位的,为了保证兼容,使原来基于上一代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX, BX, CX, DX,都可以分为两个可独立使用的8位寄存器来用:AX可分为AH和AL;

  BX可分为BH和BL;

  CX可分为CH和CL;

  DX可分为DH和DL;

  字节:byte,一个字节由8个bit组成,可以存在在8位寄存器中;

  字:两个字节,分别称为高位字节和低位字节

汇编指令

  mov 和add

  mov a, b 指把a=b;a通常是寄存器,如:mov ax,18指将18送入寄存器ax

  add  a, b指a=a+b;   a通常是寄存器,如:add ax,18指将寄存器ax的数值加上18

注意:

  由于通用寄存器只能存储16位的数据,所以如果将一个大于16位的数据放入寄存器就会损失最高位;

  使用add,mov指令时,只能对相同类型的寄存器操作,即只能ax,bx,cx,dx之间操作不能,ax,ah等之间操作。

2.4-2.8 物理地址的存储方式

  首先,我们要知道,所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元都有唯一的地址,我们将这个唯一的地址称为物理地址。

  我们所研究的8086CPU它的寄存器都是16位的,但是它的地址总线有20根,即它能访问的内存地址1MB,但CPU一次性处理,传输,暂时存储的地址为16位的地址。

  所以,8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

  即物理地址=段地址*16+偏移地址。可写成段地址:偏移地址

  物理地址=段地址*16+偏移地址的本质含义:CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

  段地址的概念:段并不是指内存是分段的,段的划分来自于CPU,是因为8086CPU用“物理地址=段地址*16+偏移地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。以后,在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。一个段的长度最大为64KB。

2.9-2.12  CS和IP

8086CPU在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。段地址在CS寄存器中存储,偏移地址在IP寄存器中存储。

CS*16+IP即指令的物理地址

计算机的工作过程是:取指令、分析指令、执行指令。

  第一步:CPU基于CS:IP,计算出物理笛子,然后到相应的内存单元读取指令,送到指令缓冲区

  第二部:CPU自动修改IP的值,IP=IP+所读取指令的长度,从而为下一条指令读取做准备;

  第三步:执行指令。转第一步,重复此过程。

如何修改CS:IP的值?

  有一个jmp指令

  若同时修改CS、IP的内容:jmp 段地址:偏移地址;

  若仅修改IP:jmp 某一合法寄存器   用寄存器中的值修改IP

 

 

  

 

汇编语言第二章总结

标签:修改ip   bit   连续   长度   指令   定位   相对   程序   实现   

原文地址:https://www.cnblogs.com/LANBABA/p/9787233.html

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