成品网站源码1688体验区,长沙找工作哪个网站好,wordpress 怎么加页面,关于网站建设费用一、伪操作.global 全局.local 局部.equ 声明.macro 子函数.if .endif 条件编译.rept 重复操作.weak 弱化.word 申请一个字空间.byte 申请一个字节空间.align 地址对齐.arm ARM指令.thumb Thumb指令.text 代码段.data 数据段.space 申请N个字节空间 二、C和汇编的混合编程三、A… 一、伪操作.global 全局.local 局部.equ 声明.macro 子函数.if .endif 条件编译.rept 重复操作.weak 弱化.word 申请一个字空间.byte 申请一个字节空间.align 地址对齐.arm ARM指令.thumb Thumb指令.text 代码段.data 数据段.space 申请N个字节空间 二、C和汇编的混合编程三、ATPCS协议 一、伪操作
伪操作:不会生成代码只是在编译之前告诉编译器怎么编译 不同的编译器伪操作也不同 GNUgcc的伪操作一般都以 ‘.’ 开头 .global 全局 .global symbol 将symbol声明成全局符号.local 局部 .local symbol 将symbol声明成局部符号.equ 声明 .equ DATA, 0xFF 似于#define DATA 0xFFMOV R1, #DATA.macro 子函数 .macro FUNCMOV R1, #1MOV R2, #2.endmFUNC 调用FUNC函数.if .endif 条件编译 .if 0 如果条件 0-假 1-真 MOV R1, #1MOV R2, #2.endif.rept 重复操作 .rept 3 将下面这两行代码重复执行三次MOV R1, #1MOV R2, #2.endr.weak 弱化 .weak symbol 弱化一个符号即告诉编译器即便没有这个符号也不要报错.weak funcB func.word 申请一个字空间 .word VALUE 在当前地址申请一个字的空间并将其初始化为VALUEMOV R1, #1.word 0xFFFFFFFFMOV R2, #2.byte 申请一个字节空间 .byte VALUE 在当前地址申请一个字节的空间并将其初始化为VALUEMOV R1, #1.byte 0xFF.align 地址对齐 .align N 告诉编译器后续的代码2的N次方对其.align 4 下面这条指令将会从2^4 160x16地址空间开始存储MOV R2, #2.arm ARM指令 .arm 告诉编译器后续的代码是ARM指令.thumb Thumb指令 .thumb 告诉编译器后续的代码是Thumb指令.text 代码段 .text 定义一个代码段.data 数据段 .data 定义一个数据段.space 申请N个字节空间 .space N, VALUE 在当前地址申请N个字节的空间并将其初始化为VALUEMOV R1, #1.space 12, 0x12 32位的处理器0x4 — 0x16 地址空间将会全部存储12MOV R2, #2二、C和汇编的混合编程 C和汇编的混合编程原则在哪种语言环境下符合哪种语言的语法规则 在汇编中将C中的函数当做标号处理在C中将汇编中的标号当做函数处理在C中内联的汇编当做C的语句来处理 方式一汇编语言调用跳转C语言 汇编中MOV R1, #1MOV R2, #2BL func_c 将会跳到C语言代码中MOV R3, #3C语言中void func_c() {int a;}方式二C语言调用跳转汇编语言 C语言中void func_c() {int a;FUNC_ARM(); //将会跳转到汇编指令中}
汇编中MOV R1, #1MOV R2, #2
.global FUNC_ARM 全局变量
FUNC_ARM:MOV R3, #3方式三C内联内嵌汇编 asm( “汇编指令\n” ); C语言中void func_c(void){int a;// C内联内嵌汇编 asm(MOV R6, #6\nMOV R7, #7\n);} 三、ATPCS协议
ATPCS协议(ARM-THUMB Procedure Call Standard) ATPCS协议主要内容 栈的种类 1.1使用满减栈 寄存器的使用 2.1 R15用作程序计数器不能作其他用途 2.2 R14用作链接寄存器不能作其他用途 2.3 R13用作栈指针不能作其他用途 2.4 当函数的参数不多于4个时使用R0-R3传递当函数的参数多于4个时多出的部分用栈传递 2.5 函数的返回值使用R0传递 2.6 其它寄存器主要用于存储局部变量