ARM64 在线仿真器

news2024/9/23 19:24:52

今天在晚上找到一个简单的ARM64在线仿真器,它非常适合学习ARM64的指令,在教学中应该很好用。网址ARM64 Online Simulatoricon-default.png?t=N7T8http://163.238.35.161/~zhangs/arm64simulator/

它是由康涅狄格州立大学的Shuqun Zhang教授开发的。软件基于Alexandro Sanchez开发的Unicorn CPU emulator framework for JavaScript (https://github.com/AlexAltea/unicorn.js)。这是一个非常有名的轻量级CPU仿真器。

我们使用一个简单的斐波那契数列计算程序进行了测试:

main:
      mov x0, 10
      mov x1, #1
      mov x2, #1
      mov x3, #0
      START:
            cmp x0, x1
            b.gt LOOP
            b.eq END
      LOOP:
            add x4, x2, x3
            mov x3, x2
            mov x2, x4
            add x1, x1, #1
            b START
      END:
            mov x0, x4

这段ARM汇编程序是一个简单的循环计算程序。下面是对每行代码的解释:

  1. mov x0, 10: 将寄存器x0的值设置为10。这通常用作循环计数器。
  2. mov x1, #1: 将立即数1移动到寄存器x1,用作循环的初始值。
  3. mov x2, #1: 将立即数1移动到寄存器x2,用作循环的起始值。
  4. mov x3, #0: 将立即数0移动到寄存器x3,用作循环中的累加器。

接下来是程序的主要部分:

  1. START:: 标签,标记循环开始的地方。

  2. cmp x0, x1: 比较寄存器x0和x1的值。

  3. b.gt LOOP: 如果x0大于x1(即循环计数器x0大于1),则跳转到标签LOOP

  4. b.eq END: 如果x0等于x1,跳转到标签END,结束程序。

  5. LOOP:: 标签,标记循环体开始的地方。

  6. add x4, x2, x3: 将x2和x3的值相加,结果存储在x4中。这是计算斐波那契数列的步骤。

  7. mov x3, x2: 将x2的值移动到x3,为下一次迭代准备前一个斐波那契数。

  8. mov x2, x4: 将x4的值移动到x2,更新当前的斐波那契数。

  9. add x1, x1, #1: 将x1的值增加1,这是循环计数器的更新。

  10. b START: 无条件跳转到START标签,继续循环。

  11. END:: 标签,标记程序结束的地方。

  12. mov x0, x4: 将x4的值移动到x0,这通常是程序的返回值或最终结果。

这个程序计算的是斐波那契数列的第10项(因为初始时x0为10)。斐波那契数列是这样的序列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...,其中每一项都是前两项的和。

运行结果:

  • 初始时x2和x3都是1(斐波那契数列的前两项)。
  • 经过9次循环(因为x0从10递减到1),x4将包含斐波那契数列的第10项的值。

根据斐波那契数列的定义,第10项的值是55。因此,程序运行结束后,寄存器x0将包含值55。

将程序输入到仿真器中,然后运行程序就可以得到正确的结果。

 仿真器的主要功能:

  • 支持64位ARM指令集。4千字节内存(地址范围0x10000 - 0x11000)。
  • 代码段:0x10000 - 0x107FF,数据段:0x10800 - 0x10DFF,栈段:0x10E00 - 0x10FFF
  • 不支持:伪指令(directives),系统调用(SVC)
  • 伪指令 "LDR reg, #imm" 不被支持。您可以使用 "ADR x1, #0x800" (寄存器x1将具有0x10800的值而不是0x00800),然后使用 "LDR/STR x2, [x1]" 来加载/存储数据段中的数据。
  • 您可以通过双击寄存器,并输入新的十六进制值来修改寄存器的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

评价算法(topsis熵权法)

评价算法 熵权法 上面箭头的一步用到了带权重的距离公式。 上面是某种求权重的方法,合理就行。 但是在使用熵权法的时候,一定要注意用的是规范化矩阵再用熵权法求权重。 规范化之前一定要判断每一列的性质 #熵权法:import xlrd import num…

巴黎奥运会背后的8K国际公用信号制作

北京时间2024年8月12日凌晨3时,举世瞩目的巴黎奥运会闭幕式在法兰西体育场举行,闭幕式演出部分的主题为“记录”。BOSMA博冠首款8K 50P小型化广播级摄像机B1跟随中央广播电视总台“中国红”8K转播车,为田径比赛和闭幕式提供8K国际公用信号制作…

【Ajax使用说明】Ajax、Axios以及跨域

目录 一、原生Ajax 1.1 Ajax简介 1.2 XML简介 1.3 AJAX 的特点 1.3.1 AJAX的优点 1.3.2 AJAX 的缺点 1.4 AJAX 的使用 1.4.1AJAX的基本操作 1.4.2AJAX的传参 1.4.3 AJAX的post请求及设置请求体 1.4.4 AJAX响应json数据 1.4.5 AJAX请求超时与网络异常处理 1.4.5 AJ…

windows 使用Clion开发FreeSWITCH源码

1.准备环境 window安装clion可以编译freeswitch的docker镜像 2.clion配置ssh和Toolchain的配置 去这里看吧 3.makefile配置 Toolchain记得选ssh的 成功之后左下角有这个小锤子,这个小锤子就是生成makefile文件的,记得点击 同时就会出现这个东西 这样…

长文_ZATA

文章目录 环境配置问题miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块。 环境配置问题 miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块。 CSDN 原因:fbegmm.dll文件出现问题 解决方案: 使用依赖分析工具https:/…

SuccBI+低代码文档中心 —数据(数据连接、调度管理)

连接数据 数据加工和分析需要连接已存在的数据,通常是业务系统的数据或文件数据,业务系统数据一般存储在关系型数据库中。对于存储在json文件中的,也可以通过脚本数据加工的方式获取数据。 在数据模块下,点击新建,可以…

【Python机器学习】无监督学习——K-均值聚类算法

聚类是一种无监督的学习,它将相似的对象归到同一簇中,它有点像全自动分类。聚类方法几乎可以应用于所有的对象,簇内的对象越相似,聚类的效果越好。 K-均值聚类算法就是一种典型的聚类算法,之所以称之为K-均值是因为它…

【qt】QMainWindow下实现一个记事本

之前我们学过QWidget,QMainWindow会在ui界面多一个菜单 先实现ui界面 1.添加文本编辑,实现可以写多行 2.将文本编辑放大,拖动即可 3.编辑菜单栏 4.然后我们要实现对应子列表的功能,但是在这里不能转到槽,所以我们…

【Vue3】Pinia store 组合式写法

【Vue3】Pinia store 组合式写法 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗…

Java EE基础知识点

前言👀~ 上一章我们介绍了性能测试工具LoadRunner,今天开启新的篇章Java EE进阶相关的内容 框架 Maven 项目构建 依赖管理 依赖传递 依赖排除 Maven概念 Maven仓库 Maven 设置国内源 创建Spring Boot项目 Web服务器 如果各位对文章的内容感兴…

Flutter 3.24 对普通开发者有哪些影响?

哈喽,我是老刘 Flutter 3.24刚刚发布了。突然觉得时间过得好快。六年前刚开始使用Flutter 1.0的场景还在眼前。 随着Flutter团队老成员的回归和新成员的加入。 前段时间Flutter团队裁员的影响似乎也逐步消退了。 新版本发布的功能逐步回到了该有的状态。 这里盘点…

解决域名加别名后再代理或者映射到fastadmin项目

如果遇到微应用不想再添加或者不方便添加单独的二级域名时,就需要用到代理或者映射来进入到我们的微应用项目中。 可以修改route.php路由文件的下面这个参数 __alias__ > [别名 > 模块/控制器] 如图 然后再修改config.php文件里面的view_replace_str参数…

C++入门基础知识11

C 关键字 下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。 !!!完整关键字介绍 (下一篇博文中将详细罗列介绍)

内网穿透:打破网络边界的神奇钥匙

在数字化时代,我们每天都在使用各种网络设备,但你是否曾想过,家里的智能摄像头、私人服务器或是游戏主机,如何能够在远离家的地方也能轻松访问? 这就需要涉及到内网穿透技术了。今天,我们就用简单的例子来揭…

coze 工作流使用

什么是工作流 工作流就是将一系列的逻辑节点串起来的流程,例如我们做一个爬虫,第一步先爬取网页内容,第二步数据清洗,得到我们想要的数据,第三步存到数据库。这里每步就是一个逻辑节点,她们之间有先后或是…

如何用不到一分钟的时间将Excel电子表格转换为应用程序

我们大多数人对电子表格又爱又恨。当企业需要分析数据、为决策过程提供信息并可视化信息时,Excel和Google Sheets是首选。这些文档非常容易创建,它们帮助我们以直接的方式构建相关的想法和适用的数据。除此之外,事情可能会变得一团糟。 对于…

服务注册中心--Eureka

一.Eureka概述 Eureka是一个基于REST的服务,主要用于AWS(Amazon Web Services 亚马逊云计算服务)云中的定位服务,以实现中间层服务器的负载平衡和故障转移在 Spring Cloud 微服务架构中通常用作注册中心, 我们称这个服务为 Eureka Server,还…

springboot学生作业管理系统---附源码14916

摘 要 在信息化社会中,人们需要针对性的信息获取途径。然而,由于不同角度和偏好的存在,人们经常只能获得特定类型的信息,这也是技术攻克难题之一。为了解决学生作业管理系统等问题,本研究通过分析和研究,设…

汽车免拆诊断案例 | 2011 款进口现代新胜达车智能钥匙系统有时失效

故障现象  一辆2011款进口现代新胜达车,搭载G4KE发动机,累计行驶里程约为26.3万km。车主进厂反映,有时进入车内按下起动按钮,发动机无法起动,且组合仪表黑屏。 故障诊断  接车后试车,车辆使用一切正常。…

Windows创建定时任务触发bat脚本 实现oracle数据库备份

Windows中的计划任务程序来触发oracle数据库备份脚本 任务计划程序 创建基本任务 填写名称、描述,下一步 触发任务:填写定时周期 操作:启动程序,选择要执行的bat脚本 点击完成,就能在任务列表中查看到我们刚才创…