汇编指令

内核栈回溯原理学习应用

独自空忆成欢 提交于 2020-04-08 08:45:36
  这篇主要是杭州操作系统大会前辈的文档进行学习,因为文档公开了故而总结学习一下,如若其中有侵权的地方,请及时联系我,谢谢 ........................................................................................................................................................................................................................... 问题:     一台客户现场机器,运行一周左右偶然发生一次应用段错误或者double free问题,cpu可能是arm、mips、x86等架构,有什么好的方法捕捉异常日志? 困难点:   1. 研发环境常使用gdb+coredump技术解决此类问题,客户现场等非研发环境的偶现应用异常问题,不方便使用,操作起来有一定难度   2. 不同架构(arm32、arm64、mips、x86),不同版本C库和gdb,栈回溯效果差异很大。PC ubuntu系统测试,glibc 2.15,发生应用double free,直接打印栈回溯信息,其他架构的CPU上测试没有这个功能。arm64架构的某款CPU上测试

长文分享丨TI AM5718的PRU开发详解

跟風遠走 提交于 2020-04-07 17:33:08
PRUSS简介 TI AM5 718 系列 OK571 8开发板 有两个PRU-ICSS(ProgrammableReal-Time Unit Subsystem and Industrial CommunicationSubsystem),可以独立编程实现一些实时性要求高的个性化需求,实现产品的差异化。 本文介绍PRU处理器架构,开发,调试方法。在系统架构上,PRUSS是连接L3_MAIN内部总线上的一个模块,与系统中其它主模块如ARM,DSP一样,可以访问芯片上的其它外设。 PRUSS包括两个PRU,通过自己的32-bitinterconnect总线与子系统的中断控制器、指令内存、数据内存、共享内存、外设模块相连。 PRU不是一个加速器,它是32-bitLoad/Store RISC架构小端处理器,每个PRU有32个通用寄存器R0~R31,12Kbyte指令RAM,8Kbyte数据RAM和32byte共享RAM。指令RAM是独立的,互相之间不能访问,但数据RAM可以通过映射地址互相访问;专用的21个输入引脚和21个输出引脚。 设备中的pru-icss1和pru-icss2集成功能: •PD_L4PER power domain instantiation • two master ports (PRU0and PRU1 core initiators) on the

汇编

青春壹個敷衍的年華 提交于 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

单片机常用名词解释与常用逻辑电路

↘锁芯ラ 提交于 2020-04-06 16:52:45
MCS-51系列单片机 MCS-51系列单片机分为两大系列,即51子系列与52子系列。 51子系列:基本型,根据片内ROM的配置,对应的芯片为8031、8051、8751、8951 52子系列:增强型,根据片内ROM的配置,对应的芯片为8032、8052、8752、8952 这两大系列单片机的主要硬件特性如下表: 从上表中可以看到,8031、8031、8032、80C32片内是没有ROM的,对应着上表看,我们可以发现,51系列的单片机的RAM大小为128B,52系列的RAM大小为256B,51系列的计数器为两个16位的,52系列的计数器为三个16位计数器。51系列的中断源为5个,52系列的中断源为6个。 8051与80C51的区别: 80C51单片机是在8051的基础上发展起来的,也就是说在单片机的发展过程中是先有8051,然后才有80C51的。 8051单片机与80C51单片机从外形看是完全一样的,其指令系统、引脚信号、总线等完全一致(完全兼容),也就是说在8051下开发的软件完全可以在80C51上应用,反过来,在89C51下开发的软件也可以在8051上应用。这两种单片机是完全可移植的。 既然这两种单片机外形及内部结构都一样,那它们之间的主要差别在哪里呢? 8051与80C51单片机的主要差别就在于芯片的制造工艺上。80C51的制造工艺是在8051基础上进行了改进。

volatile 关键字

拟墨画扇 提交于 2020-04-04 17:53:52
摘抄并用于学习笔记 1. volatile 简介   volatile 是并发编程中另一知识点,与 Synchronized 各领风骚。   synchronized 是阻塞式同步,在线程竞争激烈的情况下会升级成重量级锁。而 volatile 就是 java 虚拟机提供的最轻量级的同步机制。Java 内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行操作后何时会写到主内存中?这个时机对普通变量是没有规定的,而针对 volatile 修饰的变量给 Java 虚拟机特殊的约定,线程对 volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读的现象,从而保证数据的“可见性”。   现在我们有了一个大概的印象就是:被 volatile 修饰的变量能够保证每个线程获取该变量时是新值,从而避免出现数据脏读的现象。 2. volatile 实现原理   在生成汇编代码时会在 volatile 修饰的共享变量进行写操作的时候多出 Lock 前缀的指令。   为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1,L2 或 其他)后再进行操作,但操作完不知道何时会写到内存。如果对声明了 volatile 的变量进行写操作,JVM 就会向处理器发送一条 Lock 前缀的指令

[51单片机学习笔记ONE]-----LED灯的多种使用方法

≯℡__Kan透↙ 提交于 2020-03-30 01:54:39
一.交替闪烁8个LED灯,时间间隔为1s 1 /****************************************************** 2 实验名称: 交替闪烁8个LED灯,时间间隔1s 3 实验时间: 2014年12月2日 4 ******************************************************/ 5 6 #include <reg51.h> 7 8 void delay(unsigned char a); 9 10 void main() 11 { 12 while(1) 13 { 14 /*根据原理图,P0置高电平灯亮*/ 15 P0 = 0x00; 16 delay(45); 17 18 /*根据原理图,P0置低电平灯灭*/ 19 P0 = 0xFF; 20 delay(45); 21 } 22 } 23 24 /*延时1s,有误差。计算公式大约可以用((((c*2)+3)*b+3)*a)*/ 25 void delay(unsigned char a) 26 { 27 unsigned char b,c; 28 for(;a>0;a--) 29 for(b=152;b>0;b--) 30 for(c=70;c>0;c--); 31 32 } 实验的代码很简单。但是实际操作过程中还是遇到了以下问题:

第一章计算机系统概论习题

☆樱花仙子☆ 提交于 2020-03-28 00:36:53
1:单选题 冯.诺依曼计算机工作方式的基本特点是( )。 A: 程序一边输入计算机一边执行 B: 程序直接从磁盘读到CPU执行 C: 程序中的指令和数据先装入内存,执行时按地址访问并自动按序执行程序 D: 程序自动执行,而数据手工输入 2:单选题 以下是关于冯诺依曼结构计算机中指令和数据表示形式的叙述,其中正确的是( )。 A: 指令和数据可以从形式上加以区分 B: 指令以二进制形式存放,数据以十进制形式存放 C: 指令和数据都以二进制形式存放 D: 指令和数据都以十进制形式存放 3:单选题 下列是有关计算机中指令和数据存放位置的叙述,其中正确的是( )。 A: 指令和数据任何时候都存放在外存中 B: 程序被启动前指令和数据都存放在外存中,而启动后指令和数据被装入内存 C: 指令存放在内存中,数据存放在外存中 D: 指令和数据任何时候都存放在内存中 4:单选题 以下有关程序编写和执行方面的叙述中,错误的是( )。 A: 可用高级语言和低级语言编写出功能等价的程序 B: 高级语言和汇编语言源程序都不能在机器上直接执行 C: 编译程序员必须了解机器结构和指令系统 D: 汇编语言是一种与机器结构无关的编程语言 5:单选题 以下给出的软件中,属于系统软件的是( )。 A: Windows XP B: MS Word C: 金山词霸 D: RealPlayer 6:单选题 冯。诺依曼计算机中

Tiny4412使用C语言实现流水灯的裸机程序

。_饼干妹妹 提交于 2020-03-25 08:37:29
3 月,跳不动了?>>> 本文转自: http://www.techbulo.com/1347.html 在前边我们使用汇编完成了一个流水灯实验: https://my.oschina.net/cht2000/blog/1622224 但是,汇编语言可读性太差,在这一节我们用 C语言来实现了同样的功能,而以后的试验也尽量用 C语言实现。 我们在编写上位机程序时,C语言程序执行的第一条指令,并不在main函数中。生成一个 C程序的可执行文件时,编译器通常会在我们的代码中加上几个被称为启动文件的代码—— crtl.o 、crti.o、crtend.o 、crtn.o 等,它们是标准库文件。这些代码设置C程序的堆栈等,然后调用 main 函数。它们依赖于操作系统,在裸板上这些代码无法执行,所以需要自己写一个。 这段代码很简单, 关键指令只有2条。自己编写的 start .S启动文件内容如下: .text .globl _start _start: ldr sp, =0x02060000 // 调用C函数之前必须设置栈,栈用于保存运行环境,给局部变量分配空间 // 参考ROM手册P14, 我们把栈指向BL2上方1K处(1K已经够用), // 即:0x02020000 (iRAM基地址) + 5K(iROM代码用) + 8K(BL1用) + 16K(BL2用) + 1K(用作栈)) bl

第二章 寄存器基础概念

喜你入骨 提交于 2020-03-24 02:28:53
第二章 寄存器 1. 一个典型的 CPU 由运算器,控制器,寄存器等器件组成。 内部总线实现 CPU 内部各个器件之间的联系。 外部总线实现 CPU 和主板上其它器件的联系。 2.8086 是 Intel 系列中 16 位微处理器,地址总线 20 位。 8086 有 14 个 16 位寄存器: AX , BX , CX , DX ,是通用寄存器 SI , DI , BP , SP ,是基址和变址寄存器 CS , SS , DS , ES ,是段寄存器 IP , FLAGS 是指令指针和标志寄存器。 3. 通用寄存器:一个 CPU 有多个寄存器,用来存放十六位一般性数据 下面以 AX 为例 4. 汇编指令 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 中; 5.所有的内存单元构成的存储空间是一个一维的线性空间。每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。8086CPU给出物理地址的方法 , CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;

[汇编语言学习笔记][第二章寄存器]

十年热恋 提交于 2020-03-24 02:28:16
第二章 寄存器 8086有14个寄存器,分别为AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。 2.1 通用寄存器 8086CPU的所有寄存器都是16位,可以存放两个字节。 AX , BX , CX , DX 这四个寄存器通常用来存放一般性数据,被称为 通用寄存器 为了兼容之前的8位通用寄存器,将这4个寄存器拆开为8个8位寄存器分别为 H的含义High,高位,L的含义Low,低位 AX=AH+AL BX=BH+BL CX=CH+CL DX=DH+DL 2.2 字在寄存器的存储 因为..x8086架构的原因,未来的字长都指的的是16位(8086机器的一个寄存器大小) 2.3 几条汇编指令 mov ax,18 mov ah,78 add ax,8 mov ax,bx add ax,bx 寄存器的名称不区分大小写 若AX=00C5H,执行add al,93H 后等于多少呢 我原来以为可以变成0158H,看答案才知道因为只是al相见,所以进位必须舍去 答案为0058H 2.5 16位结构CPU 为什么叫16位呢? 运算器一次最多处理16位的数据 寄存器的最大宽度为16位 寄存器和运算器之间的通路为16为 2.6 8086CPU给出物理地址的方法 问题:8086有20位数据总线(1MB寻址能力),但是它是16位CPU内部总线(64K),只能送出16位地址