博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言 第二单元 整理
阅读量:5219 次
发布时间:2019-06-14

本文共 1714 字,大约阅读时间需要 5 分钟。

(以下内容以8086CPU、intel系列为根据处理)

寄存器基础知识

8086CPU、intel系列:

16位微处理器;20位地址总线;14个16位寄存器:

通用寄存器:AX(Accumulator Register)、BX(Base Register)、CX(Count Register)、DX(Data Register)

基址和变址寄存器:SI、DI、BP、SP

段寄存器:CS、SS、DS、ES

指令指针和标志寄存器:IP、FLAGS

 

  • 理解16位结构(16位机):CPU中的运算器一次最多处理16位数据

  引入概念:字长(CPU在单位时间内一次处理的二进制位数,反映CPU内部运算速度)

  • 理解20位地址总线:CPU通过地址总线能访问220个内存单元

  引入概念:位宽(CPU通过外部数据总线与内存之间一次能传输的数据位)

 

ISA(指令集体系结构):指令、指令的字节集编码——软件和硬件之间接口

  • 不同处理器系列有不同的ISA,同一系列里也有不同类型的处理器,但它们在ISA级别上都保持兼容

 

不同类型CPU差异:

处理的字长、速度不同;工作模式不同;指令集的丰富程度不同

 

*十六进制数据加后缀H,二进制数据加后缀B

*一条汇编指令或寄存器名称不区分大小写

 

1.通用寄存器

一个CPU有多个寄存器,用来存放16位一般性数据。

以AX为例:

 

                                                                                                                                                                             

          AH (存放高8位字节)                 AL(存放低8位字节)

 

(为了与早期兼容,AX可拆分成两个独立的寄存器AH、AL来使用)

AX中存放无符号数据范围:0 —— 216-1

AH、AL中存放无符号数据范围:0 —— 28-1

 

2.汇编指令(mov、add、sub、jmp)

mov:传送指令    mov a,b:将b放入a中

常用:

mov 寄存器,数据

mov 寄存器,寄存器

 

add:求和指令    add a,b:a与b相加

常用:

add 寄存器,数据

add 寄存器,寄存器

 

sub:减法指令    sub a,b:a减去b

常用:

 

sub 寄存器,数据

sub 寄存器,寄存器

 

jmp:转移指令    修改CS、IP寄存器(不可以用mov实现)

常用:

jmp 段寄存器:偏移地址    (修改CS:IP)

jmp 寄存器    (用寄存器内容修改IP)

 

注意:1.mov、add操作中,两个操作对象位数应一致

      2.对应的位数进行操作,超出的位数需舍弃(特别注意AH、AL寄存器)

3.物理地址的表示方法

问题起源:16位的CPU寄存器无法表示20位的地址总线所包括的所有内存单元

解决:用两个16位地址合成一个20位的物理地址

引入概念:段(根据需要,将地址连续、起始位置为16倍数的一组内存单元--不超过216B,即64KB)

 

e.g      20404H = 2000H * 16 + 0404H

      物理地址 =  段地址 * 16 + 偏移地址

  • 该过程由CPU内部的地址加法器实现
  • 通常用 段地址:偏移地址 来表示内存单元的物理地址,该表示方法又称逻辑地址
  • 段地址又称基础地址
  • 段地址 * 16 构成段的物理起始地址
  • 一个内存单元可以有很多个逻辑地址,但只有一个物理地址
  • 地址通常由十六进制表示,H可省略不写

4.CS、IP

问题:计算机如何识别哪些信息是指令,哪些信息是数据?

解决:用特殊寄存器进行标志,存放在特殊寄存器内的就是指令,其他为数据

引入概念:

8086最关键的寄存器:

CS(代码段寄存器:存放段地址)、

IP(指令指针寄存器:存放偏移地址)

作用:CPU将CS:IP对应的物理地址中的信息当作指令执行

 

5.8086CPU的工作过程

 

 

1.从CS:IP指向的内存单元读取指令,并将指令放入指令缓冲器

2.IP =  IP + 所取指令的长度,从而指向下一条指令

3.执行指令,跳回1,重复此过程

 

最初的CS、IP:

CPU刚开始工作时,CS=FFFFH,IP=0000H

即CPU刚启动时,从物理地址为FFFF0H的单元读取开机后执行的第一条指令

 

提问:计算机遇到什么指令停止循环,结束取指令呢?

 

转载于:https://www.cnblogs.com/cjh-1023/p/9769343.html

你可能感兴趣的文章
第三次作业 105032014021
查看>>
记录一些容易忘记的属性 -- UILabel
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>
人脸识别FaceNet+TensorFlow
查看>>
STL之map UVa156
查看>>
从Angular.JS菜鸟到专家
查看>>
再谈Vmware NAT的配置和路由流程
查看>>
javaScript数组去重方法汇总
查看>>
评价意见整合
查看>>
MySQL表的四种分区类型
查看>>
C++变量的“总分性”(Mereology)
查看>>
应用软件学习心得之mapgis功能学习
查看>>
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
JS之放大镜效果
查看>>
基于UML网络教学管理平台模型的搭建
查看>>
不同的色深条件(8、16、24、32),像素绘制方式
查看>>
二分法原理
查看>>
push指令的执行过程
查看>>
陌生的熟悉地
查看>>