问题标签 [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 投票
6 回答
2431 浏览

assembly - 如果我用汇编或机器语言编写,该程序可以在任何具有兼容处理器的计算机上运行吗?

基本上,我想知道我是否可以使用机器或汇编语言编写一个可以在任何具有 x86 处理器的计算机上运行的程序,尽管操作系统存在差异。例如,您运行一个程序,无论它在哪台计算机上,它都会显示“Hello, World!” 我知道想知道这两种语言有点疯狂,但我认为这是一件不可思议的事情,为什么不呢?

0 投票
1 回答
3035 浏览

assembly - 帮助 68k 汇编 - 跳转表?

我正在 IDA 中对大型 Amiga 程序进行逆向工程,并且取得了很大进展。但是,有些东西我不太明白。也就是说,我发现了几个使用我认为是“跳转表”的子程序——但我不太清楚它们是如何工作的。有人有建议吗?

0 投票
3 回答
189 浏览

assembly - 关于使用机器语言的问题

我有几个关于机器语言的问题:

  1. 如何编写机器语言代码?这真的完成了吗?

  2. 架构的哪一部分处理机器语言?(英特尔或 AMD 芯片?还有什么?)

  3. 每台机器都有不同的机器语言吗?

提前感谢您的回答:)

0 投票
6 回答
1880 浏览

compiler-construction - 编译的程序实际上是真正的二进制文件吗?

例如,当我编译 C 应用程序时,输出的文件是读取为二进制文件还是操作系统会解释编译?“机器语言”是纯二进制的吗?

编辑:是的,计算机上的一切都是纯二进制的。我问处理器是直接解释编译器输出的文件还是操作系统先处理它?

0 投票
4 回答
8065 浏览

coding-style - 我需要什么才能开始用机器语言写作?

我想开始学习机器语言,你知道0010011类型的语言。如果有什么程序,我可以用机器语言编写吗?拜托,我知道你们会告诉我“那里有更好的语言,或者你为什么要学习这种语言”之类的评论。我知道这一点,所以请不要发表任何这些评论。谢谢。

0 投票
1 回答
349 浏览

c - 用 C 模拟基本机器语言。

所以对于我的任务,我必须用 C 模拟基本的机器语言。这台机器有 16 个寄存器(reg[])、一个程序计数器(pc)和内存(mem[]),所有这些都是无符号字符。指令是从文件中读取的,格式如下:

B404 (1RXY = 用内存地址 XY 的值加载寄存器 R)。所有数字都是十六进制的。C000 是停止命令。

现在我的问题是,当我打印出指令时(当存储在 a、b、c、d 和 cd 中时)b 和 d 有前导零。如何摆脱它们,以便如上打印指令?(第 48 行)。

此外,似乎我的一些 if 语句没有被调用,就好像我在其中放了一个 printf() 并且它们位于从未打印过的文件上。(第 48 至 78 行)。

谢谢!

0 投票
4 回答
6585 浏览

assembly - 每条机器语言指令执行需要多长时间?

设置、读取、移动和比较等操作是否都需要相同的时间来执行?

如果没有:有什么办法可以查出多长时间。

我的意思是否有一些名称,某些特定类型的 cpu 执行不同汇编语言指令(移动、读取等)的速度?

0 投票
1 回答
2164 浏览

assembly - 需要帮助制作一个简单的汇编语言程序

发布前的编辑:所以我几乎是在我把整个该死的问题都打出来并整齐排列之后才自己想出来的。为了不白费,我还是发布了这个,询问这是否真的正确,并征求任何建议/意见。我仍然不确定一件事。

好吧,所以我完全是计算机科学的菜鸟。现在我正在学习汇编语言和机器语言编程。这是一个家庭作业问题,所以请帮助我理解,不要在我脸上扔答案。我正在尝试编写一个程序,使用条件分支(循环)获取从 1 到 20(答案是 210)的数字之和。

使用的助记符有:

有 10 个寄存器可以放入东西。

所以基本上我必须做两件事: 1) 想办法把从 1 到 20 (1+2+3+4+5+6+7+8+9+...+20) 的所有数字加起来包括制作一个循环,以及 2)创建一个计数器,以便它知道在达到 20 时停止。这是正确的吗??

这一切都在说:用 COUNT 的内容加载 Register1(以 0 开头)。添加 ONE 的 Register1 内容(即 1)。将 Register1 中的这个新数字存储到 COUNT 中。将此新号码添加到 Register2。将 COUNT 的内容与 TWENTY 的内容(即 20)进行比较。如果 COUNT 内的数字小于或等于 20(3 是条件代码),则分支 (/repeat)。一旦计数器达到 20,条件将被打破,指令将转到下一行:将 Register2 中的数字(现在应该是 210)存储到变量 SUM 中。然后调用 CHannel 在 I/O 设备上显示 SUM 的内容。然后停止。

现在...我不知道如何指定分支/返回到开头,因此它重复该过程直到计数器达到 20。我也不确定是否应该将 COUNT 指定为 0。

感谢您的任何/所有帮助。

0 投票
5 回答
601 浏览

c - 为什么 a.out 不是机器语言?

我编译以下程序gcc并接收输出可执行文件a.out。:

当我执行cat a.out时,为什么文件是“乱码”(这叫什么?)而不是 0s 和 1s 的机器语言:

0 投票
2 回答
6092 浏览

assembly - 对 8085 指令代码中 MVI 指令的二进制代码感到困惑。请参见

考虑指令 MVI A,32H 将 32H 加载到寄存器 A(Intel 8085 微处理器)中。

我的书说它是一个双字节指令,其中第一个字节是操作码,第二个是操作数。第一个字节是 0011 1110(十六进制的 3E),第二个字节是 0011 0010(十六进制的 32)。

我对操作码部分如何准确地转换为机器码感到困惑。我的意思是......“0011 1110”的哪一部分代表“MVI”,它的哪一部分告诉要加载寄存器A?“3E”如何告诉微处理器这两个信息?那就是它必须加载数据以及目标寄存器。还是这整个操作码是预定义的,您无法将操作码中的“MVI”和“目标寄存器”分开?

我希望我的问题是有道理的,哈哈。