问题标签 [machine-language]

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 投票
7 回答
6594 浏览

emulation - 6502 CPU 仿真

这是周末,所以我通过编写一个爱好项目来放松整个星期的编程。

昨天写了一个MOS 6502 CPU仿真器的框架,实现了寄存器、栈、内存和所有的操作码。(链接到下面的源)

我可以在我编写的调试器中手动运行一系列操作,但我想加载一个 NES rom 并将程序计数器指向它的指令,我认为这将是找到有缺陷的操作码的最快方法。

我编写了一个快速的 NES ROM 加载器并将 ROM 库加载到 CPU 内存中。

问题是我不知道操作码是如何编码的。我知道操作码本身遵循每个操作码一个字节的模式,该模式唯一地标识操作码,

ETC

但是我不确定我应该在哪里找到操作码参数。是直接跟在后面的字节吗?在绝对内存中,我想它可能不是一个字节,而是一个短字节。

有人熟悉这个 CPU 的内存模型吗?

编辑:我意识到这可能是在黑暗中拍摄的,但我希望有一些老派的 Apple 和 Commodore 黑客潜伏在这里。

编辑:感谢大家的帮助。在我实施适当的更改以对齐每个操作后,CPU 可以加载和运行马里奥兄弟。它除了循环等待开始之外什么都不做,但这是一个好兆头:)

我上传了源码:

https://archive.codeplex.com/?p=cpu6502

如果有人想知道模拟器是如何工作的,那么它很容易理解。至少没有优化,但话又说回来,我正在模拟一个在 2.4ghz 机器上以 2mhz 运行的 CPU :)

0 投票
13 回答
2293 浏览

compiler-construction - 有人能告诉我计算机编程的基本原理吗?

是什么让一门编程语言的所有单词都能真正发挥作用?我的意思是,实际上发生了什么让计算机知道所有这些词的意思?如果我口头告诉我的计算机做某事,它不会做,因为它不理解。那么这些人类语言写成一种语言究竟是如何真正使计算机做一些合乎需要的活动的呢?

0 投票
10 回答
1530 浏览

assembly - 是否有任何语言直接与硬件对话并且不是汇编语言?

只是想知道汇编世界是如何工作的,我正在阅读wiki上的汇编语言,这句话让我印象深刻:

它实现了对特定 CPU 架构进行编程所需的数字机器代码和其他常量的符号表示。

我一直认为汇编是基于您的 CPU 的固定语言(基于所述 CPU 具有不同的编译器和语言),因此对于您的 CPU,您只能使用这种类型的汇编与您的硬件对话。

但是基于该引用,可能有其他语言使用其他符号来表示相同的数字机器代码。

那么,是否有任何其他语言可以直接与非汇编硬件对话?还是我弄错了?

0 投票
5 回答
4171 浏览

c++ - 在我的 C++ 程序上寻找一些输入。Simpletron,机器语言

编辑:所以,我的编码中似乎确实有问题。每当我运行程序并输入变量时,它总是返回相同的答案..“位置 76 的内容为 0。

好的,伙计们,几天前我在这里发布了一个问题,但这只是一个编译错误,所以如果这看起来很熟悉,那就是原因。我要重申,我是编程新手,我不是最好的,所以我会为了简单起见。这也是一个 SML 程序。无论如何,这是一个家庭作业,我想要一个好成绩。所以我一直在寻找意见,并确保这个程序能做我希望他们正在寻找的东西。无论如何,这里有说明: 编写 SML(Simpletron 机器语言)程序来完成以下每一项任务:

A) 使用哨兵控制的循环读取正数 s 并计算和打印它们的总和。输入负数时终止输入。B)使用计数器控制循环读取七个数字,一些正数和一些负数,然后计算 + 打印平均值。C) 读取一系列数字,确定并打印最大的数字。读取的第一个数字表示应该处理多少个数字。

不用多说,这是我的程序。全部一起。

程序 A

方案 B

程序 C

0 投票
3 回答
657 浏览

c++ - 我昨天问了这个,在给出输入后我仍然无法实施

我不确定如何解决这个问题或我做错了什么,但每当我输入一个值时,它只会关闭运行提示。

所以,似乎我在编码的某个地方确实有问题。每当我运行程序并输入变量时,它总是返回相同的答案..“位置 76 的内容为 0。” 在那张纸条上,有人告诉我“我不知道,但我怀疑程序 A 在指令 10 和 11 上错误地分支了一个固定地址。” - mctylr 但我不知道如何解决这个问题..

我试图弄清楚如何从 R Samuel Klatchko 中融入这个想法。我仍然不确定我错过了什么,但我无法让它发挥作用。

我是编程新手,我不是最好的,所以我会为了简单起见。这也是一个 SML 程序。无论如何,这是一个家庭作业,我想要一个好成绩。所以我一直在寻找意见,并确保这个程序能做我希望他们正在寻找的东西。无论如何,这里有说明: 编写 SML(Simpletron 机器语言)程序来完成以下每一项任务:

A) 使用哨兵控制的循环读取正数 s 并计算和打印它们的总和。输入负数时终止输入。B)使用计数器控制循环读取七个数字,一些正数和一些负数,然后计算 + 打印平均值。C) 读取一系列数字,确定并打印最大的数字。读取的第一个数字表示应该处理多少个数字。

不用多说,这是我的程序。全部一起。

0 投票
3 回答
1304 浏览

assembly - PowerPC 上的条件移动

PowerPC(32 或 64)指令集是否有条件移动等效?显然可以使用条件分支来模拟它,但我想要一些优于它的东西。

0 投票
3 回答
2732 浏览

assembly - PowerPC 转向可变 SPR

我正在为 C 程序编写一个汇编宏,并且对此很陌生,我遇到了一些问题。我正在尝试编写一个宏来将数据从通用寄存器移动到专用寄存器。

我的问题是我发现将数据从 GPR 移动到 SPR 的语法采用恒定的 SPR 值,而我想使用存储在另一个寄存器中的变量。

我追求的是这样的东西:

有没有这样的宏可用的原因,我将如何自己制作?

提前谢谢了。

----编辑: ---- 现在看来,我的 C 代码中有一个巨大的开关盒,可以跳转到正确的 mtspr 部分。我有二十几个部分用于读写特定的 SPR:s,每个部分看起来完全相同,但有一个常数值不同。

0 投票
3 回答
45990 浏览

assembly - 第一个计算机程序是如何创建的?

可能重复:
第一个编译器是如何编写的?

这个问题一直困扰着我。编译一个程序,需要一个编译器,它也是程序的一种类型,那么编译器是用什么编译的呢?有人告诉我,第一个编译器是用汇编或机器代码编写的。但考虑到这一点,这仍然不是完整的故事。毕竟,在没有操作系统和驱动程序的情况下,机器代码是如何从硬盘驱动器到 RAM 再到 CPU 的呢?驱动程序必须以某种方式进行编程。

我知道非常早期的计算机有开关,并允许您拨动开关以指示位。我想知道如何从切换到让 CPU 读取机器代码而不需要计算机程序来告诉它这样做的方式实现了飞跃。

0 投票
1 回答
401 浏览

assembly - 立即寻址的机器代码模板

立即寻址的机器代码语言是什么..

如果寄存器寻址的机器代码模板是

操作码(6 位) D(1 位) W(1 位) MOD(2 位) REG(3 位) R/M(3 位)

共 16 位。

m 使用intel 80386 intel 微处理器!

0 投票
4 回答
1447 浏览

c - C语言中的函数调用需要多少条机器指令?

我想知道使用 gcc 为 x86 平台编译的 C 程序中的函数调用从头到尾需要多少条指令。