学习STM32时,为什么要学习汇编?
时间:2020-11-25 15:54:25
手机看文章
扫描二维码
随时随地手机看文章
[导读]不同的平台的汇编代码是不一样的,最早的汇编在50年代就发明了,比很多人的父母的年龄都大,老掉牙,不用学习怎么写汇编。一个公司有一个人知道怎么写汇编就够了。但要学习读汇编, 为什么学习汇编?
LDR指令
LDR{条件} 目的寄存器 <存储器地址>
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将R1+R2的值存入R1。LDR R0,[R1],#8 ;将存储器地址为R1的字数据读入寄存器R0,并将R1+8的值存入R1。LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将R1+R2的值存入R1。LDR R0,[R1,LSL #3] ;将存储器地址为R1*8的字数据读入寄存器R0。LDR R0,[R1,R2,LSL #2] ;将存储器地址为R1+R2*4的字数据读入寄存器R0。LDR R0,[R1,,R2,LSL #2]!;将存储器地址为R1+R2*4的字数据读入寄存器R0,并将R1+R2*4的值存入R1。LDR R0,[R1],R2,LSL #2 ;将存储器地址为R1的字数据读入寄存器R0,并将R1+R2*4的值存入R1。LDR R0,Label ;Label为程序标号,Label必须是当前指令的-4~4KB范围内。
LDR Rd,[Rn],#0x04 ;这里Rd不允许是R15。
LDR R0,=0xff
//main.cint main(void){RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;GPIOB->CRL &= ~(0xf<<(1*4));GPIOB->CRL |= 0x2<<(1*4);GPIOB->ODR &= ~(1<<1);return 0;}//main.h
LDR r0,[r1] r0 = *r1STR r0,[r1] *r1 = r0MOV r0,r1 r1->r0拷贝
r0 = * 0x0800 017c
* 0x0800 017c=0x4002 1000
*0x4001 0c00 &= ~(0xf0)r1 = *0x4001 0c00*0x4001 0c00 &= ~(0xf0)
剩下的不再详细分析,直接给答案 :
***0x4001 0c00 |= 0x200x4001 0c0c &= ~(0x02)*
-END-
来源 | STM32嵌入式开发
| 整理文章为传播相关技术,版权归原作者所有 |
| 如有侵权,请联系删除 |
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!






