山东省住房城乡建设厅查询网站首页,app和网站开发哪个难,安庆做网站哪个公司好,小米云网站开发目录
1.流水线
2.指令流水线
3. 多核处理器编辑
4. 工程搭建
4.1为Keil软件配置编译工具链
5.程序编写
5.1 数据处理指令
5.2 带标志位的加法ADC ADDS
5.3 跳转指令B\BL
5.4 单寄存器内存访问
5.5 批量寄存器内存访问
5.6 栈的应用-叶子函数的调用过程
5.…目录
1.流水线
2.指令流水线
3. 多核处理器编辑
4. 工程搭建
4.1为Keil软件配置编译工具链
5.程序编写
5.1 数据处理指令
5.2 带标志位的加法ADC ADDS
5.3 跳转指令B\BL
5.4 单寄存器内存访问
5.5 批量寄存器内存访问
5.6 栈的应用-叶子函数的调用过程
5.6 栈的应用-非叶子函数的调用过程 1.流水线 2.指令流水线 3. 多核处理器
4. 工程搭建
4.1为Keil软件配置编译工具链
4.1.1创建新工程 4.1.2设置工程保存的路径和工程的文件名字在这里我将工程保存到 ARM-ASM 文件夹下将工程命名为 arm-asm。 4.1.3 设置我们工程支持哪款 CPU这里我们选择 Samsung 的 S3C2440A 芯片 4.1.4 单击“OK”之后弹出提示框是否导入启动文件选择“否” 4.1.5建好工程后软件界面如下图所示 4.1.6 添加.s汇编文件到工程中 4.1.7 在.s汇编文件中写汇编代码 5.程序编写
1指令编译完生成一条机器码存储在内存单元当中CPU执行时能完成对应的操作 1) 数据处理指令 对数据进行逻辑、算数运算 2) 跳转指令 实现程序的跳转实质是修改PC 3) Load/Store指令对内存的读写操作 4)状态寄存器传送指令对CPSR进行读写操作 5)异常中断产生指令触发软中断常用于内核的系统调用 6协处理器指令操作协处理器的指令
2.伪操作不会生成机器码也不会占用内存其作用是告诉编译器怎样编译类似C中的宏定义 3.伪指令不是指令编译器在编译时将其替换成等效的指令
5.1 数据处理指令 AREA RESET,CODE,READONLY;定义一个代码段RESET,属性为只读 ENTRY ;程序的入口 ; 1数据处理指令 ; 搬移指令 MOV 作用赋值 MOV R0,#2 MOV R1,#3 MOV R2,#1 MOV R3,#3 MOV R4,#4 MOV PC,#0 ;PC取址0 循环 ;数据取反指令 MVN MVN R4,#0X000000FF ;R4~0X000000FF0XFF000000 MOV R5,#255 ; 立即数合法的数包含在指令中的数 ; 与普通变量的区别立即数是存储在寄存器中执行速度快 ; 缺点长度有限 这里规定最大为12bit2^124096个数连续数:0-255其余为离散数 LDR R5,0X12345678 ; 加法指令 ADD ADD R2,R0,R1 ;R2R0R1 ; 减法指令 SUB SUB R2,R1,R0 ;R2R1-R0 ; 乘法指令 MUL MUL R2,R0,R1 ;R2R0*R1 END ; nzcv验证 ; SUBS R2,R0,R1 ;验证N 加S并使用减法指令产生负数验证N位发现被置位 n1负数 ; SUBS R1,R0,R2 ;验证Z 加S并使用减法指令产生0验证z位发现z和c都被置1 ;因为减法时产生借位c会被置0没有借位被置1 ; MOV R1,#0XFFFFFFFE ; MOV R2,#2 ; ADDS R3,R1,R2 ;验证C加法指令产生了进位注意这里是32位C位被置1 5.2 带标志位的加法ADC ADDS ; 第一个数0X00000001 0XFFFFFFFF ; 第二个数0X00000003 0X00000004 ; 第一个数的低32位放到R1高32bit放R2 ; 第二个数的低32位放R3高32bit放R4 ; 低加低 高加高 运算结构的低32bit放R5高32bit放R6 MOV R1,#0XFFFFFFFF MOV R2,#0x00000001 MOV R3,#0X00000004 MOV R4,#0X00000003 ADDS R5,R1,R3 ;ADDS进位 C标志位置1 ADC R6,R4,R2 ;本质R6R4R2‘c’ ADC带进位的加法 5.3 跳转指令B\BL MOV R0,#2 CMP R0,#1 ;B JUMP ;B 只是跳转 ;BL JUMP ;BL 跳转后PCLR 可跳转回去 ;BEQ JUMP ;CMP相等时跳转if((EQ)(B JUMP)) 本质if(R0-#10){B JUMP} ;BNE JUMP ;CMP不相等时跳转 MOV R0,#2 MOV R0,#3 JUMP MOV R0,#4 MOV R1,#5 MOV PC,LR 5.4 单寄存器内存访问 单寄存器内存访问的索引方式(寻址方式) MOV R0,#0XFFFFFFFF MOV R1,#0X40000000 STR R0,[R1] ;将R0的数据写到R1地址内 LDR R2,[R1] ;读取R1地址里的内容到R2中 前索引 先偏移8位后存储数据 STR R0,[R1,#8] 后索引 先存储数据后偏移地址 STR R0,[R1],#4 自动索引 前后索引偏移地址并存储数据 STR R0,[R1,#4]! 5.5 批量寄存器内存访问 MOV R0,#1 MOV R1,#2 MOV R2,#3 MOV R3,#4 MOV R4,#5 MOV R5,#0X40000020 STM R5,{R0-R4} STM R5,{R4,R2,R3,R1,R0} STMIA R5!,{R0-R4} ; 空增 STMIB R5!,{R0-R4} ; 满赠 STMDA R5!,{R0-R4} ; 空减 STMDB R5!,{R0-R4} ; 满减 5.6 栈的应用-叶子函数的调用过程 MOV SP,#0X40000020 ;初始化栈地址 MAIN MOV R1,#1 MOV R2,#2 BL FUNC ADD R3,R1,R2 TOP B TOP FUNC STMFD SP!,{R1,R2} MOV R1,#10 MOV R2,#5 SUB R3,R1,R2 LDMFD SP!,{R1,R2} MOV PC,LR 5.6 栈的应用-非叶子函数的调用过程 MOV SP,#0X40000020 ;初始化栈地址 MAIN MOV R1,#1 MOV R2,#2 BL FUNC ADD R3,R1,R2 TOP B TOP FUNC STMFD SP!,{R1,R2,LR} MOV R1,#10 MOV R2,#5 BL FUNC1 SUB R3,R1,R2 LDMFD SP!,{R1,R2,LR} MOV PC,LR FUNC1 STMFD SP!,{R1,R2} MOV R1,#20 MOV R2,#10 SUB R3,R1,R2 LDMFD SP!,{R1,R2} MOV PC,LR END