• CS萌新的汇编学习之路02 Learning of Assembly Language


    第二节课  寄存器

    1. 寄存器的定义: 进行信息储存的器件,是CPU中程序员可以读写的部件,通过改变各种寄存器中的内容来实现对CPU的控制

    2. 寄存器的种类: 本节课学习通用寄存器和段寄存器

        2.1 通用寄存器

    8086CPU中,所有的寄存器都是16位的,可以存放两个字节。AX,BX,CX,DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器。

    8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,AX,BX,CX,DX这四个寄存器都可以分为两个8位的小寄存器来用。8086CPU可以一次性处理字节和字,字节(byte)是8个bit组成;字(word)是由两个字节组成(高位字节和低位字节)

    例如,AX分为AH和AL (高位和低位)AH为高8位,从00H到FFH,AL为低8位,从00H到FFH。两个按照AX=AH*100H+AL组合在一起。但是在对于AL、AH的单独运算中,产生进位是不予考虑的,比如单独对AL做加法,产生的进位不会加到AH里面,AH的进位也不予添加(超出AX范围了)。但是对于AX的计算考虑在AX范围内的进位,超出AX范围不考虑(直接舍去)。

     

        2.2 物理地址和计算物理地址的方法

    CPU访问内存单元,需要给出内存单元的地址,这个唯一的地址为物理地址。

    8086CPU为16位结构的CPU机,意味着运算器一次性最多能处理16位的数据,寄存器的最大宽度为16,寄存器于运算器之间的通路为16位,但是8086CPU地址总线为20 位,达到1M的寻址能力,所以内部采用两个16位地址合成的方法来形成物理地址。

    CPU中的相关部件提供段地址和偏移地址,段地址和偏移地址通过地址加法器进行 物理地址=段地址*10H+偏移地址 的合成方法产生物理地址,通过内部总线将20位物理地址送入输入输出控制电路,再将物理地址送入地址总线,被传送到储存器。

    由于段地址是16进制的,故而只要左移一位加上偏移地址即可。

        2.3 内存分段化和段寄存器

    将内存分段操作,要找的物理地址在段中,以段起始地址/10H为段地址,由于16位地址的寻址能力为64KB,段的大小在64KB(10000H B)内。因此偏移地址为0~FFFFH之间

    例如:有一个数据存放在内存20000H单元中,现在给定段地址为SA,若想用偏移地址选找到此单元,则SA应满足的条件为:最小为1001H,最大为2000H。 解析:由于偏移地址为0~FFFFH之间,故而最大值为(2000H*10H-0H)/10H=2000H;而最小值为(2000H*10H-FFFFH)/10H,但是由于2000H*10H-FFFFH=10001H不为10H的整数倍,所以取进一位的10010H,故而最小值为 10010H/10H=1001H

    段寄存器就是存放段地址的寄存器,8086包括4个:CS,DS,SS,ES

    CS和IP寄存器:CS为代码段寄存器,IP为指令指针寄存器。 8086CPU从以 CS*10H+IP 为地址的内存单元开始当作指令执行(即把CS:IP的指向的内容当作指令)。每次读取一个指令,IP自动加上指令的字数(代码段的长度)作为读取下一个指令的首地址。

    可以修改CS,IP的指令,例如:

    jmp 2AE3:3   执行后,CS=2AE3H,IP=0003H

    jmp ax           执行后,IP会替换成ax储存的内容

    注意!8086CPU加电启动或者复位后(即CPU刚开始工作时),CS和IP被设置为(FFFFH:0000H)所以,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。而且,CPU把CS:IP指向的内存单元内容看作指令。如果内存中的一段信息被CPU执行过的话,它所在的内存单元必定被CS:IP指向过。任意时刻,8086CPU将CS:IP指向的内容当作指令执行。

     

    几个简单的汇编指令:

    mov ax,4e20h    把4e20h加到ax中

    sub ax,4e20h     把ax中的数据减去4e20h

    mov ax,bx          把ax中的数减去bx中的数,并且储存在ax中

     

     

     

     

     

     

     

     

     

      

  • 相关阅读:
    vs里替换的正则表达式引用
    javascript学习
    filter用法(使静态页面和js通过iis的asp.net过滤器)
    表格的交替选择行【jquery中siblings的用法】
    表格的cell固定宽度,当内容达到宽度时换行
    collection模块(具名元组、队列、有序字典、默认值字典)、time 模块、随机模块:random、os模块、sys模块、序列化模块
    继承的用法、属性的查找顺序、组合、新式类与经典类、菱形继承等
    多态、以及常用的关于类的方法(isinstance、issubclass、slots等)运算符重载的实现、上下文管理等
    封装、prorerty装饰器、python实现封装的原理等
    面向对象、类和对象、__dict__方法、__init__方法、对象绑定方法、类绑定方法、对象交互
  • 原文地址:https://www.cnblogs.com/mrorangerabbit/p/9752252.html
Copyright © 2020-2023  润新知