2 qq 33857158 qq_33857158 于 2016.02.01 12:12 提问

arm指令,B指令的疑问
arm
        MOV  R1,   #5

LMP SUBS R1, R1, #1
BCC LMP

这个程序能循环4次吗?我认为CC后缀是C=0才循环,本程序不会循环,但是,书上是可以循环的,这是存在哪里了?

1个回答

jymfist
jymfist   2016.02.01 14:03
已采纳

书错了,哈哈,自己动手跑一把

jymfist
jymfist 回复qq_33857158: 详细看了下,是可以循环的。不过应该不是4次,而是5次。BCC确实是C=0才循环,不过SUBS R1,R1,#1前5次不会有借位,所以C前五次为0,到0-1时,C不为0,程序才往下执行
2 年多之前 回复
jymfist
jymfist 回复qq_33857158: 我的意思是要
2 年多之前 回复
qq_33857158
qq_33857158 谢谢哈!
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ARM汇编指令(B/BL/BX)
跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转: (1) 使用专门的跳转指令。 (2) 直接向程序计数器 PC 写入跳转地址值。     通过向程序计数器 PC 写入跳转地址值,可以实现在 4GB 的地址空间中的任意跳转,在跳转之前结合使用     MOV LR , PC    等类似指令,可以保存将来的返回地址值,从而实现在 4GB 连续的
ARM的B,BL跳转指令
B跳转指令:它是个相对跳转指令,其机器码格式如下: [31:28]位是条件码;[27:24]位为“1010”(0xeaffffff)时,表示B跳转指令,为“1011”时,表示BL跳转指令;[23:0]表示偏移地址。 使用B或BL跳转时,下一条指令的地址是这样计算的: 将指令中24位带符号的补码立即数扩展为32(扩展其符号位);将此32位数左移两位;将得到的值加到pc寄存器中,即得
深入理解ARM跳转指令B以及在此基础上理解arm
讲解ARM汇编指令的书籍中,很多在讲到B指令的时候会说这条指令时一条绝对跳转指令,这是不负责任的说法。这条指令的迷惑之处在于,B指令的汇编形式为: b label : : label: mov r1,r2 mov r2,r3         从汇编指令的书写形式上,确实是一条绝对跳转指令,但是实际上汇编在将“B label”这
GNU ARM汇编--(十二)arm汇编指令的B真的那么简单吗?
说句题外话,在输入“指令”二字的时候,就想起了google搜索时,提示“令”不能搜索,要我换词汇.如果不能说脏话,我真就无语了.         在前面对具体芯片的各个基本模块做完了学习后,在上一篇小结中自以为已经具备了自己写个bootloader的条件,但其实错了,我还有很多基本的知识不了解.比如编译链接\gnu的linker script等等.也有很多地方只懂表面,没有做深入的理解.
ARM汇编指令B和BL的区别
B常用于不返回的跳转,比如跳到某个标号处,BL则用于子程序跳转(要返回,返回地地存于LR) B. (注意B后面的“.”)这个“.”是指定当前的地址,如果使用 B.这条指令,其实就是死循环。
ARM指令B BL BLX BX区别
B: 跳转。 B   label  满足条件立即跳转到Lable指定的地址执行 BL: 带链接的跳转。 首先将当前指令的下一条指令地址保存在LR寄存器,然后跳转的lable。通常用于调用子程序,可通过在子程序的尾部添加mov  pc, lr 返回。 BX: 带状态切换的跳转。最低位为1时,切换到Thumb指令执行,为0时,解释为ARM指令执行。
arm32和arm64常用指令B BL BLX机器码计算
现在大部分手机cpu架构是ARM v7-A和ARMV8-A,,在ARM-v7A中常使用32位ARM指令集并且支持thumb指令集与arm的切换,而在ARMV8中使用的是64位ARM指令集且不再有thumb指令集状态的切换了。在调用函数时,会有常用的调用方式:BL和B,且分三种情况arm, thumb, aarch64,而对于BLX在arm64指令集中不再有。下面对这三种情况进行讨论。 A
armv7 Cortex-M3 BL指令机器码解析函数
void BL_instruction_parse(){    unsigned int input_hex_num,temp_hex_num,imm32,imm10,imm11,input_PC; unsigned char I1,I2,J1,J2,S;    //HexDump((char *)tmpbuf,64,0);     printf("Please input a hex mach...
arm学习b,bl指令浅析
注:文章详细请参考http://blog.sina.com.cn/s/blog_58f750e80100fr3p.html http://blog.sina.com.cn/s/blog_a4cdf30501018317.html 指令B与BL的区别  B常用于不返回的跳转,比如跳到某个标号处,BL则用于子程序跳转(要返回,返回地地存于LR) B. (注意B后面的“.”)这个“.”是
ARM汇编中B跳转指令和LDR跳转的区别 【转】
B跳转指令是代码位置无关的,经过汇编后会替换为当前PC值加(减)一个修正值,不管这条指令是在哪一个地址执行,都能跳转到指定的位置。 B只能在当前PC的32M范围内跳转,LDR只能在当前PC的4KB(0xfff范围)跳转。 BL  带返回跳转 LDR PC,=xxx指令将向PC直接装载一个标号xxx的值,但标号经过编译后将被替换为一个与RO相对应的值,这样无论指令在何处执行都能跳转到一个指定的