前言
这些笔记主要是记录自己在学习CM3汇编中的一些问题(因为我们老师上stm32的嵌入式课是从基础汇编开始讲的,CM3汇编在网上能查到的例子讲解有点少,哭!),其中可能借鉴过网上一些大佬的文章,如果造成不良影响请联系本人。本人菜鸡小白一枚,希望抱各位大佬的大腿(哈哈)。我是第一次写文章,目的:一是就是作为一个学习笔记保存;二是希望和各位道友一起交流学习。
符号扩展指令:SXTB和SXTH。
编译环境:keil5,window10系统。
符号扩展指令:SXTB和SXTH。符号扩展顾名思义就是将字节或者将半字的最高符号位进行扩展,最后都扩展到32位。(CM3的通用寄存器一共13个,从R0到R12)
;符号扩展指令
MOV R0,#0X00000080;将R0赋初值为0x00000080
MOV R1,#0X00000070;将R1赋初值为0x00000070
MOV R2,#0X00008000;将R2赋初值为0x00008000
MOV R3,#0X00007000;将R3赋初值为0x00007000
SXTB R4,R0;将R0按带符号数低字节扩展到32位存入R4
SXTB R5,R1;将R1按带符号数低字节扩展到32位存入R5
SXTH R6,R2;将R2按带符号数半字扩展到32位存入R6
SXTH R7,R3;将R3按带符号数半字扩展到32位存入R7
将R0,R1,R2,R3寄存器赋值后:
进行符号扩展后R4,R5,R6,R7寄存器的值为:
从运行结果可以看出,0x80字节换成二进制是:1000 0000,最高符号位是1,所以扩展就是将1依次向高位扩展,最后R4就成了0xFFFF FF80;
0x70写成二进制就是:0111 0000,最高符号位是0,所以就是将0往高位扩展,最后R5为0x0000 0070。
半字的分析跟字节是一样,此处就不再赘述啦。