assembly register
#flashcards/ComputerScience
本质上是一个非常小的内存空间。物理位置非常接近处理器,因此它们使用非常快。 每个程序会大量的访问寄存器。
particle
CPUlator ARMv7 System Simulator (01xz.net)
.global _start
.section .text
_start:
mov r0, #42
mov r8, #11
mov r7, #3
swi 0
mov r8, #11
address | Registers |
---|---|
r0 | 0000002a |
r1 | 00000000 |
r2 | 00000000 |
r3 | 00000000 |
r4 | 00000000 |
r5 | 00000000 |
r6 | 00000000 |
r7 | 00000003 |
r8 | 00000000 |
r9 | 00000000 |
r10 | 00000000 |
r11 | 00000000 |
r12 | 00000000 |
swi
SWI _immed_8
WI
指令导致 SWI 异常。这意味着处理器状态更改为 ARM,处理器模式更改为 Supervisor,CPSR 保存到 Supervisor 模式 SPSR,并且执行分支到 SWI 向量。
add
The ADD
instruction performs addition on two operands and stores the result in a destination register. It has several variations depending on the operand types:
_`immed_8`_
is ignored by the processor. However, it is present in bits[7:0] of the instruction opcode. It can be retrieved by the exception handler to determine what service is being requested.
_`immed_8`_
被处理器忽略。然而,它存在于指令操作码的位[7:0]中。异常处理程序可以检索它以确定正在请求什么服务。
ADD r3, r1, r2 把r1和r2加在一起放在r3中
.global _start
.section .text
_start:
mov r0, #2
mov r1, #3
mov r2, #4
ADD r3, r1, r2
ADD r4, r3, #5
SUB r5, r4, r3
MUL r6, r1, r2
MSR CPSR, r6
swi 11
mov r7, #1
LDR \ STR
下面是 LDR和 STR
.global _start
.section .text
_start:
.data
var1: .word 5
var2: .word 6
mov r0, #2
mov r1, #3
mov r2, #4
ADD r3, r1, r2
ADD r4, r3, #5
SUB r5, r4, r3
MUL r6, r1, r2
mov r7, #1
mov r8, #1
STR r3, var1
STR r6, var2
LDR r7, var2
LDR r8, var1
MSR CPSR, r6
swi 11
mov r7, #1
- STR (Store Register):STR <register>, <memory_address> 将寄存器中的值存储到内存中。
- LDR (Load Register)**:LDR <register>, <memory_address>将内存中的值加载到寄存器中。
logical operators
AND ORR EOR MVN
.global _start
.section .text
_start:
; Prepare some values in registers
mov r0, #0x0A ; r0 = 0x0A (1010 in binary)
mov r1, #0x0F ; r1 = 0x0F (1111 in binary)
; AND operation (r2 stores the bitwise AND of r0 and r1)
AND r2, r0, r1
; ORR operation (r3 stores the bitwise OR of r0 and r1)
ORR r3, r0, r1
; EOR operation (r4 stores the bitwise exclusive OR of r0 and r1)
EOR r4, r0, r1
; MVN operation (r5 stores the bitwise NOT of r1)
MVN r5, r1
; Exit the program
mov r7, #0
swi 0
在 ARMv7 架构中,AND
、ORR
、EOR
和 MVN
是用于进行位级运算的基本指令。它们分别用于执行以下操作:
1. AND
(Bitwise AND,按位与):
- 将两个寄存器中的值进行按位与运算,并将结果存储在指定的寄存器中。
- 只有当两个操作数的对应位都为 1 时,结果位才为 1。
- 用途:
- 检查两个值是否存在共同的位模式。
- 提取特定位组合。
- 实现掩码操作。
2. ORR
(Bitwise OR,按位或):
- 将两个寄存器中的值进行按位或运算,并将结果存储在指定的寄存器中。
- 只要两个操作数中的任何一个对应位为 1,结果位就为 1。
- 用途:
- 组合多个位模式。
- 设置特定位。
- 实现逻辑“或”操作。
3. EOR
(Bitwise exclusive-OR,按位异或):
- 将两个寄存器中的值进行按位异或运算,并将结果存储在指定的寄存器中。
- 只有当两个操作数的对应位不同时,结果位才为 1。
- 用途:
- 比较两个值是否相同。
- 加密/解密数据。
- 实现逻辑“异或”操作。
4. MVN
(Bitwise NOT,按位非):
- 对一个寄存器中的值进行按位非运算,并将结果存储在指定的寄存器中。
- 将每个位反转(1 变为 0,0 变为 1)。
- 用途:
- 生成补码。
- 实现逻辑“非”操作。
- 反转位模式。
示例:
Code snippet
mov r0, #0x0A ; r0 = 0x0A (1010 in binary)
mov r1, #0x0F ; r1 = 0x0F (1111 in binary)
AND r2, r0, r1 ; r2 = 0x0A (1010 AND 1111 = 1010)
ORR r3, r0, r1 ; r3 = 0x0F (1010 OR 1111 = 1111)
EOR r4, r0, r1 ; r4 = 0x05 (1010 XOR 1111 = 0101)
MVN r5, r1 ; r5 = 0xF0 (NOT 1111 = 0000 inverted to 1111)
注意:
- 这些指令通常用于对寄存器中的值进行操作,也可以用于内存地址指向的值。
AND
、ORR
和EOR
可以用于比较两个值是否相等,例如CMP r0, r1 NEQ #0
(如果r0
不等于r1
,则触发异常)。MVN
可以用于生成补码,例如ADD r2, r0, MVN r1
(将r0
加上r1
的补码,得到r0
的负数)。
总结:
AND
、ORR
、EOR
和 MVN
是 ARMv7 中重要的位级运算指令,用于执行各种逻辑操作、数据处理和比较任务。它们是汇编编程中不可或缺的工具,在各种应用场景中都有广泛应用。
loop
.global _start
.section .text
_start:
; Initialize loop counter
mov r0, #0
; Loop condition check
loop_start:
cmp r0, #10 ; Check if loop counter has reached 10
bge loop_end ; If counter >= 10, exit loop
; Loop body
; Perform loop iterations here
add r0, r0, #1 ; Increment loop counter
; Print current loop iteration (replace with your actual printing mechanism)
; Printf("Iteration: %d\n", r0)
; Jump back to loop condition check
b loop_start
loop_end:
; Loop exit
mov r7, #0
swi 0
; Exit the program
register breakpoint
#flashcards/ComputerScience
if register have 12,so 7 register can breakpoint ? if register have 12,so 7 register can breakpoint
<!--SR:!2024-11-25,103,250-->register 位数
register 16进制,每个值都是4位数
arm中还有其他寄存器
- SP:stack pointer 堆栈指针:堆栈上的下一个可用位置,如果通用寄存器没有足够空间,
- lr
- PC:程序计数器,每次执行一次+1
- cpsr
- spsr