当前位置: 首页 > news >正文

用ARM进行汇编语言编程(3)逻辑移位和轮换,条件与分支

ARM 编程模拟器

ARM 编程模拟器网站地址:

https://cpulator.01xz.net/?sys=arm-de1soc

逻辑移位

LSL:逻辑左移
LSR:逻辑右移

这里有一个二进制00001010,转换为十进制为10,现在要进行LSL逻辑左移

00001010 --- 00010100  //每一位都向前移一位

现在就变成了00010100,十进制为20,就相当于乘以二了,我们可以用逻辑左移的方式,对数值乘以二

现在我们要进行LSR逻辑右移,还是二进制00001010,转换为十进制为10

00001010 --- 00000101   //每一位都向后移一位

现在就变成了00000101,转换为十进制为5,就相当于对数值除以二了

实战:

.global _start
_start:
	mov r0,#10
	lsl r0,#1  //lsl指令后面是需要移动的寄存器,和移动的位数

在这里插入图片描述

本来r0寄存器里面的值是10,现在二进制整体向左移了一位,就变成了20

在这里插入图片描述
实战:

.global _start
_start:
	mov r0,#10
	lsr r0,#1   //lsr指令后面是需要移动的寄存器,和移动的位数

本来r0寄存器里面的值是10,现在二进制整体向右移了一位,就变成了5

在这里插入图片描述

轮换

ROR:右移轮换

轮换和逻辑移位很相似,但移位的时候不会损失数值

LSR:00001001 --- 00000100  //最后的1被移除了
ROR:00001001 --- 10000100  //1去到最左边了

需要注意的是,只有ROR,没有ROL,只能向右移,不能向左移

.global _start
_start:
	mov r0,#100
	ror r0,#1  //ror指令后面是需要移动的寄存器,和移动的位数

在这里插入图片描述

条件和分支

在高级语言里有if判断,在arm里也有if判断的指令

cmp:对操作的两个寄存器相减,不同的话就为正数或负数,相同就为0
bgt:b的意思是分支,gt的意思是大于
bge:大于等于
blt:小于
ble:小于等于
beq:等于
bne:不等于
.global _start
_start:
	mov r0,#2
	mov r1,#1
	cmp r0,r1   //r0 - r1
	bgt baimao  //当r0大于r1时,执行baimao标签里的内容
	
baimao:   
	mov r2,#5

在这里判断是正确的,r0大于r1时,他会直接跳到指定的标签里执行内容

在这里插入图片描述

在这里插入图片描述

以此类推

还有一个指令是可以不用判断,直接执行标签里的内容

bal:执行指定标签里的内容
.global _start
_start:
	mov r0,#2
	mov r1,#1
	bal baimao
	
baimao:
	mov r2,#5

在这里插入图片描述

总结

这是我学习的笔记,有什么错误和不懂的地方欢迎来私信我,或者加我qq

相关文章:

  • maltab datenum函数与正则表达式巧用:逐日数据转为逐月数据、日序转月序
  • PTA JAVA02 基础语法1
  • C++ 语言学习 day06 string , 异常
  • Linux命令`ll`的结果解析
  • 查题校园公众号查题系统
  • git分布式版本控制系统
  • C++ Color the ball
  • mysql的基础操作语句
  • Cookie/Session
  • java抽象类和接口(Comparator和Conparable的使用)
  • 百度首个江苏智算中心落地 携手盐城共建200P算力规模
  • 并发编程(四)---设计模式
  • GitHub:建立仓库,本地上传与更新内容
  • Linux EXPORT_SYMBOL宏详解
  • 猿创征文丨赶紧进来!!!带你0距离全面接触 变量和常量
  • 【391天】每日项目总结系列128(2018.03.03)
  • 3.7、@ResponseBody 和 @RestController
  • Angular Elements 及其运作原理
  • co模块的前端实现
  • Linux Process Manage
  • MySQL主从复制读写分离及奇怪的问题
  • SwizzleMethod 黑魔法
  • vue-router 实现分析
  • 高性能JavaScript阅读简记(三)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 力扣(LeetCode)22
  • 前嗅ForeSpider采集配置界面介绍
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 线上 python http server profile 实践
  • 小程序开发中的那些坑
  • 一、python与pycharm的安装
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 进程与线程(三)——进程/线程间通信
  • #NOIP 2014# day.2 T2 寻找道路
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (学习日记)2024.01.09
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .form文件_一篇文章学会文件上传
  • @Autowired 与@Resource的区别
  • [ IO.File ] FileSystemWatcher
  • [20160807][系统设计的三次迭代]
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [c#基础]DataTable的Select方法
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [CISCN 2019华东南]Web11
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍