数据寄存器

计算机如何执行一条机器指令

一曲冷凌霜 提交于 2019-11-28 15:36:42
文章目录 指令运行过程: 微程序控制基本概念: 几个周期区别 寻址方式: 指令运行过程:  在 上篇 我们谈到,计算机处理一段程序,就会将程序翻译成机器指令,然后执行完成相应的任务。执行指令的过程分为取指令阶段、分析取数阶段和执行阶段。 1.取指阶段: 图中概念解释: PC(程序计数器),MAR(存储地址寄存器),CU(控制单元),IR(指令寄存器) AB(地址总线) ,DB(数据总线), CB(控制总线)。 取指令阶段完成的任务是将现行指令从主存中取出来并送至指令寄存器中去,具体的操作如下: ① 将程序计数器(PC)中的内容先送至存储器地址寄存器(MAR),然后送至地址总线(AB). ② 由控制单元(CU)经控制总线(CB)向存储器发读命令. ③ 从主存中取出的指令通过数据总线(DB)送到存储器数据寄存器(MDR). ④ 将MDR的内容送至指令寄存器(IR)中. ⑤ 将PC的内容递增,为取下一条指令做好准备. 2.分析取数阶段: 取出指令后,指令译码器(ID)可识别和区分出不同的指令类型.此时计算机进入分析取数阶段,以获取操作数.由于各条指令功能不同,寻址方式也不同,所以分析取数阶段的操作是各不相同的. 对于无操作数指令,直接进入执行阶段。 取数要计算操作数有效地址。对于不同的寻址方式,有效地址的计算方法是不同的,有时需要多次访问主存才能取出操作数(间接寻址)。如果通用寄存器中有

缓冲区溢出实例(一)--Windows

不羁的心 提交于 2019-11-28 06:16:38
一、基本概念 缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等。 在Windows XP或2k3 server中的SLMail 5.5.0 Mail Server程序的POP3 PASS命令存在缓冲区溢出漏洞,无需身份验证实现远程代码执行。 注意,Win7以上系统的防范机制可有效防止该缓冲区漏洞的利用: DEP:阻止代码从数据页被执行; ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化。 二、实验环境准备: SLMail 5.5.0 Mail Server ImmunityDebugger_1_85_setup.exe mona.py 下载地址: https://slmail.software.informer.com/download/ https://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/Immunity-Debugger.shtml https://github.com/corelan/mona mona手册 https://www.corelan.be/index.php/2011/07/14/mona-py-the

CRC(循环冗余校验)

与世无争的帅哥 提交于 2019-11-28 05:57:32
在线计算: http://www.ip33.com/crc.html 原文链接:https://blog.csdn.net/liyuanbhu/article/details/7882789 写给嵌入式程序员的循环冗余校验(CRC)算法入门引导 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式。 其实,在网上有一篇介绍CRC 算法的非常好的文章,作者是Ross Williams,题目叫:“A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS”。我常将这篇文章推荐给向我询问CRC算法的朋友,但不少朋友向我抱怨原文太长了,而且是英文的。希望我能写篇短点的文章,因此就有了本文。不过,我的水平比不了Ross Williams,我的文章肯定也没Ross Williams的写的好。因此,阅读英文没有障碍的朋友还是去读Ross Williams的原文吧。 本文的读者群设定为软件开发人员,尤其是从事嵌入式软件开发的程序员,而不是专业从事数学或通讯领域研究的学者(我也没有这个水平写的这么高深)。因此

C# ModBus 读取数据

喜你入骨 提交于 2019-11-28 05:39:04
简单介绍:   项目上需要与多家公司做接口对接。我们提供接口的有,其他公司提供的接口也有。所有的接口全部对接完了,遇到一个非常棘手的问题,需要获取甲方船厂设备上的状态,就给了一个文档,文档上写了IP、端口、协议、一些地址,没有API文档,拿到手上一面懵逼,这怎么玩儿。。。。 文档如下: 百度百科:   Modbus是一种串行 通信协议 ,是Modicon公司(现在的 施耐德电气 Schneider Electric)于1979年为使用 可编程逻辑控制器 (PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。   看上去好像跟Socket差不多,本身又不是工业领域出身的,大概知道是一种工业领域通用的一套通信标准,下面直接上DEMO示例 第一步:下载类库 使用的类库已上传百度云盘: 链接:https://pan.baidu.com/s/1JtaGC0r17jjnQPMhkMKRJg 提取码:wagl 第二步:引入类库 第三步:引入命名空间 1 using HslCommunication.ModBus; 2 using HslCommunication; 第四步:初始化对象 1 初始化方式一、 2 private ModBusTcpClient busTcpClient = new

STM32内部FLASH介绍

China☆狼群 提交于 2019-11-28 04:51:52
一、介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。 RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。 Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失, RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失。 STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。 stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。 一般情况下,程序文件是从 0x0800 0000 地址写入,这个是STM32开始执行的地方,0x0800 0004是STM32的中断向量表的起始地址。 在使用keil进行编写程序时,其编程地址的设置一般是这样的: 程序的写入地址从0x08000000(数好零的个数)开始的,其大小为0x80000也就是512K的空间,换句话说就是告诉编译器flash的空间是从0x08000000-0x08080000,RAM的地址从0x20000000开始,大小为0x10000也就是64K的RAM。这与STM32的内存地址映射关系是对应的

韦东山嵌入式Linux学习笔记05--存储管理器

只愿长相守 提交于 2019-11-28 01:47:34
SDRAM:    原理图如下: jz2440 v3开发板上面用的内存芯片为钰创科技公司生产的EM63A165TS,一片内存大小为32MB大小,一共有两块,共64MB的大小. SDRAM接的是BANK 6,所以他的起始地址是 0x30000000. SDRAM的基本寻址关系 SDRAM的存储结构逻辑如上图, SDRAM内部是一个存储阵列,阵列就如同表格一样,将数据"填进去".和表格的检索原理一样,先指定一个行,再指定一个列,两点确定一个坐标,就可以准确地找到所需要的 单元格,这就是SDRAM寻址的基本原理.这个单元被称为存储单元,这个表格(存储阵列)就是逻辑Bank(就是L-Bank).SDRAM一般含有四个L-Bank. 对SDRAM的访问可以分为如下几个步骤:   1.CPU发出的片选信号nSCS0有效,它选中SDRAM芯片.   2.SDRAM有四个L-Bank,需要两根地址线来选中其中的一个,根据开发板的设计, 选用了ADDR24和ADDR25作为L-Bank的选择信号.   3.对被选中的芯片进行统一的行/列(存储单元)寻址.     根据SDRAM芯片的列地址线数目设置CPU的相关寄存器后,CPU就会从32位的自动分出L-Bank选择信号, 行地址信号,列地址信号,然后发出行地址信号,列地址信号. L-Bank选择信号在发出行地址信号的同时发出,并维持到列地址信号结束.

汇编基础知识

邮差的信 提交于 2019-11-27 23:46:34
************************************************************************************************** 寄存器 ************************************************************************************************** 1. 通用寄存器   通用寄存器包括了8个16/32位的寄存器:AX/EAX、BX/EBX、CX/ECX、DX/EDX、SP/ESP、BP/EBP、DI/EDI及SI/ESI。其中AX/EAX、BX/EBX、CX/ECX、DX/EDX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:   AX/EAX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。   BX/EBX在计算存储器地址时,可作为基址寄存器使用。   CX/ECX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。DX在作双字长运算时

CAN通信详解

点点圈 提交于 2019-11-27 18:10:50
转:https://blog.csdn.net/CSDN_Yoa/article/details/81384924 并结合自己项目上CAN的配置觉得该文章很好希望帮助想了解CAN的网友。 本章参考资料:《STM32F4xx 中文参考手册2》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。 若对CAN通讯协议不了解,可先阅读《CAN总线入门》、《CAN-bus规范》文档内容学习。 关于实验板上的CAN收发器可查阅《TJA1050》文档了解。 40.1 CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的 德国 BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为 汽车计算机控制系统 和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境。 40.1.1 CAN物理层 与I2C、SPI等具有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN

汇编语言中 cs, ds,ss 的区别

孤街浪徒 提交于 2019-11-27 15:36:13
CS(Code Segment):代码 段寄存器 ; DS(Data Segment):数据 段寄存器 ; SS(Stack Segment): 堆栈 段寄存器 ; ES(Extra Segment):附加段寄存器。 当一个程序要执行时,就要决定程序代码、数据和 堆栈 各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。 1.代码段寄存器CS:存放当前正在运行的程序代码所在段的段基值,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供。   2, 数据段寄存器DS:指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基值。   3, 堆栈 段寄存器SS:指出当前堆栈的底部地址,即存放堆栈段的段基值。 CS、DS就是所谓的段寄存器。一个程序往往分为好几个段。CS中保存了代码段的基地址,DS保存的是数据段的基地址,而IP中保存的是所要执行的下一条指令的地址 https://zhidao.baidu.com/question/347752668.html 来源: https://www.cnblogs.com/xiangtingshen/p/11368623.html

实时时钟芯片DS1302

我与影子孤独终老i 提交于 2019-11-27 08:06:29
BCD码 用0b0000-0b1001表示0-9 0b1001加1自动进位为0b00010000 特性 1、DS1302是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软件自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。 2、拥有31字节数据存储RAM。 3、串行I/O通信方式,相对并行来说比较节省IO口的使用。 4、DS1302的工作电压比较宽,在2.0~5.5V的范围内都可以正常工作。 5、DS1302这种时钟芯片功耗一般都很低,它在工作电压2.0V的时候,工作电流小于300nA。 6、DS1302共有8个引脚,有两种封装形式,一种是DIP-8封装,芯片宽度(不含引脚)是300mil,一种是SOP-8封装,有两种宽度,一种是150mil,一种是208mil。 7、当供电电压是5V的时候,兼容标准的TTL电平标准,这里的意思是,可以完美的和单片机进行通信。 8、由于DS1302是DS1202的升级版本,所以所有的功能都兼容DS1202。此外DS1302有两个电源输入,一个是主电源,另外一个是备用电源,比如可以用电池或者大电容,这样做是为了在系统掉电的情况下,我们的时钟还会继续走。 硬件信息 引脚功能 寄存器介绍 寄存器内部采用BCD码 指令讲解: DS1302 的一条指令一个字节共 8 位,其中第 7 位(即最高位)固定为 1