问题标签 [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 回答
171 浏览

y86 - CSAPP与pushtest结果混淆练习题4.7

Y86类似于x86-64。为什么函数 pushtest 总是返回零?

正如我所知,x86-64Push 会先递减 ESP 寄存器而不是写入。先弹出读取,然后递增 ESP 寄存器。

0 投票
1 回答
52 浏览

assembly - 为什么在执行 pushl 指令时 rA:rB 是 2:8 而不是 2:f?

我正在阅读计算机系统的第 4 章:程序员的视角并了解顺序 Y86 实现。所以这里是汇编代码: 在此处输入图像描述

并且我们跟踪pushl指令的执行来分析push操作的每一步。这里是流程,左边是通用的,右边是具体的: 在此处输入图像描述

我可以理解除了 rA:rB 之外的所有步骤。看第一张图片,指令是 a02f,所以在这种情况下,icode:ifun 应该是 a:0,rA:rB 应该是 2:f。但是,根据这本书,rA:rB 实际上是 2:8 而不是 2:f。但是为什么?而且我真的不知道“8”是从哪里来的。

0 投票
1 回答
272 浏览

operating-system - 为什么写被认为是输入操作而读被认为是输出操作?

我目前正在研究计算机系统:程序员的观点 3,在第 4 章中,他们一直将 Y86 处理器中的读取操作称为来自各种 CPU 组件的输出,我不明白为什么。我们肯定想将内存中的数据输入硬件组件吗?

这是文本中的引用以及随附的图表:

寄存器文件有四个端口。它最多支持两个同时读取(在端口 A 和 B 上)和两个同时写入(在端口 E 和 M 上)。每个端口都有地址连接和数据连接,其中地址连接是寄存器 ID,数据连接是一组 64 根线,用作输出字(用于读取端口)或输入字(用于寄存器文件的写端口)。

在此处输入图像描述

此对应已通过文字一致

0 投票
0 回答
40 浏览

y86 - 为什么这个 Y86-64 代码段无法执行预期的 jg 分支?

这是Y86代码供参考

作为参考,我正在使用这个Y86-64 模拟器。在完成第一个内部循环序列后,就会出现问题。%rsi 中的寄存器值为 4,我刚刚在处理 jg 指令之前从 %rsi 的前一个值中减去了 1,但它仍然没有跳转到 outer_loop。

0 投票
0 回答
716 浏览

c - 将 C 函数转换为 Y86 函数

这里的第一个问题,如果我做错了什么,请告诉我。

本质上,我在将 C 函数转换为 Y86 函数时遇到了一些麻烦。我不知道如何将 C 函数参数放入 Y86 的寄存器中(不知道我是否正确描述了这一点,但请检查下面的尝试)。请记住,我对 C 和 Y86 比较陌生。

假设我在 C 中有一个函数:

现在我试着把它放在 Y86 中:

我假设 Y86 将我的输入字面上视为 0xa0(十六进制),但我不知道该怎么做。

0 投票
0 回答
752 浏览

c - 在 C 中实现 Y86 Fetch 指令

对不起,这个问题很长,但我真的迷失了这个任务。我基本上被要求实现 fetchInstruction。我猜,另外两个是我应该使用的辅助函数。我在下面附上了 fetchInstruction.c 代码和 instruction.h 代码。我不期待直接的答案和完整的代码,但是有人可以指出我如何开始这个正确的方向吗?对于那些想知道的人,programMap 指的是内存本身,而 location 是指令的位置。

0 投票
0 回答
277 浏览

loops - 如何在 y86 中编写 for 循环

我正在尝试在 y86 中编写等效的 for 循环,但由于某些奇怪的原因,它只迭代一次。请注意,y86 没有 cmp 指令,所以我使用 push、sub 和 pop。

0 投票
0 回答
84 浏览

performance - Y86 架构立即数 VS 寄存器算术效率问题

我正在与 Y86 程序的计算机体系结构课程中的一个团队合作,以实现乘法函数 imul。我们有一个可以工作的代码块,但我们正在努力使其尽可能高效地执行。目前,对于 imul,我们的块看起来像这样:

现在我们最好的想法是使用立即算术指令(isubq 等)而不是普通的 OPq 指令,并将常量设置到寄存器中并使用这些寄存器。在这种特定情况下,这种方法会更有效吗?非常感谢!

0 投票
0 回答
36 浏览

y86 - 为什么这里传递了错误的参数?

我是 Y86 的新手,正在尝试编写递归乘法函数,但不断传递错误的参数。

调用乘法函数的代码:

和实际的乘法代码:

我为 x 和 y 都传入了 4,因为调用它们的函数是一个数字的平方,所以它们应该是相同的,但是在一行:

它传入 2 而不是我最初放入的 4,最终返回值 13 而不是 16。

根据我对 Y86 的有限理解,“mrmovl 8(%ebp),%ebx”应该返回我设置为等于 Y 的第二个参数,“mrmovl 12(%ebp),%edx”应该返回等于 X 的第一个参数,两者都作为 4 传入。

0 投票
0 回答
50 浏览

architecture - y86 指令集造成混乱

我是计算机体系结构的初学者。我尝试学习 Y86 架构。我得到了 Y86 架构的参考资料。我没看懂图片Stage computation: Arith/log. ops。我研究过这本书Computer Systems: A programmer's Perspective,但我不清楚

  1. M1[电脑]
  2. M1[PC+1]等线

根据本书,M1[x] 表示访问(读取或写入)内存位置 x 的 1 个字节。这意味着 M1[PC] 意味着访问(读取或写入)内存位置程序计数器的 1 个字节。这有意义吗?

  1. valP <- PC+2

但是为什么它是 PC+2 而不是任何其他整数。

我也是从书里知道的In the fetch stage, we do not require a constant word, and so valP is computed as PC + 2

但话又说回来It is also possible fetches a 4byte constant word valC

所以假设,在上面的例子中,在 rA:rB<-M1[PC+1] is valC<- M4[PC+2] 之后还有另一行,那么下一行 valP<-PC +______

在这里,我尝试按照我在此处引用的链接解决一个小程序

已编辑:我编辑了这个问题并尝试了解我从链接中获得了多少知识。

我的代码好吗?