VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 汇编语言 >
  • 【汇编语言】1. 基础知识

1. 计算机系统的硬件组成

  1. 运算器:算数运算和逻辑运算核心
  2. 控制器:发出控制信号,协调工作秩序
  3. 存储器:存放程序和数据
  4. I/O设备:负责输入输出,接受和表示信息

2. Intel 8086 微处理器寄存器组

   学习汇编语言,其实就是学习寄存器的运用!Intel 8086 共 14 个 16 位可编程寄存器。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
寄存器
通用寄存器组
控制寄存器组
段寄存器组
数据寄存器组
指针和变址寄存器组
累加器
基址寄存器
计数寄存器
数据寄存器
AH,AL
BH,BL
CH,CL
DH,DL
堆栈指针寄存器
基址指针寄存器
源变址寄存器
目的变址寄存器
SP
BP
SI
DI
指令指针寄存器
标志寄存器
IP
FLAGS
代码段寄存器
数据段寄存器
堆栈段寄存器
附加段寄存器
CS
DS
SS
ES

数据寄存器组

   既可以作为16位寄存器使用,也可以分为两个8位寄存器使用。这些寄存器既可以作为算数逻辑运算的源操作数,向ALU(算数逻辑单元)提供参与运算的原始数据;也可以作为目标操作数,保存运算的中间结果或最后结果。

指针和变址寄存器组

  1. 指针寄存器:(1)SP 用于在堆栈操作过程中指示堆栈栈顶的偏移地址,称为 堆栈指针 。(2)BP 用来存放位于堆栈段中的一个数据区的“基址”的偏移量,称为 基址指针
  2. 变址寄存器:在串操作指令中,SI 用来存放源操作数地址的偏移量,DI 用来存放目标操作数地址的偏移量

段寄存器组

   这些寄存器指明了一个特定的现行段,用来存放各段的段基址。

  1. CS:存放当前使用的代码段的段基址,用户编写的程序必须存放在代码段中,CPU将会依次从代码段中取出指令代码并执行。
  2. DS:存放当前使用的数据段的段基址,程序运行所需的原始数据以及运算的结果应存放在数据段中。
  3. ES:存放当前使用的附加段的段基址,它通常也用来存放数据。
  4. SS:存放当前使用的 堆栈段 的段基址,所有堆栈操作的数据均存放在这个段中。

指令指针寄存器 IP

   其内容总是指向BIU将要取的下一条指令代码的16位偏移地址。

标志寄存器

   这是最重要的寄存器!它有16位,但只使用了9位。

  • 6位:状态标志位,用来反映算术运算或逻辑运算的结果的状态,CPU自动决定。(OF,SF,ZF,CF,AF,PF)
  • 3位:控制位,用来控制CPU的操作,由人主动决定。(DF,IF,TF)

 

1514131211109876543210××××OFDFIFTFSFZF×AF3PF×CF

 

  • 控制位
  1. DF (方向标志,Direction Flag):设定和控制字符串操作指令的步进方向。DF=1 时串操作过程中的地址自动递减 1,DF=0 时自动递增 1。
  2. IF (中断允许标志,Interrupt Enable Flag):用来控制可屏蔽的中断的标志位。IF=1 ,开中断,CPU可以接收可屏蔽中断请求;IF=0 ,关中断,CPU不能接收可屏蔽中断请求。
  3. TF (单步标志,Trap Flag):用来控制CPU进入单步工作方式。TF=1 时,8086 CPU 处于单步工作方式,每执行完一条指令就自动产生一次内部中断;TF=0 时,CPU不能以单步工作方式工作。主要用于程序调试
  • 状态标志位
  1. OF (溢出标志,OverFlow Flag):表示运算中的溢出情况。OF=1 表示当前正在进行的补码运算有溢出;OF=0 则无溢出。
  2. SF (符号标志,Sign Flag):表示运算结果的正负情况。SF=1 为负;SF=0 为正。
  3. ZF (零标志,Zero Flag):表示当前的运算结果是否为零。ZF=1 为零;ZF=0 则为非零。
  4. AF (辅助进位标志,Auxiliary Carry Flag):表示加法或减法中运算结果中 3位 向 4位 产生进位或借位的情况。AF=1 表示有进位借位;AF=0 表示无进位借位。
  5. PF (奇偶校验标志,Patity Flag):表示本次运算结果中包含“1”的个数。PF=1 则表示有偶数个“1”;PF=0 则表示有奇数个“1”。
  6. CF (进位标志,Carry Flag):表示本次加法或减法运算中 最高位 产生进位或借位的情况。CF=1 表示有进位或借位;CF=0 表示无进位或借位。

3. 存储方式

   8086 CPU 的地址总线有20根,可以直接寻址 220=1 MB 的存储器空间。然而它的寄存器只有 16位 ,只能直接寻址 $ 2{16}=26×2^{10}=64\ KB​ $ 的空间。为了以小寻大,采用 存储器地址分段的方法

  这个方法的核心是间存储器的地址分段,段基址用16位表示,然后用两个寄存器指明在哪一段和段内的哪一部分,即可完成寻址,逻辑地址={段基址:段偏移地址}

 

=×10H+

 

 

(1)=0000 0000 0000 0000(2)×10H=0000 0000 0000 0000 0000

 

 

(3)×10H+=0000 0000 0000 0000 0000(4)+         0000 0000 0000 0000(5)

 

举个例子,现已知一个逻辑地址为 {B21H : 4567 H},现在将其转换为物理地址:

 

(6)=B21H=0000 1011 0010 0001(7)×10H=0000 1011 0010 0001 0000=B210H(8)=4567H=0100 0101 0110 0111

 

 

(9)×10H+= 0000 1011 0010 0001 0000(10)+          0100 0101 0110 0111(11)(12)= 0000 1111 0111 0111 0111(13)= F777H

 

4. 进制转换

  计算机只认识二进制的语言,但要人类去读二进制则显得冗长,故而一般将二进制转换为十六进制来进行阅读。转换的一般途径如下:

 
 
 
 
 
 
十进制
二进制
十六进制
八进制

4.1. 十进制——>二进制

  十进制转换为二进制主要使用取余法。比如求十进制数125的二进制数:

 

12562311573101011111125dec=(111 1101)bin

 

再比如求十进制数837的二进制数:

 

83741820910452261363101010001011837dec=(11 0100 0101)bin

 

4.2. 二进制——>十进制

  二进制转十进制就是一个加权求和的过程,比如将 (111 1101)bin 转为十进制:

 

262524232221201111101(14)DEC=1×26+1×25+1×24+1×23+1×22+0×21+1×20(15)=1×64+1×32+1×16+1×8 +1×4  +0×2  +1×1(16)=(125)dec

 

4.3. 二进制与八进制和十六进制的互相转换

  二进制与八进制和十六进制的转换非常简单,4位二进制对应1位十六进制,3位二进制对应1位八进制。

 

|00000|000000011|100100102|201000113|301101004|410001015|510101106|611001117|711110008|10019|1010A|1011B|1100C|1101D|1110E|1111F|

 

比如将 (111 1101)bin 转换为 十六进制 则为 (7D)HEX,转换为八进制则为 (175)oct


原文:https://www.cnblogs.com/yznnnn/p/10546237.html


相关教程