问题标签 [y86]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3977 浏览

c - 对这个 Y86 汇编代码的内存位置感到困惑

我们在一个班级中有一段 C 代码,我们需要将其转换为 Y86,这是由某个人写在黑板上的,当然还有老师的更正。

但是,我混淆了代码初始部分的内存位置和 .pos 指令:

我从这段代码中了解到的是:
它从位置 0 ( .pos 0 ) 开始,irmovl指令占用 6 个字节,因此,下一条 rrmovl指令从位置 6 开始,该指令占用 2 个字节,我们现在位于位置 8 .

jmp指令从8 开始占用 5 个字节,我们现在在位置 13。

现在可以节省堆栈空间来保存数组的 100 个整数,为此我们使用 .pos 430 来保存至少 400 个字节(4 个字节 * 100 个整数)和 17 个以上(下一个位置减去当前位置,430 -13=17)。

我们现在在位置 430,我们需要再保存 4 个字节来保存sum和另外 4 个字节来保存i,它放在位置 438。

在位置 438 是我们程序的主要代码将开始的地方。

我想我做对了,我唯一的问题很简单:
为什么我们使用.pos 430来为 100 个整数保留空间?我们应该只需要正好 400 个字节来保存所有这些。难道.pos 413 (因为之前的位置是 13 并且我们需要 400 个字节来存放 100 个整数,因此是 413)是否比.pos 430足够且更正确?

我错过了什么?

0 投票
1 回答
20041 浏览

assembly - 汇编:Y86 堆栈和调用、pushl/popl 和 ret 指令

除非我抄错了,否则上面的代码是一个学生在课堂上在老师的帮助/纠正下写在黑板上的:

如您所见,所有指令中都有一堆注释,我(我认为)其中大部分都得到了,让我感到困惑的是 call、pushl/popl 和 ret 指令。我不太了解它们,也不了解堆栈发生了什么以及所有记录指向的位置。基本上,带有注释(//)的行没有写任何内容。

我了解这一切是如何运作的,这非常重要,希望你们中的一些人能够对所有这些混乱局面有所了解。

关于我的评论的一些注释:

  • 0xsum:这并不意味着地址是“sum”,这是不可能的。这只是一种在不使用确切内存地址的情况下理解我在说什么的方法。
  • [sum = 0]:这意味着在我们的 C 代码中,此时变量 sum 将被设置为 0。
  • i + 1 => i:这意味着我们将 'i' 的值加 1,并且在下面的行中,'i' 实际上将代表那个增加的值。
0 投票
2 回答
4158 浏览

assembly - 我是否正确理解此 Y86 汇编代码中的堆栈?

我创建了这个简单且毫无意义的汇编 (Y86) 代码,以查看在使用指令调用、pushl、popl 和 ret 时我是否理解堆栈中发生的所有事情。

就像我说的,这段代码毫无意义,它只是用于测试/学习目的。虽然,所有内存地址都是正确(有希望的)计算出来的,而且不是随机的。

汇编代码如下:

以下是我最好的绘制堆栈并解释每个步骤(指令)对堆栈的作用。请注意,我使用 SP 和 BP 分别指代 %esp 和 %ebp 因为它们被大量使用并且更易于阅读。

我想知道的是我是否把所有事情都做对了,或者我是否错过了任何事情。请随意复制/粘贴您想要的任何内容,并在您的答案中修复一些步骤。

另请注意,我对此的理解非常重要,我周一有一个考试,我需要为此做好准备,我希望你能给我最好的答案。根据您的回答,我可能(或没有)有一些相关问题,我们将在评论部分处理。

0 投票
3 回答
6733 浏览

assembly - Y86 代码未按预期处理 ret 指令

下面是一门汇编语言课的作业题。我们将通过在 gdb 中读取从 C 生成的 X86 代码来创建 Y86 代码。该函数的目的是对链表的元素求和。

就目前的功能而言,它可以工作!当程序终止时,正确的值包含在 %eax 寄存器中。不幸的是,这只是由于黑客攻击而正确的。我halt在函数末尾添加了一条指令,就在ret指令之前。如果我取消注释,似乎发生的是当它执行ret指令时,PC 设置为 0x0。换句话说,它似乎从头开始,当它应该做的就是回到它被调用的地方。它进入一个无限循环。

代码如下。如果您安装了 Y86 模拟器,它是独立的。

谢谢你的帮助!

0 投票
1 回答
1910 浏览

y86 - 在第一个 Y86 程序中没有得到输出

我正在努力学习Y86,所以我做了一个非常简单的程序。它有一个由三个长整数组成的数组,每个块通过询问用户输入来填充rdint

编译的(?)程序要求三个输入,但无法将它们打印出来。

代码:

我的输入:

输出:

0 投票
3 回答
1567 浏览

arrays - 在不使用任何条件跳转的情况下计算数组中的正项

我怎样才能做到这一点 ?

我想我应该做一些类似计算校验和的事情,但这应该在最终位中给出正整数的数量。

编辑:如果我们也不能使用“shift”怎么办

编辑2:ISA是Y86

0 投票
2 回答
2250 浏览

c - y86 装配标签没有做他们应该做的事

下面发布的是我为一个简单的 y86 汇编程序编写的代码。给定两个整数,它应该打印出两者中较大的一个。在每一行的右边,我有一个等效的 C 翻译。

使用汇编程序yas,生成的 .yo 文件如下所示:

  • 这还没有组装好。有人告诉我,无论在哪里遇到标签,它都会被程序中找到它的地址替换。如果输入的第一个数字较大,则 0x00a 行的指令7514000000。这是告诉程序计数器在应该告诉它转到0x016时转到第0x014行(甚至不存在的行) 。第0x011行也存在同样的问题。为什么会这样?
  • 当我使用地址行而不是标签来组装程序时,会打印结果,但不会打印换行符。我怎样才能解决这个问题?
  • 最后,一个小问题:如果我没有将注释作为第一行,则第一行代码将被忽略。这应该发生吗?

感谢您的宝贵时间,我期待您提供任何答案。

0 投票
1 回答
1226 浏览

assembly - Y86 汇编代码编译问题

所以...我的老师要求我们制作一个在 Y86 模拟器中运行的乒乓球游戏,他给了我们一个汇编编译器和链接器来创建二进制文件。问题是模拟器不断调用全局变量,在代码中间放置大量 nops,等等。模拟器和编译器到目前为止工作正常,我不知道问题出在代码还是编译器上。

编译器把这个

进入这个

当我试图在模拟器中运行它时,它一直在调用一个全局变量,很多 nops 突然出现,并且在执行过程中停止了。

你认为问题出在编译器上吗?

0 投票
2 回答
3860 浏览

c - 将 C 代码转换为汇编代码?

我必须将此 C 代码转换为汇编代码:

我的代码在下面,并且不完整。

基本上我认为它已经完成了,但是当我尝试运行它时,我在两行标记为无效的旁边发表了评论,但我不确定它们为什么无效。我也不确定如何为 a > b 做一个 if 语句。我可以使用了解 y86 汇编语言的人的任何建议。

0 投票
2 回答
11255 浏览

assembly - y86 命令列表?

我正在寻找一种将某些代码转换为 y86 等效代码的方法。问题是我很难找到一个好的 y86 函数列表。我可以找到一些功能,但不是可用的主要功能的良好列表。有谁知道我在哪里可以找到这样的清单?