汇编语言
文章平均质量分 55
加油11
模仿模仿再模仿!
展开
-
汇编语言的内嵌编程
1 C语言中的内嵌汇编初体验内嵌汇编示例 注意:上图中的输出变量,不管是否对其进行操作,最终其所对应的寄存器的值都会保存到这个变量中,所以有时候会出现并没有对输出变量进行操作而输出变量被修改成了一个莫名其妙值的情况。之所以值是莫名其妙的,是因为有些寄存器的是是脏的。编译器做了什么?将result关联到某个合适的寄存器(注意这里只是建议,编译器并不一定真的会将result关联到具体的寄存器)。 将原创 2017-08-29 22:30:11 · 470 阅读 · 1 评论 -
CS、DS、SS、ES
在CPU中,CS的全拼为“Code Segment”,翻译为“代码段寄存器”,对应于内存中的存放代码的内存区域,用来存放内存代码段区域的入口地址(段基址)。在CPU执行指令时,通过代码段寄存器(CS,Code Segment)和指令指针寄存器(IP,Instruction Pointer)来确定要执行的下一条指令的内存地址。 在CPU中类似的寄存器有:DS:是 Data S原创 2017-11-14 11:08:59 · 8603 阅读 · 0 评论 -
常用ARM指令(数据处理、跳转等指令)
1 常用ARM指令1:数据处理指令数据传输指令 mov mvn mov(move) mov r1, r0 @两个寄存器之间数据传递 mov r1, #0xff @ 将立即数赋值给寄存器 mvn和mov用法一样,区别是mov是原封不动的传递,而mvn是按位取反后传递 按位取反的含义: 譬如r1 = 0x000000ff,然后mov r0, r1原创 2017-10-17 21:49:11 · 1312 阅读 · 0 评论 -
ARM汇编伪指令
1 伪指令的意义伪指令不是指令,伪指令和指令的根本区别是经过编译后会不会生成机器码(有些伪指令会被转换成对应的汇编指令,再生成响应的机器码,比如ldr伪指令)。伪指令的意义在于指导编译过程。伪指令是和具体的编译器相关的,我们使用gnu工具链,因此学习gnu环境下的汇编伪指令。2 gnu汇编中的一些符号@ 用来做注释。可以在行首也可以在代码后面同一行直接跟,和C语言中//类似# 做注释,一原创 2017-10-22 12:27:11 · 385 阅读 · 0 评论 -
ldm/stm与栈的处理
1 为什么需要多寄存器访问指令ldr/str每周期只能访问4字节内存,如果需要批量读取、写入内存时太慢,解决方案是stm/ldm。举例: stmia sp, {r0 - r12}将r0存入sp指向的内存处(假设为0x30001000);然后地址+4(即指向0x30001004),将r1存入该地址;然后地址再+4(指向0x30001008),将r2存入该地址······直到r12内容放入(0x30原创 2017-10-21 11:04:56 · 582 阅读 · 0 评论 -
协处理器和协处理器指令
1 协处理器cp15操作指令mcr & mrcmrc用于读取CP15中的寄存器mcr用于写入CP15中的寄存器2 什么是协处理器SoC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任务。ARM设计上支持多达16个协处理器,但是一般SoC只实现其中的CP15(cp:coprocessor)。协处理器和MMU、cache、TLB等处理有关,功能上和操作系统的虚拟地址映射原创 2017-10-18 22:58:06 · 1222 阅读 · 0 评论 -
ARM汇编指令集相关概念
1 ARM汇编基本概念1.1 两个概念:指令与伪指令(汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。(汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。1.2 两种不同风格的ARM指令ARM官方的ARM汇编风格:指令一般用大写、Windows中IDE开发环原创 2017-10-12 22:30:43 · 307 阅读 · 0 评论 -
ARM的37个寄存器
1 ARM寄存器这里看到的就是ARM内核里面的所有寄存器了,一共有37个。我们前面说过,ARM体系一共有7种模式,其中用户模式和系统模式拥有物理空间上完全相同的寄存器,而其它5种异常模式都有一些自己独立的寄存器。我们看图中左边显示的是当前模式的可见的寄存器,右边显示的是其它模式备用的寄存器。其中黑色的部分为当前模式与用户模式共用的寄存器,而彩色部分为各个寄存器独立物理空间的寄存器。这样安排的好处是当原创 2017-09-25 22:30:14 · 768 阅读 · 0 评论 -
ARM的编程模式和7种工作模式
1 ARM的基本设定ARM 采用的是32位架构(S5PV210)。ARM 约定:Byte : 8 bitsHalfword :16 bits (2 byte)Word : 32 bits (4 byte)大部分ARM core 提供:ARM 指令集(32-bit) Thumb 指令集(16-bit )Thumb2指令集(16 & 32bit)Jazelle cores 支持原创 2017-09-23 16:37:32 · 932 阅读 · 0 评论 -
内嵌汇编函数分析
1 Linux 0.12内核中strncmp函数的实现extern inline int strncmp(const char * cs,const char * ct,int count){register int __res __asm__("ax");__asm__("cld\n" // 将标志寄存器Flag的方向标志位DF清零。在字串操作中使变址寄存器SI原创 2017-11-15 10:45:11 · 420 阅读 · 0 评论