【问题标题】:Fundamental Y86 : Documentation and basic requirements基础 Y86:文档和基本要求
【发布时间】:2018-03-21 14:26:21
【问题描述】:

我在foo.ys 文件中有以下非常简单的 Y86 程序:

irmovl $1, %eax

运行以下命令:

$ yas foo.ys

我从yas 得到以下(完全没用的)反馈:

Invalid Line

所以--我有几个问题:

  1. Y86 文档存放在哪里?
  2. 上述程序有什么问题?

【问题讨论】:

  • 1. google,例如y86tutoring 2. 什么都没有,在这里工作。
  • 主流(真实)架构可能更复杂,但它们通常具有更好的工具链,可以提供(稍微)更有用的错误消息。汇编器错误消息通常很模糊,但不是那么模糊。
  • @Jester - 你用的是什么版本的 yas?
  • 我下载了this one,没有版本号。

标签: assembly y86


【解决方案1】:

看起来您使用的是 64 位版本,y86-64。我已经检查过,这实际上会产生给定的错误消息。虽然 x86-64 确实支持 32 位,但显然 y86-64 不支持。你应该改用irmovq $1, %rax(注意指令后缀和寄存器前缀的变化)。

【讨论】:

【解决方案2】:

看起来 Y86 应该是 IA-32 whose documentation can be found here 的一个子集。

似乎,在 IA-32 中,以 l 结尾的移动指令不会移动长数据类型;他们会做有条件的动作和与 Y86 无关的事情。

然而,有些版本的 Y86 支持irmovl,有些不支持。

如果您使用的是 64 位版本的 yas,请使用四字指令和地址:

irmovq $1, %rax

【讨论】:

  • 听起来你有一个 64 位版本。那些使用四字,但你的寄存器应该是rax而不是eax
  • @StudentsTea:它是 IA-32(英特尔架构),而不是 AI。不是我的反对意见,但这个答案并不是真的有用,你可能应该删除它。 (它也有错误。x86 没有movl,你在想cmovl。)Intel x86 文档对 y86 并不是很有用。也许 AT&T 语法文档会,但 y86 或 y86-64 仅支持固定操作数大小(或者也可能是字节?)真正的 x86 手册只会令人困惑。