汇编语言程序设计 第2章概念梳理

时间:2022-04-22 00:52:11

汇编语言程序设计

第2章概念梳理

8086 14个寄存器:

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


通用寄存器:

  1. AX,BX,CX,DX通常用于存放一般性数据 称为通用寄存器
  2. 一般存储的数据范围为0 ~ 2^16-1
  3. 且为了与早期CPU操作兼容,这4个寄存器均可拆分成2个8位寄存器单独使用

       {
             AX分为AH和AL
            BX分为BH和BL
            CX分为CH和CL
            DX分为DH和DL
       }
           字的高8位 存放于通用寄存器的高八位寄存器即AH
           字的低8位 存放于通用寄存器的低八位寄存器即AL

           寄存器基本操作指令:
           mov ax,18
           add ax,8

           应注意两个操作对象的位数应当一致,如类似
           {
               mov ax,bl
               mov bh,ax
           }
         指令是不正确的

         超出位数的情形{

          

       8226 H
+      8226 H
      —————————
      1044CH


;最终结果为044CH,1由于进位被舍弃

 

 
         }

8086表示物理地址的解决途径:
寄存器都是16位,而物理地址都是20位
可以使用两个16位地址合成一个20位的物理地址的表达方式
例如:
123CH*16+0008H = 123C8H
1230H*16+00C8H = 123C8H

归纳:
基础地址(又称段地址)+偏移地址 = 物理地址
在8086CPU当中,通过段地址:偏移地址来间接描述内存单元的物理地址,故CPU根据如下公式得到物理地址:
物理地址 = 段地址 * 16 + 偏移地址

其中:
[段地址:偏移地址] 也称 [逻辑地址]
在写法上 地址通常使用十六进制表示,表示十六进制的H在[段地址:偏移地址]中可省略不写。

CS和IP寄存器
CS:代码段段寄存器,用于存放代码段的[段地址]
IP:指令指针寄存器,用于存放CPU将要读取的指令在代码段中的偏移地址
即CPU 通过这个公式读取将要执行的指令:
(CS)*16 +(IP)=指令的物理地址

计算机工作过程:
第一步:CPU基于CS:IP,计算出物理地址,然后到相应的内存单元
第二步:CPU自动修改IP的值,IP=IP+所读取指令的长度,从而为下一条指令读取做好准备
第三步:执行指令。转第1步,重复此过程

修改CS和IP的指令jmp
同时修改CS、IP的内容,即jmp 段地址:偏移地址
用指令中给出的段地址修改CS,偏移地址修改IP
示例:
汇编语言程序设计 第2章概念梳理
只修改IP的内容:
jmp 某一合法寄存器
例如:
jmp ax,ip<--ax