您的位置:首页 > 其它

ARM 最基本指令运算

2017-05-10 21:07 197 查看


;/*汇编文件中的符号*/
;1.指令:编译完成后作为一条指令存储在内存单元当中,CPU执行时能完成一定的操作
;2.伪操作:不会生成代码也不会占用内存,告诉编译器怎样编译
;3.伪指令:本身不是指令,编译器在编译的时候将其替换成CPU能识别的指令

;/*指令*/
;1.数据操作指令:对数据进行逻辑、数学等运算与处理
;2.跳转指令:实现程序的跳转,实质是修改PC
;3.Load/Store:对内存的读写操作
;4.状态寄存器传送指令:对CPSR进行读写操作
;5.异常中断产生指令:触发软中断
;6.协处理器指令:




ENTRY

;/*****数据处理指令*****/
;数据搬移指令
;mov r1, #1
;r1 = 1
;mov r2, r1
;r2 = r1
;mvn r3, r1
;r3 = ~r1
;立即数
;mov r1, #0x12345678
;立即数的本质是包含在指令当中的数,提升指令的效率
;在指令中给立即数留了12位的存储空间,所以立即数只包含了2的12次方个
;mov r1, #0xFFFFFFFF

;加法指令
;mov r1, #1
;mov r2, #2
;add r3, r1, r2
;r3 = r1 + r2
;add r3, r1, #5
;r3 = r1 + 5

;数据运算指令的基本格式
;《操作码》《目标寄存器》《第一操作寄存器》《第二操作数》

;数据运算指令对CPSR的影响
;默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。
;mov r1, #0xFFFFFFFE
;mov r2, #5
;adds r3, r1, r2

;带进位的加法指令
;两个64位数相加,第一个64位数的低32位放在r0高32位放在r1,第二个64位数的低32位放在r2高32位放在r3
;编写代码实现两个64位数的和,结果的低32位放在r4高32位放在r5
;mov r0, #0xFFFFFFFE
;mov r1, #1
;mov r2, #5
;mov r3, #1
;adds r4, r0, r2
;adc r5, r1, r3
;本质:r5 = r1 + r3 + 'C'

; 减法指令
; mov r1, #5
; mov r2, #3
; sub r3, r1, r2
; r3 = r1 - r2

;带借位的减法指令
;mov  r0, #5
;mov  r1, #3
;mov  r2, #6
;mov  r3, #1
;subs r4, r0, r2
;sbc  r5, r1, r3
;本质:r5 = r1 - r3 - '!c'

; 乘法指令
; mov r1, #3
; mov r2, #5
; mul r3, r1, r2
; 乘法指令不能使用立即数

; 逻辑与
; mov r0, #0xf0
; mov r1, #0x0f
; and r2, r0, r1
; r2 = r0 & r1

; 逻辑或运算
; mov r0, #0xf0
; mov r1, #0x0f
; orr r2, r0, r1
; r2 = r0 | r1

; 逻辑异或运算
; mov r0, #0xff
; mov r1, #0xff
; eor r2, r1, r0
; r2 = r1 eor r0

; 位清零指令
; mov r0, #0xff
; bic r0, r0, #0xf
; 第二操作数中的哪一位是1  就把第一操作寄存器中的哪一位清零  结果放在目标寄存器

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: