精华内容
下载资源
问答
  • 怎样记住标志寄存器的标志

    千次阅读 2011-02-05 04:53:00
    1,CF,进位标志, 排在0位。记忆口诀:C是0一半。 2,PF,奇偶标志, 排在...6,TF,追踪标志, 排在8位。记忆口诀:铁(T)打的大坝(8)。 7,IF,中断允许标志, 排在9位。记忆口诀:救(9)人时允许中断电源。

    1,CF,进位标志, 排在0位。记忆口诀:C是0的一半。
    2,PF,奇偶标志, 排在2位。记忆口诀:2是(奇)偶数。
    3,AF,辅助进位标志,排在4位。记忆口诀:老师(4)辅助学生。
    4,ZF,零标志, 排在6位。记忆口诀:陆(6)地属于政府(ZF)。
    5,SF,符号标志, 排在7位。记忆口诀:用油漆(7)刷写墙上的符号。
    6,TF,追踪标志, 排在8位。记忆口诀:铁(T)打的大坝(8)。
    7,IF,中断允许标志, 排在9位。记忆口诀:救(9)人时允许中断电源。
    8,DF,方向标志, 排在10位。记忆口诀:石(10)碑指示方向。
    9,OF,溢出标志, 排在11位。记忆口诀:11与“溢!溢!!”谐音。

    条件转移指令记忆方法:
    条件转移指令分为三类:
    1,简单条件转移指令:
    JZ/JE
    JNZ/JNE
    JS
    JNS
    JO
    JNO
    JC
    JNC
    JP/JPE 只这两条例外,E表示P=1(E与1谐音);
    JNP/JPO 只这两条例外,0表示P=0(O与0象形).

    2,无符号数条件转移指令:
    JA/JNBE
    JAE/JNB
    JB/JNAE
    JBE/JNA

    3,有符号数条件转移指令:
    JG/JNLE
    JGE/JNL
    JL/JNGE
    JLE/JNG

    记忆口诀:
    标志位名先取 1 ,有 N 表示无 N 反,
    G 非 L , A 非 B ,进位为 0 符溢等,
    要想全部判断清,还看政府依不依.

    解释:
    1,所有的标志位名表示该标志位名取1时转移;
    2,指令中含有N时,表示该指令没有含N时的效果取反;
    3,G为L取反,A为B取反;
    4,指令含A,B时进位为0;
    5,指令含G,L时,符号位和溢出位相等;
    6当指令中含E时,表示ZF位为1.指令中含NE时,表示ZF为非1(0).

    展开全文
  • 8086变址寄存器

    千次阅读 2016-10-06 22:19:17
    变址寄存器(SI,DI): 首先,变址寄存器和上面介绍指针寄存器(也就是 BP 和 SP)...所以它们也可以保存算术结果或者说是具有暂存数据功能,但是因为它们不是数据寄存器,所以无法分割成 2 个独立 8 寄存

    变址寄存器(SI,DI):

    首先,变址寄存器和上面介绍的指针寄存器(也就是 BP 和 SP),它们的功能其实都是用于存放某个存储单元地址的偏移,

    或者是用于某组存储单元开始地址的偏移,即作为存储器指针使用,当然,由于变址寄存器和指针寄存器都是属于通用寄存器,

    所以它们也可以保存算术结果或者说是具有暂存数据的功能,但是因为它们不是数据寄存器,所以无法分割成 2 个独立的 8 位寄存器使用,

    关于变址寄存器和指针寄存器的详细使用,笔者将会在下一篇博文中作出最详细的介绍,

    SI (Source Index) 是源变址寄存器,DI (Destination Index) 即是目的变址寄存器,

    8086 CPU 中的 SI 寄存器和 DI 寄存器其实和 BX 寄存器的功能是差不多的,

    只不过 SI 寄存器和 DI 寄存器均不是数据寄存器,所以它们不能够拆分为 2 个独立的 8 位寄存器,

    而这也就是 SI 寄存器和 DI 寄存器与BX 寄存器所不同的地方,

    既然,SI,DI 两个寄存器的功能和 BX 差不多,自然,SI 和 DI 中也是可以暂存一般性数据的,

    同时,通过使用 SI 和 DI 寄存器也是可以用来完成寻址操作的。

    比如下面的代码就是可行的:

    MOV SI,0		;初始化偏移地址为 0
    MOV AX,[SI]		;将段地址为 DS 偏移地址为 SI 的内存单元中的值移入 AX 中
    MOV AX,DS:[SI]		;将段地址为 DS 偏移地址为 SI 的内存单元中的值移入 AX 中
    MOV AX,SS:[SI]		;将段地址为 SS 偏移地址为 SI 的内存单元中的值移入 AX 中
    
    MOV DI,0    		;初始化偏移地址为 0
    MOV AX,[DI]		;将段地址为 DS 偏移地址为 DI 的内存单元中的值移入 AX 中
    MOV AX,DS:[DI]		;将段地址为 DS 偏移地址为 DI 的内存单元中的值移入 AX 中
    MOV AX,SS:[DI]		;将段地址为 SS 偏移地址为 DI 的内存单元中的值移入 AX 中
    展开全文
  • iOS arm64汇编中寄存器和基本指令

    千次阅读 2018-05-03 16:46:58
    iOS汇编(汇编语言依赖于机器) ... 64bit:x0~x28,29个寄存器每个寄存器都是64位的,64就是8 个字节,一个寄存器最多能放8个字节数据 32bit:w0~w28(属于x0~x28低32bit) 4个字节 x0~x7...

    iOS汇编(汇编语言依赖于机器)
    真机,arm64汇编, GNU汇编
    模拟器:x86汇编(Mac电脑) , AT&T汇编

    真机:arm64汇编
    寄存器:
    通用寄存器
    64bit的:x0~x28,29个寄存器每个寄存器都是64位的,64位就是8 个字节,一个寄存器最多能放8个字节的数据
    32bit的:w0~w28(属于x0~x28的低32bit) 4个字节
    x0~x7通常拿来存放函数的参数,更多的参数使用堆栈来传递
    x0通常拿来存放函数的返回值
    程序状态寄存器
    cpsr(current program status register)
    spsr(saved program status register) ,异常状态下使用
    指令
    堆栈
    在xcode中建立汇编文件
    这里写图片描述
    这里写图片描述
    在汇编文件中如何写函数
    .text // 放代码段的 .data//数据段,.stack// 栈段
    test: // 函数名称
    在外面如何调用汇编文件就要建一个叫arm.h的头文件
    这里写图片描述
    这里写图片描述

    汇编指令
    ret 返回指令
    mov 目的寄存器,源操作数 // 将右边的源操作数复制到左边的目的寄存器中

    汇编文件写函数
    这里写图片描述
    这里写图片描述
    指令还有next,nexti 表示如果遇到函数直接逃过这个函数,如果遇到代码是一行一行执行,step,遇到代码也是一行一行执行,如果遇到函数直接进去,stepi-> step instruction一条一条汇编指令跳过.si,执行这一句汇编指令,敲c这个函数过掉了.
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    cmp:将2个寄存器相减,相减的结果会影响cpsr寄存器的标志位
    b : 跳转指令, jamp
    这里写图片描述
    这里写图片描述
    这里写图片描述

    条件域:
    EQ: equal,相等
    NE:not equal,不相等
    GT:great than,大于
    GE great or equal,大于等于
    LT:less than,小于
    LE:less equal, 小于等于

    bl:带返回的跳转指令,跳转完返回到跳转的下一行

    内存操作指令
    load, 从内存中装载数据,从内存中读数据到寄存器
    ldr,ldur,去内存数据放到寄存器中,区别是如果右边立即数为负数则用的是ldur,如果右边立即数为正数则用ldr.立即数为偏移值
    这里写图片描述
    ldp:(p是pair的简称,一对的意思)从内存中读取数据放到一对寄存器中
    ldp w0, w1, [x2, #0x10],取[x2,#0x10]的前4个字节给w0,接着下面的4个字节给w1
    这里写图片描述
    store指令往内存中存储数据
    str, stur指令将寄存器里的值往内存中写入数据

    stp指令 w0, w1, [x1, #-0x5] ,将w0四个字节的数据放入[x1, #-0x5],再讲w1的四个字节的数据放入[x1, #-0x5]中
    先写寄存器w0,w1,再写内存寻址[x1, #-0x5]
    寻址方式:
    这里写图片描述

    这里写图片描述
    这里写图片描述

    零寄存器:里面存储的值为0
    wzr(32bit, Word Zero Register) 4个字节,
    xzr(64bit) 8个字节
    这里写图片描述

    将4个字节的0赋值给了a,将4个字节的0赋值给了b

    程序计数器
    pc (Program Counter) 记录CPU当前指令的是哪一条指令,存储着当前CPU正在执行的指令的地址,类似于8086汇编的ip寄存器.
    si
    register read
    链接寄存器
    lr (Link Register) ,也就是x30,存储着函数的返回地址
    这里写图片描述

    bl与b指令的本质区别
    bl指令(带返回值的跳转指令):
    将下一条指令的地址存储到lr(x30)寄存器中
    跳转到标记处开始执行代码

    ret指令函数返回, 将将lr(x30)的值赋值给pc寄存器,pc里面存储的地址值,则cpu马上就执行这个地址对应的指令
    而b指令只是跳转

    展开全文
  • 又称:址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方实体址。 总线地址: 一句话概括:CPU能够访问内存范围。 一个现象可知...

    字符设备驱动实现二之微机总线物理地址寄存器配置

    一、微机总线物理地址

    1、总线地址
    百度百科介绍:
    地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。

    总线地址:
    一句话概括:CPU能够访问内存的范围。

    一个现象可知:一台电脑装了32位的系统,内存条明明是8G,可是系统只能识别3.8G,而装了64位系统的电脑才能识别8G。

    由下面数据分析:
    32位能表示/访问 4,294,967,296 bit
    4,294,967,296 bit
    4,194,304 kbit
    4,096mbit
    4gbit

    pi@raspberrypi:~ $ cat /proc/meminfo
    MemTotal:         949448 kB
    MemFree:          632848 kB
    

    树莓派是32位系统 ,MemTotal大概:1G

    2、物理地址
    硬件的实际地址或绝对地址。

    3、虚拟地址
    逻辑(基于算法的地址(软件层面的地址,假))地址称为虚拟地址。

    4、树莓派3b,CPU芯片的型号BCM2835;ARM-cotexA53架构

    总线地址 物理地址 虚拟地址
    起始值 0x00000000 起始值 0x3f200000 起始值 0x00000000

    树莓派3b,CPU芯片的型号BCM2835;它是ARM-cotexA53架构
    2440 2410 CUP型号 ; ARM9架构

    5、驱动两大利器:电路图和芯片手册
    5.1、通过芯片手册第六章导读:
    作用:获得相关寄存器功能的配置

    寄存器 作用 功能 范围
    GPFSEL0 GPIO Function Select 0 (设置输入输出) 输出/输入 pin0~pin9
    GPSET0 GPIO Pin Output Set 0 置位寄存器 置1输出0寄存器 (置0无效0 SETn (n=0…31)
    GPSET1 GPIO Pin Output Set 1 置位寄存器 置1输出1寄存器 (置0无效 SETn (n=32…53)
    GPCLR0 GPIO Pin Output Clear Registers 清零寄存器 清除 CLRn (n=0…31

    5.2、电路图
    作用:通过电路图找到寄存器

    5.3、配置寄存器
    GPIO有41个寄存器。所有访问都设定为32位。
    在这里插入图片描述
    先要获得以下寄存器的物理地址:
    有图可得偏移值

    寄存器 偏移值 物理地址
    GPFSEL0 00 0x3f200000
    GPSET0 1c 0x3f20001c
    GPSET1 20 0x3f200020
    GPCLR0 28 0x3f2000028
    int __init pin4_drv_init(void) //真实的驱动入口  
    {
    
        int ret;
        devno = MKDEV(major,minor);  //创建设备号
        ret   = register_chrdev(major, module_name,&pin4_fops);  //注册驱动  告诉内核,把这个驱动加入到内核驱动的链表中
    
        pin4_class=class_create(THIS_MODULE,"myfirstdemo");
        pin4_class_dev =device_create(pin4_class,NULL,devno,NULL,module_name);  //创建设备文件
    
        GPFSEL0 = (volatile unsigned int*)ioremap(0x3f200000);//物理地址转发成虚拟地址,io寄存器进行映射成普通内存单元进行访问
        GPSET0  = (volatile unsigned int*)ioremap(0x3f20001c);
        GPCLR0  = (volatile unsigned int*)ioremap(0x3f200028);
    
        return 0;
    }
    
    

    以树莓派引脚4为例
    实现简单字符驱动代码:

    #include <linux/fs.h>		 //file_operations声明
    #include <linux/module.h>    //module_init  module_exit声明
    #include <linux/init.h>      //__init  __exit 宏定义声明
    #include <linux/device.h>	 //class  devise声明
    #include <linux/uaccess.h>   //copy_from_user 的头文件
    #include <linux/types.h>     //设备号  dev_t 类型声明
    #include <asm/io.h>          //ioremap iounmap的头文件
    
    
    static struct class *pin4_class;  
    static struct device *pin4_class_dev;
    
    static dev_t devno;                //设备号
    static int major =231;  		   //主设备号
    static int minor =0;			   //次设备号
    static char *module_name="pin4";   //模块名
    
    
    volatile unsigned int* GPFSEL0 = NULL;
    volatile unsigned int* GPSET0 = NULL;
    volatile unsigned int* GPCLR0 = NULL;
    
    
    static int  pin4_read(struct file *file,char __user *buf,size_t count, loff_t *ppos)
    {
    	
        printk("pin4_read\n");  //内核的打印函数和printf类似
    
    
         return 0;
    }
    
    
    //led_open函数
    static int pin4_open(struct inode *inode,struct file *file)
    {
        printk("pin4_open\n");  //内核的打印函数和printf类似
       
        *GPFSEL0 &= ~(0X6 << 12); //设置pin4为输出功能
        *GPFSEL0 |=  (0X1 << 12);
     
        return 0;
    }
    
    //led_write函数
    static ssize_t pin4_write(struct file *file,const char __user *buf,size_t count, loff_t *ppos)
    {
        int usercmd;
        printk("pin4_write\n");  //内核的打印函数和printf类似
       
        copy_from_user(&usercmd,buf,count);
      
        if(usercmd == 1){
             printk("set 1\n");
            *GPSET0 |= 0X1 << 4; 
        }else if(usercmd == 0){
             printk("set 0\n");
            *GPCLR0 |= 0X1 <<4;
        }else{ 
            printk("usrcmd failed\n");  
        }
    
    
        return 0;
    }
    
    static struct file_operations pin4_fops = {
    
        .owner = THIS_MODULE,
        .open  = pin4_open,
        .write = pin4_write,
        .read  = pin4_read,
    };
    
    int __init pin4_drv_init(void) //真实的驱动入口  
    {
    
        int ret;
        devno = MKDEV(major,minor);  //创建设备号
        ret   = register_chrdev(major, module_name,&pin4_fops);  //注册驱动  告诉内核,把这个驱动加入到内核驱动的链表中
    
        pin4_class=class_create(THIS_MODULE,"myfirstdemo");
        pin4_class_dev =device_create(pin4_class,NULL,devno,NULL,module_name);  //创建设备文件
        
        GPFSEL0 = (volatile unsigned int*)ioremap(0x3f200000,4);//物理地址转发成虚拟地址,io寄存器进行映射成普通内存单元进行访问
        GPSET0  = (volatile unsigned int*)ioremap(0x3f20001c,4);
        GPCLR0  = (volatile unsigned int*)ioremap(0x3f200028,4);
    
        return 0;
    }
    
    void __exit pin4_drv_exit(void) 
    {
        iounmap(GPFSEL0); //释放映射内存
        iounmap(GPSET0);
        iounmap(GPCLR0);
    
        device_destroy(pin4_class,devno); 
        class_destroy(pin4_class);
        unregister_chrdev(major, module_name);  //卸载驱动
    
    }
    
    module_init(pin4_drv_init);  //入口,内核加载驱动程序时候,这个宏被调用
    module_exit(pin4_drv_exit);
    MODULE_LICENSE("GPL v2");
    
    
    展开全文
  • STM8L051F3_02_EXTI应用

    2019-04-07 18:24:14
    本章介绍STM8L051F3EXTI相关知识,内容分为以下几部分: EXTI简介 KEY外部中断检测 1、EXTI简介 EXTI也是属于GPIO知识点,应用比较广泛。...可通过配置寄存器Px_CR2相应的位来独立地使能或禁能某...
  • 1. 32位乘法器(MPY32)介绍 ...不需要“符号扩展”指令的8位和24位乘法 2. MPY32操作 MPY32支持8位、16位、24位和32位操作数进行无符号乘、有符号乘、无符号乘累积和有符号乘累积操作。操作数大小由操作数被写入
  • 3)掌握定时器 T3(8位)通过中断方式控制 LED1 周期性闪烁 2、实验设备 硬件:1、PC机一台;2、ZigBee(CC2530)(底板、核心板、仿真器、USB 线)开发板一套 软件:Windows 10系统,IAR for 8051 集成开发环境 3、实验...
  • 存储器一个字节表示8位(bit)** ** 4. mov操作指令使用方式** 1.mov 寄存器,数据 例如:mov ax,8 2.mov 寄存器寄存器 例如:mov ax,bx 3.mov 寄存器,内存单元 例如:mov ax,[0] 4.mov 内存单元,...
  • 本来以为自己对SPI有了一定理解,不管软件模拟,还是硬件SPI都写过程序也调试成功了。但今天重看了一遍SPI,发现... 那么也就是说第一位的数据先出现在主从器件MOSI口,然后上升沿到达后传入移位寄存器。  ...
  • 【单选题】住宅之外其他民用建筑按照建筑高度分类 ,( )m以上,称为超高层建筑【判断题】串行通信波特率是衡量数据传输速率的参数。【单选题】CC2530的AD转换器支持...【单选题】ADCH寄存器的是( )【单选题】CC25...
  • 摘要:归纳SOC型芯片C8051F020中模数转换部分应用要素,...F020具有8路12位A/D转换(简称ADC)接口和8路8位在线可编程(ISP)ADC电路,片上特殊功能寄存器(简称SFR)有15个与ADC控制相关,它们是: AMUX0S
  • MCS51单片机系列属于8位单片机,它是Intel公司继MCS48系列成功设计之后,于1980年推出产品。由于MCS51系列具有很强片内功能和指令系统,因而使单片机应用发生了一个飞跃,这个系列产品也很快成为世界上第...
  • MCS51单片机系列属于8位单片机,它是Intel公司继MCS48系列成功设计之后,于1980年推出产品。由于MCS51系列具有很强片内功能和指令系统,因而使单片机应用发生了一个飞跃,这个系列产品也很快成为世界上第...
  • 中断是所有单片机核心,也是单片机中比较难掌握一块内容,正好我学完中断...对于M3和M4内核MCU,每个中断优先级都是用寄存器的8位来设置。那就可以产生2^8 = 256个中断,但实际上是用不到这么多,所以...
  • 返回值属于bty或char类型数据:存储在EAX寄存器的8位--------AL寄存器 返回值属于float类型数据:存储在FPU的ST(0)寄存器 ARM系统,通常使用R0寄存器回传返回值。 1.void型函数的返回值 main()函数数据类型是void...
  • DAC0832芯片及其与单片机接口,DAC0832是使用非常普遍的8位D/A转换器,由于其片内有输入数据寄存器,故可以直接与单片机接口。DAC0832以电流形式输出,当需要转换为电压输出时,可外接运算放大器。属于该系列芯片...
  • 需要注意的是滴答定时器的计数器是24的,最大值为2^24(16,777,216)。 (1)72MHz利用滴答定时器实现us级延时: 72MHz/8=9Mhz //最大值:1864135us void delay_us(u32 i) { u32 temp; SysTick->LOAD=9*i; //...
  • 1、计算机存储单位从小到大依次为Bit、字节Byte、千字节KB、兆M、千兆GB、TB,相邻单位之间都是1024倍,1024为210次方,即:1Byte = 8bit1K = 1024Byte1M = 1024K1G = 1024M1T = 1024G2、计算机存储元件 ...
  • http://tech.ddvip.com/2008/07/121671774547556_2.html(表示感谢) MCS-5l单片机系列属于8位单片机,它是Intel公司继MCS-48系列成功设计之后,于1980年推出产品。由于MCS-51系列具有很强片内功能和...
  • 第1 页共27 页 1 概述 频率计基本原理是用一个频率稳定...向量值作为程序计数器8 ,低8 固定为00H,若引导向量为FCH, 则程序计数器内容为FC00H 即程序转到FC00H 地址开始执行而ISP 服务程序 就是从,FC00...
  • 汇编语言——移位指令

    千次阅读 2020-03-16 16:29:15
    基本概念 移位操作指令:移位操作指令是一组经常使用指令,属于汇编语言逻辑指令中一部分,它包括移位指令(含算术移位指令、逻辑...目的操作数是8位(或16位)的寄存器数据或存储器数据。 基本格式 格式为...
  • 西门子PLC状态字解释

    千次阅读 2018-04-17 19:04:12
    西门子STL语句表编程中状态字状态字又称状态字寄存器,是一个16位的寄存器,只用了其中9,它属于S7-300/400PLC存储区中除基本存储区外存储区一种。用于存储CPU执行指令后状态,以二进制位的形式...
  • STM32SysTick 定时器

    2020-12-08 23:12:13
    当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生 一次中断,以此循环往复 相关寄存器 COUNTFLAG R/W 0 如果在上次读取本寄存器后, SysTick 已经计 到了 0,则该为 1。 CLKSOURCE R/W 0 时钟源选择,0...
  • AVR。RTOS设计

    2018-07-11 11:37:49
    mega8 1K ram 有 8K rom,是开发 8 位的 RTOS 一个理想器件,并且我对它也比较 熟悉。 写 UCOS Jean J.Labrosse 在他书上有这样一句话,“渐渐地,我自然会想到,写个实时 内核直有那么难吗?不就是...
  • 27.设AX、BX寄存器中存放的是有符号的二进制数据,若执行“CMP AX,BX”指 令后,( )L表示大于则转L。 A.JZ B.JA C.JGE D.JG 28.执行“DIV BX”指令后,( )寄存器中存放商。 A.AL B.AH C.AX D.DX 29....
  • 面试--->操作系统

    2017-06-01 15:25:09
    段号占8位,那么段地址占16位,则最大长度为2^16=64kB2.只有在带电情况下才能保存信息存储器是: 半导体RAM属于易失性存储器,分为静态RAM(SRAM)和动态RAM(DRAM),静态RAM,以寄存器为存储元件,只
  • 计算机系统概论

    千次阅读 2020-02-23 15:07:18
    3.寄存器的数据对微程序级用户不是透明 4.软件与硬件具有逻辑功能等价性 5.计算机的字长与运算精确度有关 6.CPU地址线数量与内存容量密切相关 7.低层用户对硬件的透明度比高层用户低 8.不同层次的面对不同用户,...
  • 单片机期末考试题目及答案详解

    热门讨论 2009-06-23 10:30:30
    很好很详细的资料,看了考试应该没问题的,大家快...帧发送时使用指令把TB8位的状态送入移位寄存器的第9位 C.发送的第9数据位内容在SCON寄存器的RB8中预先准备好 D.帧发送时使用指令把TB8位的状态送入发送SBUF中 ...
  • A=rand(),B=rand(),C= ,都无法实现,因为通常只有一个开放的寄存器。 [7] 按键式计算器实现起来非常容易(应算作其优点吧?!),无编程开发价值! 因此,本文计划用Microsoft Visual C++ 设计实现一个文本式计算器...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

属于8位寄存器的是