编写 Z80 汇编程序 - 词法 ASM 并使用组合构建解析树?

2023-12-23

我对编写汇编器的概念非常陌生,即使在阅读了大量材料之后,我仍然很难理解几个概念。

  1. 将源文件实际分解为令牌的过程是什么?我相信这个过程称为词法分析,我已经到处搜索有意义的真实代码示例,但我找不到如此简单的代码示例,非常受欢迎;)

  2. 解析时,信息是否需要在树上向上或向下传递?我问的原因如下,取:

    LD BC,nn

一旦标记化,它需要变成以下解析树(???)

  ___ LD ___
  |        |
 BC        nn

现在,当遍历这棵树时,它需要生成以下机器代码:

01 n n

如果指令是:

LD DE,nn

那么输出需要是:

11 n n

这意味着它提出了一个问题,LD 节点是否根据操作数返回不同的内容,或者是操作数返回某些内容?这是如何实现的?如果时间允许的话,更简单的代码示例将非常好。

我最感兴趣的是在这里学习一些原始流程,而不是查看先进的现有工具,因此在将我发送到之前请记住这一点Yacc https://en.wikipedia.org/wiki/Yacc or Flex https://en.wikipedia.org/wiki/Flex_(lexical_analyser_generator).


好吧,你真正想要的树的结构 对寄存器和存储器进行操作的指令 涉及偏移位移和索引寄存器的寻址模式 看起来像这样:

    INSTRUCTION-----+
    |      |        |
  OPCODE  REG     OPERAND
                  |     |
                OFFSET  INDEXREG

是的,您想要在树中上下传递值。 正式指定此类值传递的方法称为 “属性语法”,你可以为你的属性装饰语法 语言(在你的情况下,你的汇编语法)与值传递 以及对这些值的计算。如需了解更多背景信息, 看属性语法的维基百科 http://en.wikipedia.org/wiki/Attribute_grammar.

In a 你问的相关问题 https://stackoverflow.com/questions/1317256/z80-asm-bnf-structure-im-am-on-the-right-track,我讨论了一个 工具,DMS http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html, 它处理表达式语法和构建树。作为 语言操作工具,DMS 面临着完全相同的上下 树信息流问题。你不应该感到惊讶, 作为高端语言操作工具,它可以处理 直接进行属性语法计算。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写 Z80 汇编程序 - 词法 ASM 并使用组合构建解析树? 的相关文章

  • Parse::RecDescent 语法未按预期工作

    我所能做的就是 STRING PARAMS VARIABLE 和 FUNCNAME FUNCTION 似乎有问题 但我就是看不到它 use strict use Parse RecDescent RD ERRORS 1 Make sure
  • 如何编译GCC生成的asm?

    我正在玩一些汇编代码 有些事情困扰着我 我编译这个 include
  • 调用了 numberOfRowsInSection 但未调用 cellForRowAtIndexPath

    在我的表视图中节中的行数被调用两次但是cellForRowAtIndexPath不叫 我想在 tableView 中显示 Facebook 好友列表 如果 cellForRowAtIndexPath 调用我的问题就解决了 我在这里的数组中得
  • iOS 解析如何通过 URL 下载文件

    我正在将 parse 用于我的聊天应用程序 当我上传文件时 我保留该 url 并将该 url 发送给其他用户 然后其他用户可以通过该 URL 下载文件 这是我上传文件的代码 void uploadBlob NSData blob fileN
  • python 3 argparse 调用函数

    我想在 python3 中创建一个类似命令行 类似 shell 的界面 Argparse 似乎负责解析和显示帮助 错误消息 根据argparse 的 python3 文档 https docs python org 3 5 library
  • 将 Java 字符串转换为 sql.Timestamp

    收到以下格式的字符串 YYYY MM DD HH MM SS NNNNNN 时间戳来自 DB2 数据库 我需要将其解析为 java sql Timestamp 并且不丢失任何精度 到目前为止 我一直无法找到现有的代码来解析远至微秒的数据 S
  • 用于(联合国)结构化文本文档的词法分析器/解析器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有很多脚本解析器和词法分析器 即结构化计算机语言 但我正在寻找一个可以将 几乎 非结构化文本文档分成更
  • LC3 LEA指令和存储的值

    我对这个问题感到困惑 指令后寄存器0中存储的值是多少 LEA R0 A 被处决了吗 为什么答案是x370C 我认为应该将A的地址加载到R0中 如果是这样我们怎么知道地址 有人可以帮忙吗 非常感谢 ORIG X3700 LEA R0 A LD
  • 使用多个可选模式时顺序的重要性

    可选模式的顺序如何DateTimeFormatter影响解析操作吗 我正在运行这个程序 想知道为什么最后一行抛出异常而不是前三行 public static void main String args String p1 EEEE E dd
  • iOS 中的 CSV 逐行解析

    我正在 Objective c 中解析 CSV 文件 该文件包含如下内容 line 40 Rising searches line 41 nabi avc Breakout line 42 stonewall 700 line 43 med
  • Rust 编程竞赛中最快的惯用 I/O 例程?

    我的问题已部分得到解答 因此我根据从评论和其他实验中学到的知识对其进行了修改 总之 我想要一个用于编程竞赛的快速 I O 例程 其中使用单个文件解决问题 无需外部包 它应该从一个以空格分隔的标记序列中读取BufRead 标准输入或文件 标记
  • C# 中的编译器

    我正在寻找一个可定制的解析器和 或词法分析器 它可以让我在 C 中构建自定义语法检查器 本质上 用户将输入一行代码 自定义 语法检查器将能够响应是否编写正确 That s Irony http irony codeplex com 请务必阅
  • 整数溢出问题

    我不断遇到整数溢出问题 我不知道如何解决它 有人可以帮忙吗 edx 包含 181 eax 包含 174 xor eax edx mov edx 2 div edx 假设你谈论的是x86 div edx这实际上没有意义 32位div将edx
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • 自动将 JSON 对象映射到 Ruby 中的实例变量

    我希望能够自动将 JSON 对象解析为实例变量 例如 使用此 JSON require httparty json HTTParty get http api dribbble com players simplebits gt shots
  • 如何在 GCC C++ 中编写多行内联汇编代码?

    这看起来不太友好 asm command 1 command 2 command 3 我真的必须在每一行加上双引号吗 另外 由于多行字符串文字在 GCC 中不起作用 我也无法欺骗它 我总是在互联网上找到一些例子 该人手动插入制表符和换行符而
  • 调用可以是 cdecl 或 stdcall 的函数

    我需要编写调用外部函数的代码 该函数可以是 32 位 Windows 应用程序中的 stdcall 调用或 cdecl 我的代码 调用者 无法提前知道其中的哪一个 现在 如果我尝试从定义为 stdcall 的调用站点调用 cdecl 函数
  • 使用 isdigit 表示浮点数?

    a raw input How much is 1 share in that company while not a isdigit print You need to write a number n a raw input How m
  • Python将文本文件解析为嵌套字典

    考虑以下数据结构 HEADER1 key value key value HEADER2 key value key value HEADER3 key value HEADER4 key value key value 原始数据中没有缩进

随机推荐

  • 逆变?协方差?这种通用架构有什么问题......?

    我在设置命令处理架构时遇到一些问题 我希望能够创建许多从 ICommand 派生的不同命令 然后 创建多个从 ICommandHandler 派生的不同命令处理程序 这是我开始定义的接口和类 interface ICommand class
  • 改造,onResponse方法不起作用

    我是 Retrofit 的新手 尝试从一台 Web 服务器获取数据 创建模型 接口 但这仍然不起作用 方法 onResponse 中的问题 可能 我添加到该方法 Log d 和 Toast 但我没有看到 Log 和 Toast当启动我的应用
  • std::experimental::ostream_joiner 和 std::pair

    在c 17 g 7中 终于有了久违的ostream joiner 它可以正确输出到 ostream 并使用中缀分隔符分隔集合元素 include
  • 如何在不使用 !important 的情况下自定义 twitter bootstrap 的各种输入大小?

    Bootstrap 的输入大小仅按宽度扩展 而按钮则按高度和字体大小扩展 见图 我正在尝试自定义输入以按高度和字体大小进行扩展 注意 他们正在为下一个版本修复这个问题 但我太不耐烦了 到目前为止我只能通过使用来实现这一点 important
  • 如何更改 okhttp 中请求的超时时间

    一般来说 我们为 okHttp 客户端设置超时 并使用该客户端的单个实例 因此 一旦生成该客户端 我们就无法更改该客户端的超时 如何更改特定请求的超时 到底有没有 不创建新客户端就可以做到这一点 很常见的是 某些调用花费的时间至少是每个应用
  • 具有可选子元素的默认 XML 序列(或全部)是否必须至少有一个子元素?

    如果有人能够确认以下模式的解释是否正确 我将不胜感激
  • Java 10 Eclipse + Maven“java.lang.module.FindException:找不到模块 myproject”

    我在 Eclipse 4 7 3a 中创建了一个新的 Java 10 项目 这是一个带有一些依赖项的 Maven 项目 该项目名为 MyProject 下面是我的 module info java module myproject expo
  • AndroidX 与 Android 数据绑定不兼容

    好的 我的任务是将项目迁移到 AndroidX 以减少项目中支持库的混乱 我已经按照官方文档启用了 AndroidX 但现在在尝试通过相应的自动生成的 Binding 类 通过在模块 gradle 中启用数据绑定创建 来膨胀视图时遇到运行时
  • Android Studio 0.8 - 不再运行自定义任务

    我刚刚从 Android Studio 0 6 升级到 0 8 3 在 Linux Mint 15 上 现在我的构建无法按预期运行 在我的 gradle 文件中 我有很多自定义任务 它们执行预构建步骤 复制文件 调整图像大小等 lots o
  • Chrome 扩展程序测试

    有人有 Chrome 扩展测试的经验吗 例如 我想创建一个使用的扩展 弹出浏览器操作 并自动执行一个测试用例来检查 单击时弹出窗口的行为 铬问题 http code google com p chromium issues detail i
  • Elixir 中的快速不区分大小写排序

    Elixir 程序员们大家好 我有大约 2 500 首音乐曲目的列表 我想按不同的参数 例如曲目标题 对它们进行排序 排序应不区分大小写 下面的代码可以工作 但需要大约 100 毫秒到 130 毫秒来对列表进行排序 有更快的方法吗 对我来说
  • 以编程方式添加 ARSCNView

    如何以编程方式添加 ARSCNView 如何设置宽度 高度和约束 class ViewController UIViewController var sceneView ARSCNView let configuration ARWorld
  • 由于环境错误而无法安装软件包:[WinError 5] 访问被拒绝:

    我有 Windows 10 我已完成 Tensorflow 安装 有用 它说 你好 Tensorflow 但这一切都在它面前 2018 08 18 18 16 01 500579 I T src github tensorflow tens
  • Django:向 UpdateView 生成的表单字段添加额外属性

    我使用的自定义用户是 Django AbstractUser 的子类 我试图存档的是允许用户更新他们的数据 一切正常 但表单看起来很难看 下面是我的代码 类属性未添加到表单中 forms py 简化 class AccountEditFor
  • Decorator() 得到了意外的关键字参数

    我在 Django 视图上遇到此错误 TypeError at web host 1 decorator got an unexpected keyword argument host id Request Method GET Reque
  • Fabric.js 动画对象/图像

    大家好 这是我一直在使用的代码 它将一个物体从 A 移动到 B 我想做的是让它移动到多个点 所以从起始位置 A gt B 然后从 B gt C 等等 也许有一些包含坐标集的变量 这些坐标将作为参数输入到某些动画函数中 但我尝试的任何操作都只
  • 通过映射减少图像尺寸

    我有一个 png 图像 其中有四种颜色 如果我将图像转换为 numpy 数组 我会得到一个具有以下尺寸的数组 length X height X 3 with length height 如何通过映射颜色来减少维度 这是当前的结构 arra
  • MapView:找不到方法 B 引用的类 A

    屏幕上有3个按钮 开始 查看地图 停止 当我单击 查看地图 时 它应该转到显示地图的新屏幕 但出了点问题 应用程序被强制关闭 我不断收到无法找到方法 B 引用的类 A 错误 拜托请有人纠正它 我已经被这个问题困扰三天了 Main xml
  • typedef std 容器?

    我想做 typedef deque type error use of class template requires template argument list type
  • 编写 Z80 汇编程序 - 词法 ASM 并使用组合构建解析树?

    我对编写汇编器的概念非常陌生 即使在阅读了大量材料之后 我仍然很难理解几个概念 将源文件实际分解为令牌的过程是什么 我相信这个过程称为词法分析 我已经到处搜索有意义的真实代码示例 但我找不到如此简单的代码示例 非常受欢迎 解析时 信息是否需