• 【汇编语言】第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命令

  • 相关阅读:
    Qt编写安防视频监控系统1-通道切换
    Qt编写数据可视化大屏界面电子看板12-数据库采集
    Serv-U
    CLAAS KGaA mbH
    法国雷诺
    Bulma
    react技术栈
    小程序开发
    上海hande
    30个极大提高开发效率的VSCode插件
  • 原文地址:https://www.cnblogs.com/hulian425/p/13891286.html
Copyright © 2020-2023  润新知