通用寄存器

汇编语言程序设计第二章

徘徊边缘 提交于 2020-03-24 02:27:28
第二章主要介绍了寄存器。CPU中主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。不同的CPU,寄存器的个数、结构是不同的。 寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。8086所有的寄存器都是16位的,可以存放2个字节,AX、BX、CX、DX用于存放一般性数据,成为通用寄存器。为了兼容旧的8位寄存,每个16位寄存器可以分为2个单独的8位寄存器来使用,名字分别用AH、AL来表示高8位和低8位。8086CPU可以一次性处理以下两种尺寸的数据:字节byte,一个字节由8个bit组成,可以存储在8位寄存器中;字word,是两个字节,可以存储在16位寄存器中,改字的高8位字节和低8位字节存储在高8位寄存器和低8位寄存器中。 CPU访问内存需要提供内存单元地址,所有的内存单元在内存空间中构成的是一个一维线性结构。每个内存单元都有一个唯一的地址,这个地址就是物理地址。CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。16位结构的CPU表示:CPU运算器一次运算位数最大为16位

汇编语言第二章总结

情到浓时终转凉″ 提交于 2020-03-24 02:26:48
  在 CPU 中 主要部件是 寄存器 ,负责信息的存储功能,而这正是第二章的重点。   下面将知识点总结如下: 一、 不同CPU寄存器个数,结构都不同。8086CPU有14个寄存器分别为: AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW 这些寄存器都是16位,即可存放两个字节。 其中AX、BX、CX、DX为通用寄存器,都可分为两个可独立使用的8位寄存器来用。(前八位为H,后八位为L,例如AX可分为AH,AL) 二、 几条汇编指令 1.move xx,num   将num送入寄存器xx; 2.add xx,num   将寄存器xx的数值加上num; 3.move xx,yy   将寄存器yy的数值送入寄存器xx; 4.add xx,yy   将寄存器xx,yy的值相加并存在xx中; (其中英文大小写无影响mov ax,18和MOV AX,18含义相同) (其中num如62627为十进制数字,计算时应化为16进制F4A3H计算(H为16进制标识)) Tips:错误指令如下: mov ax,bl  不能在8和16位寄存器中传送数据 mov bh,ax  不能在16和8位寄存器中传送数据 mov al,20000  在8位寄存器中存放值超过极限255 add al,100H  不能将高于8位数据加到一个8位寄存器中 三、

【汇编语言】——第二章课后总结

若如初见. 提交于 2020-03-24 02:26:31
第二章最主要的内容如下: 1、通用寄存器:AX,BX,CX,DX; 2、汇编指令:mov add等指令; 3、8086CPU给出物理地址的方法(用两个16位地址合成的方法形成一个20位的物理地址); 4、CS(段寄存器) IP(指针寄存器 ); 5、修改CS,IP的指令; 一.通用寄存器 1. 8086CPU所有的寄存器都是16位的,可以存放两个字节。 2. AX、BX、CX、DX,4个寄存器通常用来存放一般性数据,被称为通用寄存器。 3. 一个16位的寄存器可以存储一个16位的数据。 思考:一个16位的寄存器所能存储的数据最大值为多少? 4. 8086CPU的AX、BX、CX、DX(16位寄存器)每个都可以分为两个可独立使用的8位寄存器来用: AX可分为AH、AL; BX可分为BH、BL; CX可分为CH、CL; DX可分为DH、DL; 二.几个常用的汇编指令 mov 和add   mov a, b 指把a=b;a通常是寄存器,如:mov ax,18指将18送入寄存器ax   add a, b指a=a+b; a通常是寄存器,如:add ax,18指将寄存器ax的数值加上18 注意:   由于通用寄存器只能存储16位的数据,所以如果将一个大于16位的数据放入寄存器就会损失最高位;   使用add,mov指令时,只能对相同类型的寄存器操作,即只能ax,bx,cx,dx之间操作不能

《汇编语言》第二章总结

守給你的承諾、 提交于 2020-03-24 02:24:50
汇编语言(面向机器的程序设计语言) 第二章 信息的大本营——寄存器 CPU概述 一个典型的CPU由运算器、控制器、寄存器等器件组成。运算器进行信息处理,寄存器进行信息存储,控制器控制各种器件进行工作。 内部总线连接各种器件,在它们之间进行数据的传送,实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。这个章节所介绍的寄存器是CPU中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容来实现对CPU的控制。 不同的CPU,寄存器的个数和结构都是不同的。8086CPU有14个寄存器,每个寄存器都有对应的名称分别为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。 2.1 通用寄存器 8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。以AX为例,16位寄存器的逻辑结构如下图: 16位寄存器的逻辑结构, 其存放的无符号数据范围:0 ~ 2^16 -1 为了与早期CPU操作兼容,这4个寄存器均可拆分成两个8位寄存器单独使用,分别为AX分为AH和AL,BX分为BH和BL,CX分为CH和CL,DX分为DH和DL,下面以AX为例: AH和AL存放的无符号数据范围:0 ~ 2^8 -1 一个字由两个字节组成,可以存在一个16位寄存器中

【华为云技术分享】如何将90%的代码自动迁移到鲲鹏平台上

荒凉一梦 提交于 2020-03-19 13:25:05
主讲人:华为云云享专家 张老师 大家好,今天要讲的主题是关于软件迁移,这是一个久远的话题,因为但凡牵扯到切换平台、CPU架构的变化,甚至一些语言版本的升级,都可能会面临到软件迁移的问题。今天我们就探讨一下软件移植过程的原理,以及如何进行软件迁移。 在软件移植的过程当中,如何帮助开发者提升效率,如何把华为沉淀下来的软件开发以及移植的经验反馈给开发者,帮助开发者加速软件开发的进度,降低成本,这是我们一直关注的问题,为此,我们还推出了鲲鹏的开发套件,帮助用户做软件的移植,以及做基于鲲鹏平台的性能加速。 其实一提到软件移植,如果是做了比较底层软件的话,大家可能会用到一些 汇编这样的底层语言 。 它和机器的硬件架构强相关 ,当你在从一个平台切换到另外一个平台的时候,这些强相关的语言势必要 进行一次代码移植, 跟我们所采用的编程语言以及移植的平台环境强相关。当我们用汇编代码或者是用这种编译型语言的时候,就会面临着一些移植的问题和挑战,有些问题通过编译器能解决, 有些问题特别是一些低阶的代码或者比较底层的代码, 就要手工去查手册 , 然后去把它相应的转换成新平台所使用的机器码。 上图列出了鲲鹏处理器和x86处理器的指令差异,列了一个简单的两个数相加,两个int型相加的这样一个简单程序。通过GCC编译完之后,通过OMGD,就能看到指令的具体的格式形式以及相应的对应的汇编代码。可以看出

2.寄存器

喜你入骨 提交于 2020-03-19 01:40:12
寄存器 通过操作数据总线,控制总线和地址总线实现数据的读取,肯定是非常灵活的方式,假如对某个存储单元进行比较复杂的操作,不断的进行读取显然需要优化,比如说加入缓存,事物或者中间变量什么的,当然,这里我们只能加入硬件,比如说寄存器(看来机器码会与寄存器有关) 通用寄存器 :就算是将寄存器理解为存储单元里面的变量,也要为他们取一个好听且有意义的名字 1.数据寄存器 AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。 BH&BL=BX(base):基址寄存器,常用于地址索引 CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。 这4个16位的寄存器可以分为高8位(AH,BH,CH,DH)以及低八位(AL,BL,CL,DL),这2组8位寄存器可以分别寻址,并单独使用。 2.指针寄存器和变址寄存器 SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置 BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置 SI(Source Index):源变址寄存器,可用来存放相对于DS段之源变址指针

关于单片机中断控制

左心房为你撑大大i 提交于 2020-03-17 22:07:54
1 .对于 STM32 讲,外部中断通道位置 28 ( 35 号优先级)是给外部设备 TIME2 的,但 TIME2 本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢 / 下溢)、输入捕获、输出 匹配、 DMA 申请等。所有 TIME2 的中断事件都是通过一个 TIME2 的中断通道向 STM32 内核提 出中断申请,那么 STM32 中如何处理和控制 TIME2 和它众多的、不同的、中断申请呢? (题外话: STM32 中的一个通用定时计数器,就比 8 位控制器(如 AVR , MCS-51 就更不必说了)中 TIME 要复杂多了。学过 AVR 的,可能对输入捕获、输出匹配等还有概念,但如果你学的标准架构的 MCS-51 ,那 么上手 32 位可能困难就更多了。所以我一直推荐学习 8 位机应该认真的从 AVR 开始。尽管 51 有很大的市 场,价格也相对便宜,但从长远的眼光看问题,从后续掌握 32 位的使用,考虑到学生的可持续发展, AVR 应该是比较好的选择。) 2 . cortex_m3 内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总 的控制该中断通道。它们包括有: z 中断优先级控制字: PRI_n (上面提到的) z 中断允许设置位:在 ISER 寄存器中 z 中断允许清除位:在 ICER 寄存器中 z 中断悬挂 Pending (排队等待

X64的函数调用规则

允我心安 提交于 2020-03-17 11:25:14
某厂面试归来,发现自己落伍了!>>> 闲着没事想研究一下gcc的函数调用方式和m$的__stdcall、__fastcall之类有何区别,本想是了解一下关于参数的入栈顺序和清理方,就随便写了个C函数,编译成.s文件,一看发现根本就没有push和pop之类的指令...两个int参数都是利用rsi和rdi传递!网上百度了一个关于m$平台x64的调用约定 看完ddk里相关的部分,总结下吧,规则倒是不复杂,相对x86时代的stdcall cdecl fastcall 三分天下要简明的多。按ddk里的说法,m$就是要趁这次统一调用规则…… -__- 在x64下函数调用的前4个参数总是放在寄存器中传递,剩余的参数则压入堆栈中。而x86上则是全部压入堆栈中(除了fastcall方式)。这4个用于存放参数的寄存器分别是:存放整数参数的RCX,RDX,R8,R9;存放浮点数参数的XMM0,XMM1,XMM2,XMM3。 按照所传参数是整数还是浮点数的不同,寄存器的使用规则如下: 全部整数参数: func1(int a, int b, int c, int d, int e); 参数a放入RCX,参数b放入RDC,参数c放入R8,参数d放入R9,参数e么压栈。 参数传递规则:按照参数表声明的顺序,从左向右,前4个参数依次放入RCX,RDX,R8,R9中。 全部浮点数参数: func1(float a,

《嵌入式系统》 |(六) 定时器(计数器) 知识梳理

自古美人都是妖i 提交于 2020-03-17 09:44:19
系列索引 《嵌入式系统》 | 嵌入式系统 重点知识梳理 目录 嵌入式系统中延时实现的方式及其优缺点 STM32 F103中的基本定时器、通用定时器及高级定时器的区别(包括所在总线及功能区别) 定时器的时钟源有哪些? 定时器的工作模式 PWM的作用及其实现方式 定时器中预分频、自动重装载、捕获/比较寄存器的初始值的设置 定时器延时时间的计算 定时器相关库函数的使用(arr,psc及ccr值的设置,定时器中断的使用) 嵌入式系统中延时实现的方式及其优缺点 嵌入式系统中延时的实现 1. 完全硬件实现 使用 电容及电阻 即可完成特定的 振荡延时 作用 延时时间无法改变 2. 纯软件方式(不精确,占用CPU) 3. 微控制器中的可编程定时/计数器 STM32 F103中的基本定时器、通用定时器及高级定时器的区别(包括所在总线及功能区别) 功能: 计数 = 基本定时器 + 输入输出,捕获 = 通用定时器 + 刹车信号输入,7路信号互补输出 = 高级定时器 定时器的时钟源有哪些? 内部时钟(系统时钟),来自于输入为APB1或APB2的一个倍频器 外部时钟模式 1: 外部输入引脚 ;2:外部触发输入ETR 内部引脚 其他定时器 定时器的工作模式 计数模式(以普通定时器为例) 输出比较模式 输入捕获模式 先设置输入捕获为上升沿检测,记录发生上升沿时TIMx_CNT的值。然后配置捕获信号为下降沿捕获

深入理解计算机系统之程序的机器级表示部分学习笔记

那年仲夏 提交于 2020-03-16 08:08:11
不论我们是在用C语言还是用JAVA或是其他的语言编程时,我们会被屏蔽了程序的机器级的实现。机器语言不需要被编译,可以直接被CPU执行,其执行速度十分 快。但是机器语言的读写性与移植性较高级语言低。高级语言被编译后便成为了汇编语言,汇编语言 十分接近 机器语言。之后汇编代码会转化为机器语言。虽然现代 的编译器能帮助我们将高级语言转化为汇编语言,解决了不少问题,但是对于一个严谨的程序员来说,需要做到能够阅读和理解汇编语言。我们主要围绕Intel来讲 解。 一 Intel处理器的历史演变 Intel处理器最的早是8086, 它是 十六 位的微处理器,作为第一代单芯片,8086知名度是相当的高。之后又有80286、i386、i486、Pentium、PentiumPro、 Pentium/MMX、PentiumⅡ、PentiumIII等等的一系列处理器出现了。每个时间上相继的处理器都是向后兼容的。Intel称其指令集为IA32,也就是Intel32位体系结 构,也就是我们平常所说的x86。 二 程序编码 我们写一个C程序,用Unix命令行编译p1.c和p2.c两个文件。即为 unix> gcc -02 -o p p1.c p2.c 其 中 -02 告诉编译器使用第二级优化。而二级优化则是在性能优化与使用方便之间一个最好的权衡。所以代码经常使用二级优化。 (1)机器级代码