【汇编语言】第2章 寄存器

通用寄存器

通用寄存器:AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被成为通用寄存器。

8086CPU的上一代寄存器都是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位寄存器中

字:记为word,一个字由两个字节组成

 几条汇编指令

 8086CPU给出物理地址的方法

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

当8086CPU要读写内存时

  1. CPU中的相关不见提供两个16位地址,一个成为段地址,另一个成为偏移地址
  2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
  3. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路
  4. 输入输出控制电路将20位物理地址送上地址总线
  5. 20位物理地址被地址总线传送到存储器

地址加法器采用物理地址 = 段地址*16+偏移地址的方法用短地址和偏移地址合成物理地址

 注意,内存并没有分段,段的划分来自于CPU。

 段寄存器

段地址在8086CPU的段寄存器中存放

8086CPU有4个段寄存器:CS、DS、SS、ES

在8086 CPU 加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS = FFFFH, IP = 0000H,即在8086PC刚启动时,CPU从内存FFFF0H单元中读取指令

修改CS、IP的指令

不能用mov设置CS、IP的值

jmp 2AE3:3, 执行后:CS = 2AE3H, IP = 0003H, CPU将从2AE33H处读取指令。

jmp 3:0B16, 执行后:CS = 0003H, IP = 0B16H, CPU将从00B46H处读取指令

若想仅修改IP的内容

jmp ax, 指令执行前:ax = 1000H,CS = 2000H,IP = 0003H

    执行指令后:ax  = 1000H, CS = 2000H, IP= 1000H

“jmp 某一合法寄存器” 指令的功能为:用寄存器中的值修改IP

查看、修改cpu中寄存器的内容:R命令

若要修改一个寄存器中的值,比如AX中的值,可用R命令后加寄存器名来进行,输入“r ax”后按Enter键,将出现“:”作为输入提示

若想看下修改后的结果,可在用R命令查看

用debug的D命令查看内存中的内容

如果我们想知道内存10000H中的内容,可用“d 段地址::偏移地址”的格式来查看

修改内存中的内容:E命令(可以写入数据、指令,在内存中,它们实际上没有区别)

 

 将内存中的内容解释为机器指令和对应的汇编指令:U命令

 执行CS:IP指向的内存单元处的指令:T命令

 以汇编指令的形式向内存中写入指令:A命令

原文地址:https://www.cnblogs.com/hulian425/p/13891286.html