汇编语言基础
一)、汇编语言:基本语法
1、汇编指令最典型的书写模式:
标号
操作码 操作数1, 操作数2,... ;注释
1)、标号是可选的,如果有,它必须顶格写。标号的作用是让汇编器来计算程序转移的地址。
2)、操作码是指令的助记符,它的前面必须有至少一个空白符,通常使用提个Tab键来产生。
3)、操作码后面往往跟若干个操作数,而第一个操作数,通常都给出本指令执行结果的存储地。不同指令需要不同数目的操作数,并且对操作数的语法要求也可以不同。
4)、注释均以;开头,它的有无不影响汇编操作,只是给程序员看的,让程序员更加可以理解代码。
2、可以使用EQU指示子来定义常数,也可以使用DCB来定义一串字节常数——允许以字符串的形式表达,还可以使用DCD来定义一串32位整数。
3、如果汇编器不能识别某些特殊指令的助记符,就需要“手工汇编”,查出该指令的确切二进制机器码,然后使用DCI编译器指示器。
4、不同汇编器的指示字和语法都可以不同。以上以ARM汇编器说明,如使用其他汇编器,细看说明和实例代码。
二)、汇编语言:后缀的使用
1、在ARM处理器中,指令可以带有后缀的:
2、在Cortex-CM3中,对条件后缀的使用有限制,只有转移指令(B指令)才可以随意使用。而对于其他指令,Cortex-CM3引入IF-THEN模块,在这个块中才可以加后缀,且
必须加后缀。
三)、汇编语言:统一的汇编语言
1、为了有力支持Thumb-2,引入了一个“统一汇编语言(UAL)”语法机制。对于16位指令和32位指令均能实现一些操作,有时虽然指令的实际操作数不同,或者对立即数的 长度有不同的限制,但是汇编器允许开发者以相同的语法格式编写,并且由汇编器来决定使用16位指令还是32位指令。
2、如果使用了传统的Thumb语法有些指令会默认更新APSR,即使你没有加上S后缀。如果使用UAL语法,则必须使用S后缀才能更新。
3、在Thumb-2指令集中,有些操作既可以由16位指令完成,也可以由32位指令完成。在UAL下,可以让编译器决定用哪个,也可以手工指令使用16位还是32位。 1)、.W后缀指定32位指令。如果没有给出后缀,会bain其会先试着用16位指令以缩小代码体积如果不行在使用32位指令。 2)、.N后缀指定16位指令。
4、32位Thumb-2指令可以按半字节对齐。
|