精华内容
下载资源
问答
  • 寄存器可以分为两大类,一类为通用寄存器,一类为指针寄存器和变址寄存器。 通用寄存器 通用寄存器主要包括:EAX、EBX、ECX、EDX EAX Accumulator 累加器,其中EAX(32位)、AH(16位)、AX,AL(8位) 累加...

     

    寄存器可以分为两大类,一类为通用寄存器,一类为指针寄存器和变址寄存器。

     

    通用寄存器

    通用寄存器主要包括:EAX、EBX、ECX、EDX

    EAX

    Accumulator 累加器,其中EAX(32位)、AH(16位)、AX,AL(8位)

    累加器用作乘除法时由特殊用途,但通常情况下视为通用寄存器

    EBX

    Base 基址寄存器,其中EBX(32位)、BH(16位)、BX,BL(8位)

    基址寄存器用作存放访问存储单元的偏移地址

    ECX

    Count 计数器,其中ECX(32位)、CH(16位)、CX,CL(8位)

     

    CL用于移位和循环移位计数,CX用作重复的串操作指令计数,CX或ECX用作LOOP/LOOPD计数

    EDX

    Data 数据寄存器,其中EDX(32位)、DH(16位)、DX,DL(8位)

    数据寄存器是一个用用寄存器,在乘除法运算时也可用于记录部分积和部分被除数

     

    指针寄存器和变址寄存器

    指针寄存器和变址寄存器包括:ESP、EBP、ESI、EDI

    ESP

    Stack Pointer 堆栈指针寄存器,该指针用于存储堆栈存储器数据

    EBP

    Base Pointer 基址指针寄存器,该指针用于存放堆栈段的数据区的“基地址”

    ESI

    Source Index 源变址指针寄存器,用于寻址串操作指令的源数据串

    EDI

    Destination Index 目的变址指针寄存器,该指针用于寻址串操作指令的目的数据串

    EPI

    Instruction Pointer 指令指针寄存器,一种专用寄存器,用于寻址当前需要取出的指令字节

    Tip:需要注意的是,程序员不能对EIP/IP进行存取操作,程序中的转移指令、返回指令和中断处理能够对EIP/IP进行存取

     

    标志寄存器

    9个标志位中,6个状态标志位(CF、PF、AF、ZF、SF、OF),3个控制标志位(TF、IF、DF)

    状态标志位

    CF:进位标志(Carry flag)。执行算数运算时,结果的最高位有进位或者借位,则CF=1;否则CF=0。

    PF:奇偶标志(ParityFlag)。结果的低8位,有奇数个“1”,则PF=0;有偶数个“1”,则PF=1。

    AF:半进位标志(Auxiliary carry Flag,也称为半进位标志)。本次运算第四位有进位,则AF=1;否则AF=0。

    ZF:零标志位(Zero Flag)。结果为0,则ZF=1;否则ZF=0。

    SF:符号标志(Sign Flag)。结果为正,则SF=0;否则SF=1。

    OF:溢出标志(OverFlow Flag)。结果溢出,则OF=1;否则OF=0。

     

    溢出不一定有进位,有进位也不一定溢出。

    例如:

    CF=0  PF=0  AF=0  ZF=0  SF=1  OF=1

    溢出判断:两个有符号数,符号位相同,运算结果的符号位与他们不同,则溢出,OF=1

     

    方向标志位

    方向标志DF(Direction Flag)

    DF用于控制串操作指令的执行。

    DF=0,则串操作指令地址自动增量修改。传输的传送过程从低地址向高地址的方向进行;

    DF=0,则串操作指令地址自动减量修改,传数据的传送过程从高地址向低地址的方向进行。

     

     

     

    设置DF的方法:STD(DF置一),CLD(DF置零)

    中断标志IF(Interrupt Flag)

    IF用来控制对可屏蔽中断的响应。

    IF=1,则允许CPU响应可屏蔽中断请求;

    IF=0,则禁止CPU响应可屏蔽中断请求。

    STI(IF置一),CLI(IF置零)。

    IF只能控制CPU是否能够响应可屏蔽中断请求,而对不可屏蔽中断及内部中断无法控制.

    陷阱标志TF(Trap Flag)

    TF=1,微处理器单步工作;

    TF=0,微处理器正常工作。

     

     

     

     

    转载于:https://www.cnblogs.com/Rebel3/p/11508867.html

    展开全文
  • 8086通用指令及寄存器

    千次阅读 2018-10-16 22:15:49
    8086寄存器 8086 有14个16位寄存器,这14个寄存器按其用途...顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很的影响。 通用寄存器的数据寄存器个字...

    8086寄存器

    8086 有14个16位寄存器,这14个寄存器按其用途可分为

    (1)通用寄存器
    
    (2)指令指针
    
    (3)标志寄存器
    
    (4)段寄存器等4类。
    

    有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个)。

    顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。

    通用寄存器的数据寄存器是两个字节,以AX为例,分为高8位(AH)低8位(AL)

    基础汇编指令

    add al,1(如果ax=00FFH,那么ax会等于=0000H,进位标志CF变为1)al的值加1赋给al
    sub al,1 al的值减1赋给al
    mov ax,[1000H]  把值为1000H的地址放到ax
    push ax ESP指向的地址减2,把ax里的值压入栈
    pop ax  ESP指向的地址加2,把ax里的值弹出栈
    

    CPU是从高地址往低地址读取。

    物理地址

    在存储器里以字节为单位存储 信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址,又叫实际地址或绝对地址。

    8086是16位的CPU,地址总线是20位

    物理地址=段地址*10H+偏移地址
    例:
    CS:2000H,IP:0033H
    物理地址=2000H*10H+0033H=20033H
    

    先进后出,后进先出,是从高地址往低地址存入。

    ESP指向当前的栈顶,EBP是基址指针。

    内存寻址方式

    标志寄存器

    展开全文
  • JVM的内存空间主要划分为栈(stack)、堆(heap)、方法区(method area)、本地方法栈(native method stack)和寄存器(register),通常在分析内存使用时主要关注于前三部分 Java中的参数传递根据形参是八基本...

    之前在[ 图形化理解Java中的形参和实参]一文中我们知道了如下两个知识点:

    • JVM的内存空间主要划分为栈(stack)、堆(heap)、方法区(method area)、本地方法栈(native method stack)和寄存器(register),通常在分析内存使用时主要关注于前三部分

      在这里插入图片描述
    • Java中的参数传递根据形参是八大基本数据类型还是引用类型可以分为值传递和引用传递,不同的传递方式对于内存空间的使用是不同

    而在面向对象编程中,我们需要从解决的问题中抽象出类,然后在调用类的属性和方法时需先实例化类对象,那么在类对象的实例化过程和对于属性变量和成员方法的使用过程中,JVM的内存空间是如何变化的呢?

    假设现在有Student类,它只有一个成员变量name和一个成员方法showInfo():

    class Student{
        String name;
    
        public void showInfo(){
            System.out.println("Name is: " + name );
        }
    }
    

    那么通过实例化类对象,我们就可以使用Student类:

    public class thisTest {
        public static void main(String[] args) {
            Student s = new Student();
            s.name = "Kobe";
            s.showInfo();
        }
    }
    

    那么在使用实例化列对象和使用对象的过程中,JVM的内存空间是如何变化的呢?下面我们通过一张图按步骤的理解一下:
    在这里插入图片描述

    如上所述,我们重点只关注栈内存、堆内存和方法区内存三个部分

    • 首先将StudentthisTest.class数据保存到方法区中,其他每个.class包含各自的成员变量和成员方法,其中Student.class成员方法所在内存地址假设为0x666

    • main(String[] args)入栈,实例化Student对象并保存在堆中,初始化成员变量和成员方法并赋予默认值。name的默认值是null,而成员方法这里保存的是它在方法区中的地址,所以默认值为0x666。同时假设对象在堆中的地址为0x2333。接着创建变量s保存在栈中,它保存的是Student在堆中的地址,即0x233

    • 在实例化完Student对象后,接着为name变量赋值。首先找到栈中的ss保存了对象在堆中的地址,依靠地址找到对象中的name变量,然后修改为Kobe;

    • 接着调用showInfo()方法,同样通过s保存的地址找到堆中的对象的成员方法,因为成员方法保存的是它在方法区中的地址,因此通过保存的方法区地址找到成员方法showInfo(),将其压入栈中进行调用,输出“Name is Kobe”;

    • 当调用完成员方法后就不再使用,因此将其出栈。由于栈中的main()也没有其他动作执行,接着也将其出栈,最后JVM在判断两个对象都不可达时,回收垃圾,结束。

    明白了实例化一个对象的内存使用过程,那么多个对象的使用类似。

    展开全文
  • 任何一种外设都是通过读写寄存器来控制的,寄存器通常包括三大类:控制寄存器,状态寄存器和数据寄存器。根据CPU体系的不同,CPU对I/O端口的编址方式分为I/O映射和内存映射种方式。 (1).I/O映射方式: ...

    在了解这两个函数之前我们首先要明白CPU的寻址。任何一种外设都是通过读写寄存器来控制的,寄存器又通常包括三大类:控制寄存器,状态寄存器和数据寄存器。根据CPU体系的不同,CPU对I/O端口的编址方式分为I/O映射和内存映射两种方式。


    (1).I/O映射方式:


         以intel为代表的i386系列处理器中,内存和外部I/O是独立编址独立寻址。即在该体系中存在两种地址空间:内存空间和I/O空间。从处理器的角度来说,i386提供了两种不同的指令分别用来访问I/O地址空间和内存空间,两种指令相互独立。


    (2).内存映射方式:


       在嵌入式领域的处理器中,通常只能操作内存地址空间,并没有单独的I/O地址空间可供操作。换句话说该体系中没有单独的I/O指令用来操作外设。这种情况我我们只能通过将I/O端口的物理地址映射到内存空间,从而CPU像访问内存一样访问I/O地址空间。

     

    很显然,在s3c2440中是内存映射方式来访问外设。一般来说,外设的I/O物理地址有硬件决定,在datasheet中可以查到相应外设的I/O物理地址。由于CPU不提供单独的指令操作I/O外设,因此驱动程序并不能对其物理地址访问。而必须把它们映射到虚拟地址空间,然后通过操作映射得到的虚拟地址从而实现对I/O资源的操作。request_mem_region和ioremap函数就是实现物理地址到虚拟地址映射的功能。

    /* 从 start 开始,分配一个 len 字节的内存区域。成功返回一个非NULL指针,否则返回NULL。所有的 I/O 内存分配情况都 /proc/iomem 中列出。*/
    struct resource *request_mem_region(unsigned long start, unsigned long len, char*name);
    /*I/O内存区域在不再需要时应当释放*/
    void release_mem_region(unsigned long start, unsigned long len); 
    
    /*一个旧的检查 I/O 内存区可用性的函数,不推荐使用*/
    int check_mem_region(unsigned long start, unsigned long len);
    


    申请完内存分配后必须设置一个映射,由 ioremap 函数实现,此函数专门用来为I/O 内存区域分配虚拟地址。经过ioremap 之后,设备驱动即可访问任意的 I/O 内存地址。注意:ioremap 返回的地址不应当直接引用;应使用内核提供的 accessor 函数。以下为函数定义:

    #include <asm/io.h>
    void *ioremap(unsigned long phys_addr, unsigned long size);
    void *ioremap_nocache(unsigned long phys_addr, unsigned long size);/*如果控制寄存器也在该区域,应使用的非缓存版本,以实现side effect。*/
    void iounmap(void * addr);

    总的来说只需记住,对于内存映射方式,操作寄存器之前一定要先申请内存空间,申请之后再建立映射关系。操作结束之后同样要先释放申请的内存空间,再取消映射关系。



    展开全文
  • 按照是否可以被屏蔽,可将中断分为两大类:不可屏蔽中断(又叫非屏蔽中断)和可屏蔽中断。 不可屏蔽中断源一旦提出请求,CPU必须无条件响应,而对可屏蔽中断源的请求,CPU可以响应,也可以不响应。 典
  • 中断,异常,陷阱

    千次阅读 2011-01-17 14:39:00
    8086/8088把中断分为内部中断和外部中断两大类。80386把外部中断称为“中断”,把内部中断称为“异常”。与8086/8088一样,80386通常在两条指令之间响应中断或异常。80386最多处理256种中断或异常。中断是由异步的...
  • 半导体存储器是一种能存储大量二值... 半导体存储器的种类很多,首先从存、取功能上可以分为只读存储器(ROM)(Read Only Memory)和随机存储器(RAM)(Random Access Memery)两大类。(而从制造工艺上又可以分.
  • 计算机存储设备分为两类, 一种临时,称为内部存储设备,如寄存器、高速缓存和内存储器等,特点是靠电信号存储数据信息,断电后数据丢失; 另一种是永久存储设备,通常称为外部存储设备,如磁盘存储器、光盘、闪存等...
  • GPU编程 内存类型简介

    2020-11-10 22:34:47
    存储空间主要分为可编程与不可编程种。 通常在存储结构中,缓存都是不可编程的。(例如:L1和L2 cache) GPU的可编程存储空间有:Global, local, texture, constant, shared and register memory。 按照速度和大小...
  • 为了兼顾频率测量精度和测量反应时间的要求,把测量工作分为两 种方法。当待测信号的频率大于等于2Hz 时,定时/ 计数器构成为计数器,以机 器周期为基准,由软件产生计数闸门,这时要满足频率测量结果为4 位有效数字, 则...
  • 6、单片机内外中断源按优先级别分为高级中断和低级中断,级别的高低是由( )寄存器的置位状态决定的。同一级别中断源的优先顺序是由( )决定的。 7、LED数码显示按显示过程分为( )显示和( )显示2种。前者,对...
  • 2. C语言的函数兼有其它语言中的函数和过程种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数种。 (1)有返回值函数  此类函数被调用执行完后将向调用者返回一个执行结果, 称为函数返回值。如...
  • DELPHI串口编程

    2015-12-10 21:39:48
    差异,接口通常由一些寄存器或RAM芯片组成,如果芯片足够还可以实现批量数据的传输; 2)能够进行信息格式的转换,例如串行和并行的转换; 3)能够协调CPU和外设两者在信息的类型和电平的差异,如电平 转换驱动...
  • 1.2 通常计算器按照用户使用方式可以分为两类: (1)按键式计算器。如下是WindowsXP系统自带的计算器运行界面: 图1 (2)表达式(文本式)计算器。如下是一个最简化的表达式计算器运行界面: 图2 可以看到这...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    答:就以嵌入式系统观念为例,一般嵌入式处理器可以分为:嵌入式微处理器、嵌入式微控制器、嵌入式DSP(Digital Signal Processor)。 嵌入式微处理器就是和通用计算机的微处理器对应的CPU。在应用中,一般...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    � Android 的源代码遵循 Apache V2 软件许可,而不是通常的 GPL v2 许可。有利于商业开发。 � 具有强大的 Linux 社区的支持。 Android Android Android Android 的不足 � 由于采用了 Java 作为应用开发语言,目前...
  • 死锁是个或个以上的进程中的每一个,都在等待其中另一个进程释放资源而被封锁,它们都无法向前推进,称这种现象为死锁现象。 产生死锁的原因是共享资源有限,多个进程对共享资源的竞争,而且操作不当。 ...
  • 计算机内部的信息可以分成控制信息和数据信息二大类;控制信息可分为指令和控制字类;数据信息可分为数值信息和非数值信息类。 1-8 什么叫二进制?使用二进制有何优点和缺点? 解: 二进制是基数为2,每位的权...
  • 部分操作系统中,内存分配由以下个简单的函数来处理: void *malloc(long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。 void free(void *firstbyte):如果给定一个由...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    部分操作系统中,内存分配由以下个简单的函数来处理: void *malloc(long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。 void free(void *firstbyte):如果给定一个由先前...
  • 会计理论考试题

    2012-03-07 21:04:40
    A、文件占用的空间变 B、发生异常蜂鸣声 C、屏幕显示异常图形 D、机内的电扇不转 2. Windows98支持下面___C__网络协议。 A、Net BEUI B、IPX/SPX C、TCP/IP D、Banyan VINES 3.为了方便人们记忆;阅读和编程,...
  • Reversing:逆向工程揭密

    热门讨论 2010-06-21 17:00:47
    从工程实际的角度来看,大体上可以将软件逆向工程分为两大类: 第一类是从已知软件系统的完整代码出发,生成对应系统的结构以及相关设计原理和算法思想的文档。实际上,学习和研究别人的源代码就属于此类。Chikofsky...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

寄存器通常分为两大类