标志寄存器

汇编

青春壹個敷衍的年華 提交于 2020-04-06 22:00:40
一、介绍 汇编语言是一种面向机器的低级程序设计语言 汇编语言以助记符形式表示每一条计算机指令 助记符是便于人们记忆、并能描述指令功能和指令操作数的符号 助记符一般就是表明指令功能的英语单词或其缩写 MOV AX , 30H ADD AX , 50H MOV [2100H] , BX HLT 汇编语言的主要特点: 汇编语言程序与处理器指令系统密切相关 程序员可直接、有效的控制硬件系统 形成的可执行文件运行速度快、占用主存容量少 汇编语言程序中可以出现不同进制的数,但一定要有标识字母加以区别 数据的组织形式:位(bit)、字节(Byte)、字(Word)、双字(Dword) 无论是数据还是指令在计算机中都是以二进制形式存放的 无符号整数——所有有效位都当作数值处理,当然这样的数全部都是正数,故不保留符号位,常用于表示地址,或运算中表示计数值等 ASCII编码——在内存中使用一个字节(8位二进制数)存放一个字符(它的ASCII码),最高位没用(写0).在通信过程中最高位有时用于奇偶校验 数码0~9:30H~39H 大写字母A~Z:41H~5AH 小写字母a~z:61H~7AH 空格:20H 带符号数的表示方法——采用补码表示法(补码存储、补码运算) 与、或、异或、非运算 二、计算机硬件相关知识 1、硬件 中央处理单元CPU 控制器、运算器、寄存器 存储器 主存储器:RAM和ROM

20145205 《信息安全系统设计基础》第5周学习总结

喜你入骨 提交于 2020-03-23 03:17:00
教材学习内容总结 程序编码 GCC将源代码转化为可执行代码的步骤: C预处理器——扩展源代码-生成.i文件 编译器——产生两个源代码的汇编代码-——生成.s文件 汇编器——将汇编代码转化成二进制目标代码——生成.o文件 链接器——产生可执行代码文件 机器级代码 1.机器级编程的两种抽象 (1)指令集结构ISA 是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。 (2)机器级程序使用的存储器地址是虚拟地址 看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。 2.几个处理器: 程序计数器(CS:IP) 整数寄存器(AX,BX,CX,DX) 条件码寄存器(OF,SF,ZF,AF,PF,CF) 浮点寄存器 一条机器指令只执行一个非常基本的操作。 程序编码 书上107页的代码,需要用到反汇编器。在Linux系统中,带‘d’命令行标志的程序OBJDUMP可以充当这个角色。 数据格式 数据传送指令的三个变种: movb 传送字节 movw 传送字 movl 传送双字 访问信息 一个IA32中央处理单元(CPU)包含8个存储32位置的寄存器 操作数指示符 立即数 寄存器 存储器 寻址方式 (1)立即数寻址方式 格式:$后加用标准c表示法表示的整数,如 $0xAFF (2)寄存器寻址方式 如%eax,与汇编中学过的AX寄存器类比。 (3

关于单片机中断控制

左心房为你撑大大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 (排队等待

32位Intel CPU所含有的寄存器

拈花ヽ惹草 提交于 2020-02-29 06:16:52
4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些 低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄 存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字 节的信息。 寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、 除、输入/输出等操作,它们的使用频率很高; 寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作 中,当移多位时,要用CL来指明移位的位数;

STM32的SPI问题。

做~自己de王妃 提交于 2020-01-31 09:25:56
问题描述 : 之前一直使用的单片机是LPC2109,对其SPI很熟悉。基本就是原本拿来稍作修改就用。 由于某种原因需要使用STM32,然后设备的驱动是之前写好的,只修改了一些硬件控制端口,由于硬件驱动使用到了SPI接口,而我是把SPI接口提供了出来,本来以为简单修改SPI配置到对应单片机就行了。简单看了STM3的SPI配置,轻车熟路改代码,瞬间体现了良好的接口有哈。 编译,生成目标文件,下载运行。 并没有出现预想的结果。由于之前的设备驱动是能用的,所以排除设备驱动问题。 开始以为是由于对STM32端口配置的不熟悉导致的、看手册,看别人代码,没发现问题。 debug........ 问题定在SPI代码上。查看配置,一样啊。郁闷!!! 把自己配置考到别人能用的代码中,可以使用。更加郁闷!!!! debug看寄存器。对比能运行代码寄存器状态。发现运行到一段代码的时候寄存器不同 SPI_CR 0x0043 SPI_CR 0x0002 看datasheet.OVR置位。问题应该就在这了。可是为什么呢?????? 搜此问题,此处出自 这里 溢出错误(OVR)  溢出错误表示连续传输多个数据时,后一个数据覆盖了前一个数据而产生的错误。  状态标志SPIF表示的是数据传输正在进行中,它对数据的传输有较大的影响。主器件的SPIF有效由数据寄存器的空标志SPTE=0产生

汇编语言指令

拈花ヽ惹草 提交于 2020-01-26 21:26:19
指令助记符 如MOV, SUB这些词分别表示传送, 减法. 汇编源程序时, 系统使用内部对照表将每条指令的助记符翻译成对应的机器码 目的操作数 目的操作数一共有两个作用 参与指令操作 暂时储存操作结果 源操作数 源操作数主要提供原始数据或操作对象, 面向所有寻址方式. 例如, 在指令SUB AX, BX 中 的值作为减数提供给指令SUB 操作符 dup:表示定义重复的数据,和db、dw、dd配合使用,db 3 dup(‘A’)相当于db ‘AAA’。 注释 这是对源程序的说明, 在汇编中用 ; 号, 后面的内容将被注释   介绍指令前, 先熟悉下这些在指令中的符号(必须要记得) imme: 立即数 DST: 目的操作数 SRC: 源操作数 mem: 存储器操作数 OPR: 操作数 reg: 通用寄存器 EA: 偏移地址(偏移量) Sreg: 段寄存器 Port: 端口地址 Label: 标号 指令集不外乎下面几种: 数据传送指令 算术运算指令 逻辑运算与移位指令【整型 与 浮点型的处理】 串操作指令 程序控制指令 处理器控制指令 伪指令 一、数据传送【也叫转移】指令 通用数据传送指令. l MOV DST, SRC ;传送指令: 把源操作数的内容送入目的操作数 传送字或字节. 注意: 立即数做源操作数时, 立即数的长度必须小于等于目的操作数的长度 操作数DST, SRC分别为reg

[转载] 32位汇编指令笔记

守給你的承諾、 提交于 2020-01-19 23:15:54
32位CPU所含有的寄存器有: PQJI~u9te} 4个数据寄存器(EAX、EBX、ECX和EDX) <,\Op=$l3I 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) ']'V?@H]4 6个段寄存器(ES、CS、SS、DS、FS和GS) ZaKT~f%%z 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) f*HEw 1、数据寄存器 s ~ Xa= +D 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 3Gyw^ {J 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 {!]7=K)W9 对低16位数据的存取,不会影响高16位的数据。 COnb@uD 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 90rY:!e 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 ~bsL W:.’ 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 %‘L+y 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高; E

通过汇编指令影响标志寄存器位

筅森魡賤 提交于 2020-01-16 03:27:45
1、进位标志CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 2、奇偶标志PF(Parity Flag):奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。 如果 最低有效字节 “1”的个数为偶数,则PF的值为1,否则其值为0。 3、辅助进位标志AF(Auxiliary Carry Flag): 在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0: (1)、在字操作时,发生低字节向高字节进位或借位时; (2)、在字节操作时,发生低4位向高4位进位或借位时。 4、零标志ZF(Zero Flag):零标志ZF用来反映运算结果是否为0。 如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。 5、符号标志SF(Sign Flag):符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。 如果最高位为1,则SF为1,否则为0 6、溢出标志OF(Overflow Flag):溢出标志OF用于反映有符号数加减运算所得结果是否溢出。 如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。 OF与CF的区别在于, OF表示有符号数运算结果是否超出范围 CF表示无符号为运算结果是否超出范围 溢出主要是给有符号运算使用的,在有符号的运算中,有如下的规律

【STM32H7教程】第42章 STM32H7的DMA基础知识和HAL库API

邮差的信 提交于 2020-01-10 11:24:17
完整教程下载地址: http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第42章 STM32H7的DMA基础知识和HAL库API 本章节为大家讲解DMA1(Direct memory access controller,直接存储器访问控制器)和DMA2,相比前面章节的BDMA,功能要强些,属于通用型DMA。 42.1 初学者重要提示 42.2 DMA基础知识 42.3 DMA的HAL库用法 42.4 源文件stm32h7xx_hal_dma.c 42.5 总结 42.1 初学者重要提示 DMA1和DMA2均支持8路通道。虽然是8路,但这8路不是并行工作的,而是由DMA的仲裁器决定当前处理那一路。 DMA最大传输次数65535次,每次传输单位可以是字节、半字和字。 DMA的循环模式不可用于存储器到存储器模式。 DMA1和DMA2带的FIFO是4个32bit的空间,即16字节。 使用DMA的FIFO和突发需要注意的问题较多,详情可看本章2.7小节。 STM32H7的参数手册DMA章节对存储器到存储器,外设到存储器,外设到存储器模式的传输过程进行了讲解,推荐大家看完本章节后读一下。 42.2 DMA基础知识 DMA的几个关键知识点放在开头说: 由于总线矩阵的存在,各个主控的道路四通八达,从而可以让DMA和CPU同时开工

x86常用汇编寄存器

时光怂恿深爱的人放手 提交于 2020-01-10 04:51:47
通用寄存器 32位 16位 高8位 低8位 EAX AX AH AL EBX BX BH BL ECX CX CH CL EDX DX DH DL ESI SI EDI DI ESP SP EBP BP E:Extend,X:逻辑与算数 EAX (Extend Add):累加器,在乘法和除法指令中自动使用;Win32中,一般用在函数的返回值中。 EBX (Extend Base):基地址寄存器,DS(数据段)中的数据指针。 ECX (Extend Count):计数器,CPU自动使用ECX作为循环计数器,在自妇产和循环操作中常用,在循环指令(LOOP)或串操-作中,ECX用来进行循环计数,每执行一次循环,ECX都会被CPU自动减一。 EDX (Extend Data):数据寄存器。 以上的寄存器常用来保存各种需要计算的值。 EBP (Extend Base Pointer):基地址指针寄存器,SS(堆栈段)中数据指针。EZBP有高级语言用来引用参数和局部变量,通常称为堆栈基地址寄存器。 ESP (Extend Stack Pointer):堆栈指针寄存器,SS(堆栈段)中堆栈指针,ESP用来寻址堆栈上的数据,ESP寄存器一般不参与算数运算,通常称为堆栈指针寄存器。 ESI (Extend Source Improve):源变址寄存器,字符串操作源指针。 EDI (Extend