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

第二章总结

时间:2018-10-20 16:16:21      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:nbsp   转移   必须   代码   call   线性   line   十六进制   段地址   

第二章总结

18086CPU概述

8086Intel系列中16位微处理器,地址总线20位。

80861416位寄存器:AX, BX, CX, DX(通用寄存器)SI, DI, BP, SP(基址和变址寄存器)CS, SS, DS, ES(段寄存器)IP,PSW(指令指针和标志寄存器)

( 汇编语言中不区分大小写)

 

2、通用寄存器(用于存放一般性数据,每个寄存器均为16位)

技术分享图片

 

通用寄存器AX,BX,CX,DX均可拆成两个8位寄存器(以AX为例,低8位寄存器为AL,高8位为AH)单独使用。

 

3、字在寄存器中的存放

  字节:内存划分的基本单位(Byte),一个字节由8bit位组成。

   :两个字节组成,分别为字的高位字节和低位字节

 技术分享图片

任何数据到了计算机里都是由二进制数存放的。以AX为例可以存16位二进制数,每四位二进制数对应一个十六位进制数

十进制数据:       20000  AX

对应的二进制:    100  1110  0010  0000 B

对应的十六进制: 4E20 H(其中AL=4EH,AL=20H)

 

4、汇编指令

  Mov指令中有两个操作数,作用是将后面的操作数赋给前面的操作数。

  Add指令中有两个操作数,作用是将前后的操作数相加,赋给前面的操作数。

技术分享图片 

  **注:(1)在movadd指令中,两个操作对象的位数应一致。

(若是位数不一致会怎样呢?)

2)运算时超出寄存器表示的位数时,超出的进位值丢失,但这里的丢失并不是真正的丢失,而是记录在一个特殊的寄存器的某一位上。8086CPU就用flagCF位来记录这个进位值。

技术分享图片

 

3ALAH各自作为独立的寄存器使用

 

技术分享图片 

5、内存单元的物理地址(段地址*16+偏移地址=物理地址

CPU访问内存单元时要给出内存单元的地址。

所有的内存单元构成的存储空间是一个一维的线性空间。每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。

8086内部的寄存器都是16位的,而外部地址总线宽度为20位。故无法直接用寄存器表示20位的物理地址。

其中,段地址*16可以理解为一个段的起始物理地址。

「段」是8086为解决用16位寄存器表示20位的物理地址而引入的一个逻辑上的概念。

可以根据需要,将地址连续、起始物理地址为16倍数的一组内存单元(不超过64KB)当作一个「段」使用。(不超过64KB是因为寄存器都是16位的,偏移地址只能表示四位十六进制数)

**说明:

18086中,通过段地址: 偏移地址来间接描述内存单元的物理地址。CPU根据如下公式计算得到物理地址:段地址*16+偏移地址=物理地址

2)「段地址: 偏移地址」  也称「逻辑地址」

3)「段地址 × 16 」 构成段的起始物理地址,故根据需要划分段使用时,段的起始物理地址必须是16的倍数。

4)在写法上,地址通常用十六进制表示。表示十六进制的H在「段地址: 偏移地址」中可省略不写。

 

6CSIP

  CS: 代码段段寄存器,用于存放代码段的「段地址」

IP:  指令指针寄存器,用于存放CPU将要读取的指令在代码段中的偏移地址。

 

**计算机工作过程

1: CPU基于CS:IP,计算出物理地址,然后到相应的内存单元读取指令,送到指令缓冲区。

2: CPU自动修改IP的值,IP = IP + 所读取指令的长度,从而为下一条指令读取做准备;(IP中存的是下一条指令的偏移地址)

3: 执行指令。 转第1步,重复此过程。

技术分享图片 

  **注:

           CPU从何处执行指令是由CSIP中的内容决定的。

           程序员可以通过改变CSIP中的内容来控制CPU执行目标指令。

           IPCS值的修改不能通过mov指令实现,需借助转移指令 (jmp, call)

 

 

同时修改CSIP的内容:

jmp 2AE3:3        ; CS 2AE3H

IP  3H

 

只修改IP的内容:

jmp AX          ;  IP AX

 

 

7、数据段和代码段

代码段指的是长度为小于64kb的、地址连续、起始地址为16(十进制)的倍数的内存单元当作专门存放代码的,数据段指的是长度小于64kb的、地址连续、起始地址为16(十进制)的倍数的内存单元当作专门存储数据的内存空间。

**为什么代码和数据要分开存放成代码段和数据段

因为当cs:ip可以触及到存放数据的内存单元时,CPU会将数据当作代码执行)

 

第二章总结

标签:nbsp   转移   必须   代码   call   线性   line   十六进制   段地址   

原文地址:https://www.cnblogs.com/xyl744188/p/9821649.html

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