汇编移位指令SHR,SAR,SAL/SHL,ROR,ROL,RCR,RCL

本文详细介绍了汇编语言中的移位指令,包括逻辑右移SHR,算数右移SAR,逻辑/算数左移SAL/SHL,循环右移ROR,循环左移ROL,带进位循环右移RCR和带进位循环左移RCL。通过实例解析了各种移位指令的使用,并提供了相关例题帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

逻辑右移SHR

算数右移SAR(重点)

算数/逻辑左移SAL/SHL(完成的操作都一样)

循环右移ROR

循环左移ROL

带进位循环右移RCR

带进位循环左移RCL

总结

例题


移位指令为双操作数指令,用于将目的的操作数中的二进制数移位。

目的操作数只能是寄存器或内存

源操作数为移位的次数,只能是CL寄存器或者立即数1

移动完,CL的值不变

逻辑右移SHR

shift right

 

无符号数除以2

MOV AL,10
SHR AL,1
;0000 1010(10)
;移动后
;0000 0101;(5) CF=0  SHR是对于无符号数ÿ
### STM32 RCR 寄存器的功能与用途 在 STM32 的高级定时器中,`TIMx_RCR`(Repeat Counter Register,重复计数寄存器)是一个重要的组成部分。该寄存器的主要功能是用来定义定时器在一个更新事件之后能够重复执行的次数[^2]。 #### 功能描述 `TIMx_RCR` 中存储了一个 8 位的数值,表示重复计数的最大值。每当定时器完成一次完整的计数周期并触发更新事件时,重复计数器会减一。当重复计数器达到零时,才会真正触发更新中断或更新 DMA 请求。这种机制允许用户通过设置不同的重复计数值来灵活控制定时器的行为。 #### 使用场景 - **精确的时间间隔管理**:如果需要定时器每隔 N 次完整计数才触发特定的操作,则可以通过 `TIMx_RCR` 来实现这一需求。 - **复杂波形生成**:对于 PWM 波形或其他复杂的信号生成任务,利用重复计数器可以帮助减少软件干预的需求,从而提高效率和精度。 以下是基于 STM32 HAL 库的一个简单代码示例,展示如何初始化和配置 TIMx_RCR: ```c #include "stm32f4xx_hal.h" void Timer_Init(void) { TIM_HandleTypeDef htim; // 初始化结构体 htim.Instance = TIM2; htim.Init.Prescaler = 8399; // 配置预分频器 htim.Init.CounterMode = TIM_COUNTERMODE_UP; htim.Init.Period = 999; // 自动重载值 htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_Base_Init(&htim) != HAL_OK) { // 错误处理 } // 设置重复计数寄存器 __HAL_TIM_SET_REPCOUNT(&htim, 5); // 设置重复计数值为 5 } ``` 上述代码片段展示了如何使用 HAL 函数 `__HAL_TIM_SET_REPCOUNT()` 对 `TIMx_RCR` 进行编程操作。 --- #### 注意事项 - 如果不需要重复计数功能,可以直接将 `TIMx_RCR` 设定为 0,此时每次计数结束都会立即触发更新事件。 - 不同型号的 STM32 芯片可能具有略微差异化的寄存器布局,请始终参考具体芯片的数据手册以获取最准确的信息。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值