nandgame中的asm编程 Escape Labyrinth(逃离迷宫)

先翻译题目:

逃离迷宫计算机被困在火星上的迷宫中。编写一个程序,让它逃离迷宫。计算机配备了连接的轮子和前方障碍物探测器。与轮子和探测器的输入/输出是内存映射在地址7FFF上:对外设的输出信号:
位	设置为1代表:
2	向前移动(1步)
3	向左转(90度)
4	向右转(90度)
移动/转向在位从0变为1时开始,但需要一段时间才能完成。从外设输入:
位	当为18	前方探测到障碍物
9	设备正在转向
10	设备正在向前移动

帮助信息的翻译:

汇编语言快速参考
语法为 destination = calculation ; jump-condition 目标和跳转条件是可选的。
D 和 A 是两个寄存器。*A 表示 RAM 中地址所包含的值。示例:
D=D+1   计算 D+1 并将结果存储在 D 中。
D-1;JGE 计算 D-1。如果结果大于 0,则跳转。(结果不被存储。)
A = 1234  将数字 1234 存储在 A 寄存器中。
# Hello   注释 - 编译器忽略计算
D + A
D-A 或 A-D
D&A(按位与)
D|A(按位或)
A+1 或 D+1
A-1 或 D-1
-A 或 -D
~A 或 ~D(按位反转)
10-1
在所有情况下,可以使用 *A 代替 A。目标
D、A 和 *A 的任意组合都可以用作目标。多个目标用逗号分隔,例如 D,A = 1。跳转条件当计算结果为时跳转:
JEQ 等于       0
JNE 不等于     0
JGT 大于       0
JGE 大于或等于  0
JLT 小于       0
JLE 小于或等于  0
JMP 无条件跳转(不管计算结果如何)。数字指令
可以直接将数字赋给 A。例如:A = 47。
十六进制数以 0x 为前缀,例如:A = 0x7FFF
二进制数以 0b 为前缀,例如:A = 0b010111。
可以使用下划线来分隔数字组,例如:A = 0b_0101_1100。注释
以 # 开头的行会被编译器忽略。可以用于注释和文档。标签
关键字 LABEL 后跟一个名称,使名称代表下一条指令的地址。可以在跳转之前将该地址分配给 A,例如:A = LOOP定义
关键字 DEFINE 后跟名称和数字,当它出现在其他指令中时,会将名称替换为数字。例如,以下两行:
DEFINE foo 0X7FFF
A = foo
等同于:A = 0x7FFF多目标
可以将结果分配给多个寄存器。
例如 D,A = D - *A 计算的结果将同时写入 A 和 D。可以指定 A、D 和 *A 的任意组合作为目标。

题目隐含的意思:
迷宫不会中途变更。
输出控制信号后,先得读取寄存器的值,判断是否已经执行完毕。

源码参考:
https://zhuanlan.zhihu.com/p/613188641
解题思路:一直直走,撞墙就左拐。
测试运行,检查结果是正确的。

界面说明:
Show Assembler Help 显示帮助信息
Reset state 可以重置程序
Check solution 检查结果,如果通过就是过关
computer区域,Tick按钮单步执行,Run直接跑,Reset重置机器状态。
最右边是robot的当前状态的文字显示,很像二十多年前的mud游戏。
在这里插入图片描述
跑完后的效果:
在这里插入图片描述

先简单注释下源码:

LOOP_FORWARD :
A = 0x7fff
D = *A
A = 0x0100  //判断bit8是否为1,前方是否有障碍。实际也判断了bit9、bit10是否为0
D = D - A
A = LOOP_TURN_LEFT
D; JEQ      //撞墙了,调左转函数
A = LOOP_RE_READ
D; JGT      //D大于0,说明bit9、bit10不为0,需要等待前面的动作执行完毕
A = 0x0004  //bit2设置为1,控制直走
D = A
A = 0x7fff
*A = D
A = LOOP_FORWARD
JMPLOOP_TURN_LEFT : //左转函数
A = 0x0008  //bit3设置为1,控制左转
D = A
A = 0x7fff
*A = D
A = LOOP_FORWARD
JMPLOOP_RE_READ :  //重新探测robot状态
A = 0x7fff
D = *A
A = LOOP_FORWARD  //寄存器为0时,控制直走
D; JEQ      
A = 0x7fff
D = *A
A = 0x0100  //判断前方是否有障碍
D = D - A
A = LOOP_TURN_LEFT
D; JEQ      //调左转
A = LOOP_RE_READ
JMP         //接着等前面的执行完毕

有三个LOOP,可以理解为三个函数
A = LOOP_FORWARD
JMP
就是无条件调用LOOP_FORWARD函数

A = LOOP_TURN_LEFT
D; JEQ
是指D寄存器中的值==0时,调用LOOP_TURN_LEFT函数

A = LOOP_RE_READ
D; JGT
同理,D寄存器中的值>0时,调用LOOP_RE_READ函数

如果语法错误
会被标红,无法执行,例如:
在这里插入图片描述
鼠标放在标红的错误代码上时,会有错误提示信息弹出窗。

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

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

相关文章

UE4_动画基础_ 使用分层动画(Using Layered Animations)

完成在移动过程中武器发射的角色制作! 动画混合仅仅意味着在一个角色或骨架网格体上的两个或多个动画之间进行平滑过渡。在虚幻引擎4中,有多种方法可以应用这种混合,要么通过混合空间,或通过实际组合两个基于加权偏差或alpha值的…

Java数组详解

​TOC 第一章、数组的概念介绍 1.1)数组的概念 ①数组就是用来储存数据的容器,可以存储同一种类型的数据,是同一种数据类型的集合。实现对这些数据的统一管理。如果数组中存储的是基本类型数据,我就不能往里面存引用类型数据。数组中存储的…

CLIPSeg如果报“目标计算机积极拒绝,无法连接。”怎么办?

CLIPSeg这个插件在使用的时候,偶尔会遇到以下报错: Error occurred when executing CLIPSeg: (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /CIDAS/clipseg-rd64-refined/resolve/main/toke…

14届蓝桥杯 C/C++ B组 T5 接龙排序 (最长上升子序列DP+优化)

不难发现这是一个LIS问题&#xff0c;但是如果直接套用LIS的模版&#xff0c;在数据范围到达 1 e 5 1e5 1e5 的情况下&#xff0c;就只能够得到一半的分数&#xff0c;所以我们需要对其进行优化。 首先给出暴力的代码&#xff1a; #include<iostream> using namespace…

知识管理系统|基于Springboot和vue的知识管理系统设计与实现(源码+数据库+文档)

知识管理 目录 基于Springboot和vue的知识管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 5.2.2 文章信息 5.3.1 论坛交流 2、后台 用户管理 5.1.2 文章分类 5.2.1 资料分类 四、数据库设计 五、核心代码 六、论文参考 七、最…

2024年上半年WSK-PETS5报名及考试时间公布

4月1日&#xff0c;中国教育考试网发布了2024年上半年全国外语水平考试WSK&#xff08;PETS5&#xff09;的报名及考试通知&#xff0c;为方便关注者&#xff0c;知识人网小编特做全文转载。 国家公派留学人员全国外语水平考试&#xff08;WSK-PETS5&#xff09;成绩作为国家留…

Python零基础从小白打怪升级中~~~~~~~流程控制语句

第三节&#xff1a;Python的流程控制语法 一、Python条件语句的语法 if 条件1:条件1成立执⾏的代码一条件1成⽴执⾏的代码二...... elif 条件2&#xff1a;条件2成立执⾏的代码三条件2成立执⾏的代码四...... ...... else:以上条件都不成⽴&#xff0c;执行的代码五以上条件都…

axios是什么?axios使用axios和ajax

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 Node.js 环境。它是由 GitHub 用户 mzabriskie 开发的&#xff0c;并且得到了广泛的社区支持。Axios 的设计目标是提供一种简洁、易用且功能强大的 HTTP 请求方式&#xff0c;以替代传统的 Ajax&#xff08;A…

【深入理解Java IO流0x03】解读Java最基本的IO流之字节流InputStream、OutputStream

在开始前&#xff0c;我们再来回顾一下这张图&#xff1a; 本篇博客主要为大家讲解字节流。 我们都知道&#xff0c;一切文件&#xff08;文本、视频、图片&#xff09;的数据都是以二进制的形式存储的&#xff0c;传输时也是。所以&#xff0c;字节流可以传输任意类型的文件数…

2.动态库与静态库

1.库的制作 库文件是计算机上的一类文件&#xff0c;可以将库文件看做是一种代码仓库。它提供给使用者一些可以直接拿来用的变量&#xff0c;函数或类。库是一种特殊的程序&#xff0c;但是库是不能单独运行的。 库文件有两种&#xff1a;静态库和动态库 静态库: GCC进行链接…

Jackson 各种注解使用示例

参考资料 Jackson使い方メモ 目录 一. JsonIgnore二. JsonIgnoreProperties三. JsonProperty3.1 作用于entity属性上&#xff0c;指定json对象属性名3.2 作用于entity方法上&#xff0c;指定json对象属性名 四. JsonFormat4.1 日期格式化4.2 数字格式化4.3 枚举类返回code 五.…

Open CASCADE学习|平面上的PCurve

曲面上的曲线PCurve&#xff0c;字面上理解即为参数曲线(Parametric Curve)。在几何建模中&#xff0c;PCurve通常被描述为附加在参数曲面之间公共边上的数据结构。从更具体的定义来看&#xff0c;当给定一个曲面方程&#xff0c;并且其参数u和v是另一个参数t的函数时&#xff…

Redis数据库的简介、部署及常用命令

关系数据库与非关系型数据 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。sQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言&#xff0c…

HarmonyOS NEXT应用开发之Environment:设备环境查询

开发者如果需要应用程序运行的设备的环境参数&#xff0c;以此来作出不同的场景判断&#xff0c;比如多语言&#xff0c;暗黑模式等&#xff0c;需要用到Environment设备环境查询。 Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用…

wireshark抓包新手使用教程

Wireshark是非常流行的网络封包分析软件&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括&#xff1a; 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该例子学…

20万就想买智能驾驶汽车?!我给你找到了三款车

文 | AUTO芯球 作者 | 雷歌 我都不敢相信&#xff0c;智能驾驶的车型已经这么便宜啦&#xff01; 一年多前&#xff0c;我一个前同事大冤种&#xff0c;还另掏3万多买某个造车新势力品牌的智驾包呢。 现在动不动就全给你标配了。 近的就说刚刚发布的小米SU7标准版&#xf…

962: 括号匹配问题

【学习版】 【C语言】 【C】 #include<iostream>class MyStack { public:struct Node {char val;Node* prev;Node* next;Node(char x) :val(x), prev(NULL),next(NULL) {};};MyStack() {base new Node(0);top base;}bool empty() {return top base;}void push(int …

Mysql底层原理五:如何设计、用好索引

1.索引的代价 空间上的代价 时间上的代价 每次对表中的数据进⾏增、删、改操作时&#xff0c;都需要去修改各个B树索引。⽽且我们讲过&#xff0c;B树每层节点都是按照索引列的值从⼩到⼤的顺序排序⽽组成了双 向链表。不论是叶⼦节点中的记录&#xff0c;还是内节点中的记录&a…

vue 中使 date/time/datetime 类型的 input 支持 placeholder 方法

一般在开发时&#xff0c;设置了 date/time/datetime 等类型的 input 属性 placeholder 提示文本时&#xff0c; 发现实际展示中却并不生效&#xff0c;如图&#xff1a; 处理后效果如图&#xff1a; 处理逻辑 判断表单项未设置值时&#xff0c;则设置其伪类样式&#xff0c;文…

深度学习基础之一:机器学习

文章目录 深度学习基本概念(Basic concepts of deep learning)机器学习典型任务机器学习分类 模型训练的基本概念基本名词机器学习任务流程模型训练详细流程正、反向传播学习率Batch size激活函数激活函数 sigmoid 损失函数MSE & M交叉熵损失 优化器优化器 — 梯度下降优化…