32位循环左移一位(汇编)
2021/11/23 12:39:48
本文主要是介绍32位循环左移一位(汇编),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
32位循环左移一位(汇编)
移位操作为 二进制的移位!!!
首先需要转换为 二进制,再进行移位
大致思路
- 先将三十二位分解位低16位 和 高16位,分别放入AX和BX中
- 再将 低16位 逻辑左移 , 高位循环左移
- 再通过
ADC
加法进位
实现代码
DATA SEGMENT X DD 6A6A6A6AH DATA ENDS CODE SEGMENT 'CODE' ASSUME CS:CODE , DS:DATA START: MOV AX , DATA MOV DS , AX ;---- MOV AX , WORD PTR X MOV BX , WORD PTR X + 2 SHL AX , 1 RCL BX , 1 ADC AX , 0 MOV WORD PTR X , AX MOV WORD PTR X + 2 , BX MOV AX , WORD PTR X MOV BX , WORD PTR X + 2 ;--- MOV AH , 4CH INT 21H CODE ENDS END START
代码解释
数据段代码
DATA SEGMENT X DD 6A6A6A6AH DATA ENDS
将32位数拆解为 低位
和 高位
MOV AX , WORD PTR X MOV BX , WORD PTR X + 2
- AX只能放下 16位数即 2个字
字节(Byte) 有8位
字(Word) 由 两个字节(byte)组成(16位)
双字(DoubleWord) 由 两个字(word) 组成
(32位)
- word为字,可以放下16位的数
- 偏移 两位之后,相当于 偏移了 16位(AX的大小)
逻辑左移低位
SHL AX , 1
- X是从存放的是 低地址 , 所以在前面mov的时候就会将低位赋值给X
- 并且 将 最高位的值送给CF标志位
循环左移高位
RCL BX , 1
在上一步,我已经完成了低位的左移,CF中已经有 低位的最高位的值了
此时我进行循环左移
- 将之前的CF的值放入 BX的低位
- 再将 BX的最高位 放入 CF中
最高位加到最低位
ADC AX , 0
- ADC是将 源操作数(0)+ CF(最高位) 的值加到 目的操作数(AX)中
重新赋值
MOV WORD PTR X , AX MOV WORD PTR X + 2 , BX
查看结果
MOV AX , WORD PTR X MOV BX , WORD PTR X + 2
6A6A6A6A
对应二进制左移
一位后,结果就是D4D4D4D4
这篇关于32位循环左移一位(汇编)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南