linux内核中的汇编语言
Intel 和AT&T
汇编语言源代码主要采用两种语法:AT&T语法和Intel语法,尽管它们都属于第二代语言,但是二者的语法却存在巨大的差异。AT&T汇编语法以%作为所有寄存器名称的前缀,以$作为文字常量(也叫做立即操作数)的前缀。它这样对操作数排序:源操作数位于左边,目的操作数位于右边,使用AT&T语法,GNU汇编器(Gas)和许多其他GNU工具(如gcc和gdb)都使用AT&T语法。
Intel语法与AT&T语法不同,它不需要寄存器和文字前缀,它的操作数排序方式与AT&T语法操作数恰恰相反:源操作数位于右边,目的操作数位于左边,使用Intel语法的汇编器包括微软汇编器(MASM)、Borland的Turbo汇编器(TASM)和Netwide汇编器(NASM).
1、大小写
intel格式的指令使用大写字母,而AT&T格式的使用小写字母。
2、间接寻址语法
intel中基地址使用[],而AT&T使用(),另外处理复杂操作数的语法也不同,intel为segreg:[base+index*scale+disp],而AT&T中为%segreg:disp(base,index,scale)。
3、后缀
AT&T语法中大部分指令操作码的最后一个字母表示操作数大小,b表示byte,w表示word,l表示long。intel中处理内存操作数时也有类似的语法:BYTE PTR, WORD PTR, DWORD PTR
linux的汇编
1、类型.word
#if defined(CONFIG_EVT1)&&!defined(CONFIG_FUSED)
.word 0x2000
.word 0x0
.word 0x0
.word 0x0
#endif
word相当于int类型,是GNU汇编中的元素,word=32bit=4字节
2、关键字.global
.global就是相当于c语言中的Extern,声明此变量,并且告诉链接器此变量是全局的,外训可以访问。
3、标号
symbol后面加上一个冒号,表示其是一个标号label,类似c语言goto后面的标号。
4、LDR指令
(1)ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。
(2)ldr(load register)指令将内存内容加载入通用寄存器。
(3)str(store register)指令将寄存器内容加入内存空间中。
LDR{条件} 目的寄存器,<存储器地址>
用于从存储器中将一个32位的字数据传送到目的寄存器中。
5、MRS指令
MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)
6、bic指令
BIC{条件}{S} 目的寄存器,操作数1,操作数2
用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
7、orr指令
orr{条件}{S} 目的寄存器,操作数1,操作数2
用于两个操作数上进行或运算,并把结果放置到目的寄存器中,操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
8、msr指令
msr{条件} 程序寄存器(CPSR或SPSR)_<域>,操作数
msr指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。
9、align
.align {alignment} {,fill}{,max}其中:alignment用于指定对齐方式,可能的取值为2的次幂,缺省为4。fill为填充内容,缺省用0填充。max是填充字节数最大值,如果填充字节数超过max,就不进行对齐。
10、ldm stm
批量数据加载/存储指令
LDM(或STM){条件}{类型} 基址寄存器{!} ,寄存器列表{^}
11、cmp指令
cmp的功能是相当于减法指令,只是不保存结果,cmp指令执行后,将对标志寄存器产生影响,其他相关指令通过识别这些被影响的标志寄存器来得知比较结果。
上一篇: Jquery如何选择mouseover的div的子元素的问题解决
下一篇: 洛谷 P1008 三连击
推荐阅读
-
linux内核中的汇编语言
-
[Linux] SSH隧道本地端口转发访问远程服务中的数据库
-
Linux中select poll和epoll的区别
-
des加密解密算法 - 怎么可以让php代码:62837 << -16 在windows和linux中得到相同的结果?
-
关于Linux系统中iptables的一点点小结
-
LINUX中IPTABLES防火墙的基本使用教程
-
PHP变量在zend内核中的存储方式
-
玩转mini2440开发板之【linux内核的编译和下载】
-
编写一个汇编语言程序,将字符串"Hello World"中的全部小写字母转换为大写字母,并存放回原地址处。
-
汇编语言 求出首地址为DATA的100字数组的最小偶数,并把它存放在AX中