arm指令之beq和bnq

网上关于arm工作模式及寄存器的资料比较多,百度文库中有一个ppt 讲的比较通俗易懂,见传送门。

本文将主要讨论arm指令中的beq和bnq指令,这俩指令也比较容易搞混。
先看下arm指令的基本格式:
arm指令之beq和bnq_第1张图片
由上面的指令格式,实际上beq可以看做b+eq,bnq可以看做b+nq ,即opcode指令助记符b和cond指令条件的结合。事实上很多指令都可以看做是opcode指令助记符b和cond指令条件的结合,比如ldreq就可以看做ldr+eq。
b指令是跳转指令,使用方法如下:
arm指令之beq和bnq_第2张图片arm指令之beq和bnq_第3张图片arm指令之beq和bnq_第4张图片
cond指令条件的详细信息见下表:
arm指令之beq和bnq_第5张图片
上表中,我们会看见很多标志位Z、C、N等,这就涉及到CPSR寄存器了。下表是CPSR状态寄存器中各标示位的详细讲解。
arm指令之beq和bnq_第6张图片
示例解析:

	cmp r0, r1			
	beq run1		

如上是beq一个最简单的示例,比较r0和r1寄存器的值,如果相等,则跳转到run1;这时由于r0和r1寄存器的值相等,CPSR状态寄存器的Z=1。

	cmp r0, r1			
	bne run2

如上是bnq一个最简单的示例,比较r0和r1寄存器的值,如果不相等,则跳转到run2;如果r0和r1寄存器的值不相等,CPSR状态寄存器的Z=0。

你可能感兴趣的:(汇编语言)