历史上的今天
今天是:2024年09月27日(星期五)
2021年09月27日 | ARM汇编程序和指令学习
2021-09-27 来源:eefocus
mvo指令的详解

立即数被编码到机器的低12位,如果立即数小于256,则编码到低8位,否则,如果能通过循环左移偶数位变成小于256的数,那么编码时,小于256的数在机器码的低八位,移动的位数除以2编码到低12的高四位
移位指令操作
LSL 对通用寄存器中的内容进行逻辑左移操作
LSR 对通用寄存器中的内容进行逻辑右移操作
ASR 对通用寄存器中的内容进行算数右移操作,左端是正数的话用0补齐,如果是负数的话用1补齐
ROR 对通用寄存器进行循环右移操作,左端的数用右边移出的位来补充
nt main ()
{
int a, b, c,d;
__asm__ __volatile__(
"nopn"
"mov r0,#0x78n" //将0x78放到寄存器r0中
"lsl %[a],r0,#0x4n" //将寄存器r0通过左移四位的操作
"lsr %[b],r0,#0x4n"//将寄存器r0通过右移四位的操作
"asr %[c],r0,#0x8n" //将寄存器r0通过算数左移移四位的操作
"ror %[d],r0,#0x4n" 将寄存器r0通过循环右移四位的操作
"nopn"
:[a]"=&r"(a),输出的变量
[b]"=r&"(b),
[c]"=&r"(c),
[d]"=&r"(d)
: //输入的变量
:"r0"//被更改的资源列表
);
}
算数运算逻辑指令
AND 将两个数进行逻辑与运算,常用于频闭操作数1的某些位
ORR 将两个操作数进行逻辑或运算,常用于设置操作数1的某些位
EOR 将两个操作数进行异或操作,用于反转操作数1的某些位
ADD 将两个数进行算数相加
ADC 与ADD的区别是除了两个操作数相加,还包括CPSR中的C的标志位
SUB 将两个数进行相减操作
int a, b, c,d;
__asm__ __volatile__(
"nopn"
"mov r0,#0x78n" //将0x78放到寄存器r0中
"and %[a],r0,#0x78n"
"orr %[b],r0,#0x4n"
"add %[c],r0,#0x22n"
""
"nopn"
:[a]"=&r"(a),
[b]"=r&"(b),
[c]"=&r"(c),
[d]"=&r"(d)
:
:"r0"
);
}
加载/存储指令
LDR 从储存器中将一个32位的字数据传到目标寄存器中
STR 将源寄存器32位数据传到储存器中
LDR 的伪指令用法
ldr r0 ,=lable//取标号处的地址送入r0
ldr r0 ,lable//取标号处的地址储存的四字节真值
ldr r0 ,=imedi //将任意一个常量立即数,放入r0,无论是否合法
上一篇:ARM汇编之APCS规则
史海拾趣
|
请问大家,为什么跳转指令像JC、JZ、JMP的微程序相同,计算机却可以判断出执行哪一个指令呢? 我查过,说是微程序是入口地址,指令的判断是通过硬件实现~~ 但是还是不明白,是怎么判断的? 难道对指令寄存器中IR有要求吗?… 查看全部问答> |
|
本人初学嵌入式系统 对于ucos尚留几个关于任务调度的问题,急需解惑, (1)当前运行的任务是不是还在就绪表中: 1.假设是,那么调度到新任务不都是当前任务么,也就是说实际上不会有任务切换了?(假设不会 ...… 查看全部问答> |
|
我想用vs2005做一个wince下的自动拨号程序,不知该调用哪个dll文件。XP系统下应该用rasapi32.dll,可是wince下该调用哪个dll呢? … 查看全部问答> |
|
在CE5.0下使用VB2005模拟按键时: keybd_event 、sendinput、sendkeys 等函数均不可以 RegisterHotKey 没有使用成功 请求帮助!… 查看全部问答> |
|
cisco 华为 juniper 阿尔卡特的操作系统是什么啊?他们还有没有后台架构,例如VxWorks。有哪些路由器是用linux unix uclinux VxWorks或psos作为操作系统的啊?… 查看全部问答> |
|
医用B超前端电路需要正负80V的高电压,PCB板制作出来之后,电源和地上的干扰很大,并且会有明显电流过载现象,(电源用的是学生电源,PCB为四层板,电源层是单独布线的),有没有做过类似这样的电源设计的,问题可 ...… 查看全部问答> |




