zoukankan      html  css  js  c++  java
  • 汇编笔记_第二章


    title: 汇编笔记_第二章
    date: 2018-12-25 14:39:23
    tags:

    • 笔记
      categories:
    • 汇编语言

    寄存器

    8086寄存器组

    一共14个寄存器

    • 数据寄存器:AX , BX , CX , DX;
    • 段寄存器:CS , DS , ES , SS;
    • 地址寄存器:SI , DI , SP , BP;
    • 控制寄存器: IP , PSW(FLAGS)

    通用寄存器

    • 所有的寄存器都是16位的,可以存放两个字节;
    • AX , BX , CX , DX通常用来存放一般数据,被称为通用寄存器;
    • 一个16位寄存器所能存储的数据最大值为: (2^{16} - 1);

    段寄存器

    • 段寄存器就是提供段地址的,访问内存时,有着4个段寄存器提供内存单元的段地址;
    • 4个段寄存器:CS , DS , SS , ES;

    内存地址的分配

    物理地址的形成

    • 8086有 20位 地址总线,可以传送20位地址,寻址能力为1M
    • 8086内部为16位结构,地址16位;
    • 存储器采用 分段管理,将存储器划分位若干 逻辑段,每段最大64K字节单元,最小16B;
    • 逻辑段的大小可变;
    • 内存单元地址的描述: 段基址:偏移量
    • 地址加法器合成物理地址的方法: 物理地址=段地址*16 + 偏移地址
    • 在存储器中,每16个字节单元为一小段;
    • 例如:某内存单元的地址为1234:5678H,则物理地址为 (12340H + 5678H = 179B8H);
    • CPU可以用不同的段地址和偏移地址形成同一个物理地址;

    段的类型

    • 逻辑段有四种类型: 代码段数据段附加段堆栈段
    段名 段寄存器 偏移地址
    代码段 CS IP
    数据段 DS BX,SI,DI等地址寄存器
    附加段 ES BX,SI,DI等地址寄存器
    堆栈段 SS SP或BP
    • 例题:给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 00010H1000FH;

    解:物理地址=SA*16+EA

    EA变化范围为0H~FFFFH

    所以物理地址的变化范围为:((0001H*16 + 0H)~(0001H*16 + FFFFH));

    就是00010H~1000FH;

    • 例题:有一数据存放在内存20000H单元中,现给定段地址SA,若想用偏移地址寻找到此单元,SA满足的条件是:最小是1001H,最大为2000H;

    解;

    [mathrm{ 20000H=SA*16+EA }]

    [mathrm{ SA = (20000H - EA)/16 }]

    [mathrm{ SA = 2000H - EA/16 }]

    [mathrm{ EAin[0000H , FFFFH] }]

    [mathrm{ SAin[1001H , 2000H] }]

    特殊寄存器CS和IP

    • CS为 代码段寄存器
    • IP为 指令指针寄存器
    • CPU将CS:IP指向的内存单元中的内容看作指令
    • 8086pc工作过程:1、从CS:IP指向的内存的单元读取指令,读取的指令进入指令缓冲器;2、IP=IP+所读取的指令的长度,从而指向下一条指令;3、执行指令,转到步骤1;
    • 加电启动或复位后CS=FFFFH , IP=0000H
    • 修改CS,IP的值:
    • jmp 段地址:偏移地址//同时修改CS、IP,
      jmp 寄存器//用寄存器中的值修改IP

    外部设备及IO地址空间

    • 每个外部设备的接口都有一组寄存器,每个寄存器都有一个端口地址;
    • 8086提供的IO地址总线宽度总是16位的,所以允许的最大的IO寻址空间位64KB,寻址范围为0000H~FFFFH;
    • pc机中,由于IO地址空间是独立编址的,所以系统需要提供独立的 访问外设指令(IO指令):IN,OUT

    指令的寻址方式

    操作数的物理地址=段地址*10H + EA

    立即寻址方式

    mov al,5

    mov ax,3060H

    寄存器寻址方式

    mov ax,bx

    直接寻址方式

    存储器读操作

    mov ax,ds:[2000H]

    存储器写操作

    mov ds:[4000H],ax

    符号地址

    mov ax,[value]

    段超越

    mov ax,es:[value]

    间接寻址方式

    mov ax,[bx]

    (操作数的物理地址=(ds)*10H + {(bx) , (si) , (di)};)

    (操作数的物理地址=(ss)*10H + (bp);)

    四个间接寻址寄存器:BX , BP , SI , DI;

    mov ax,[bx]

    指令执行前:

    (DS = 1500H)

    (BX = 4580H)

    (AX = 1010H)

    (19580H = 64H)

    (19581H = 23H)

    (EA = BX = 4580H)

    指令执行后:

    (AX = 2364H)

    寄存器相对寻址方式

    mov AX,TOP[SI]

    指令执行前;

    (DS =1500H)

    (SI = 7310H)

    (AX = 1010H)

    (TOP = 25H)

    (1C335H = 28H)

    (1C336H = 24H)

    (EA = TOP + SI = 7335H)

    指令执行后;

    (AX = 2428H)

    基址变址寻址方式

    mov AX,[BX + DI]

    执行前:

    (DS = 2100H)

    (BX = 0158H)

    (DI = 10A5H)

    (AX = 0FFFFH)

    (221FDH = 34H)

    (221FE - 12H)

    有效地址:

    (EA=BX+DI=0158+10A5=11FDH)

    (物理地址=21000 + 11FD = 221FDH)

    执行后:

    (AX=1234H)

    相对基址变址寻址方式

    mov AX,MASJ[BX[SI]

    mov AX,[MASK + BX + SI]

    mov AX,[BX + SI].MASK

    有效地址:

    (EA = MASK + BX + SI)

    (物理地址=DS + EA)

    看不懂233,,,,,

    (end)

  • 相关阅读:
    对象的创建
    Java运行时数据区域
    Java内存模型
    LinkedList小练习及相关算法
    面试题之矩阵与转置矩阵相乘
    快速排序
    垃圾收集器
    java垃圾收集相关问题
    Win7下安装Centos7双系统出错:No valid bootloader target device found.
    Scanner类的方法
  • 原文地址:https://www.cnblogs.com/31415926535x/p/10175441.html
Copyright © 2011-2022 走看看