问题标签 [68000]

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 回答
167 浏览

assembly - 为什么在 0(SP) 传递的值只能在 4(SP) 访问?

为什么传递的值0(SP)只能在 处访问4(SP)?例如,我需要将一个数字传递给printnby0(SP)而不是4(SP)(因为它在例程中使用),否则它将不起作用。我错过了什么?

0 投票
1 回答
209 浏览

assembly - 访问字节数组的奇数索引导致地址错误

我的代码中有一个字节数组,我必须访问这个数组的随机元素。加载数组的地址,A4计算索引并存储在D2. 我需要从这个数组的索引中读取一个元素(一个字节)D2并将其添加到 D7。让我通过展示它是如何用 C 语言实现的来更清楚地说明这一点:

我如何在 m68k 程序集中实现它(代码的一部分):

但有时 D2 是奇数并且A4 + D2是奇数地址,因此模拟器会产生地址错误,正确的方法是什么?

0 投票
1 回答
4763 浏览

algorithm - 将二进制数转换为 4 个 BCD 数字 - 除法是如何工作的?

我正在研究摩托罗拉 68000 CPU 的组装。我使用的书是:
68000 Assembly Language Programming, Second Edition, Leventhal, Hawkins, Kane, Cramer
EASy68k模拟器。

我有几个关于将二进制数转换为 BCD(二进制编码十进制)的问题。
书中原题说:“将内存位置 6000 的变量 NUMBER 的内容转换为位置 6002 的变量 STRING 中的四个 BCD 数字(6002 中的最高有效位)。NUMBER 中的 16 位数字是无符号的且小于超过一万。”

例子:

因为 1C52(十六进制)= 7250(十进制)(MC68k 是大端 CPU)

由于 MC68k 是一款出色的 CISC CPU,具有丰富的指令库,因此编写解决方案并不难:

DIVU = DIVision 无符号

我对这个解决方案很满意,但我想知道/了解 MC68k 如何更详细地执行这种除法(计算结果和余数),让我解释一下。例如,如果我们想做相反的事情,即将 BCD 数转换为二进制数,我们可以使用以下算法:让我们取序列:'7'、'2'、'5'、'0' BCD 数字,其中“7”是最高有效数字,“0”是最低有效数字。如果我们想对这些数字进行十进制数,我们可以这样做(伪代码):

但当然,我们需要调整以 2 为底的数字的乘法。MC68k 或多或少提供了 2 种方法:

  1. 像“MULU #10, D1”这样的乘法助记符,它只会产生一个乘以 10 的数字
  2. 或者由简单指令组成的集合:

    /li>

这会产生相同的结果(原始数字 x -> 10x)。ADD 指令的工作方式如下:

LSL指令是逻辑左移指令。而且我们知道,将一个数逻辑左移 1 位与将其乘以 2 的结果相同,将其左移 2 位与将数乘以 4 的结果相同。

所以,对于 BCD 到二进制的转换,我可以在我的算法中使用像 MULU 这样的乘法指令,而对于二进制到 BCD,我可以在我的算法中使用像 DIVU 这样的除法指令。

而且,对于 BCD 到二进制,我可以使用 ADD 和逻辑移位指令来模拟乘法,但是二进制到 BCD 的类似方法是什么?如何使用比 DIV 更简单的指令(如减法、加法、逻辑移位……)来模拟除法并计算商/余数?

我还在这里找到了一个有趣的二进制到 BCD 转换算法:
http ://www.eng.utah.edu/~nmcdonal/Tutorials/BCDTutorial/BCDConversion.html

但我不知道为什么会这样。为什么我们需要将 3(= 11 二进制)添加到包含大于或等于 5 的数字的每一列(= 4 位)?

我考虑过编写一个使用该算法的解决方案,但是:
- 在 3 个班次之后,我必须在每次班次后检查个数列是否包含大于 4 的数字 - 在 7 个班次之后,我必须检查个数和十个数列在每班后包含大于 4 的数字
- 在 11 班之后,我必须检查在每班之后,十和百列是否包含大于 4 的数字
- 在 15 班之后,我必须检查是否是, 十、百、千列在每班后包含大于 4 的数字

看起来CPU还有很多事情要做......

0 投票
1 回答
1643 浏览

operating-system - 摩托罗拉 68K TRAP 指令作为操作系统的桥梁

我不是专家,只是一个业余爱好者。过去我在玩 68000 架构,我一直在想它的 TRAP 指令。该指令始终被描述为操作系统的“桥梁”(在某些系统中,但在这方面并未使用它,但这是另一回事)。这是如何实现的?TRAP 本身是一条特权指令,那么这个 OS 调用机制在用户模式下是如何工作的呢?我的猜测是触发了特权违规异常,并且异常处理程序检查了导致异常的特定指令。如果它是一条 TRAP 指令,那么该指令将被简单地执行(也许 TRAP 的操作数,即 TRAP 向量号也被检查),当然现在是在超级用户模式下。我对吗?

0 投票
1 回答
121 浏览

assembly - 我如何从内存中读取 10 个字节以添加每个连续的 2 个字节

我已经存储了字符串'0123456789',所以现在每个字符的ASCII值作为一个字节存储在内存中,如何添加每个连续的2个字节,如下所示:

0+1->1, 1+2->2........等

我的第一次尝试是这样的

0 投票
1 回答
1604 浏览

assembly - 如何存储来自 Assembly 68K CCR 的进位位?

我确实在手册中从 CCR 指令中找到了 MOVE ... http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf

但我不断收到“无效寻址模式”错误。我尝试了不同形式的语法,无论如何我只想存储进位位,而不是整个 CCR。这些都是我尝试过的所有语法,但没有运气。它非常明确地说大小必须是单词。

纳达。我究竟做错了什么?有没有更好的方法来专门存储执行位(C)?

0 投票
4 回答
1100 浏览

assembly - 理解68000汇编的“S[cc]”指令

我试图理解 68000 程序集中的“S[cc]”指令集。

指令的格式是这样的:

[cc]是条件代码(例如,SEQ表示“如果等于则设置”)。如果 指定的条件[cc]为真,则寄存器设置为所有1s。否则,寄存器设置为所有0s。

有一件事我不明白:S[cc]操作在哪里检查条件是否为真?它检查标志吗?

如果是这样,那么如果我想注册D0来保存表达式的结果D0 = D1,这就是我需要做的:

这个对吗?还是我没有正确理解这个操作?

0 投票
0 回答
116 浏览

math - Coldfire/m68k 跳转编码问题

所以我正在使用coldfire(mcf5225x系列)并且我遇到了跳转编码的一些问题,在这种情况下它具有与68k相同的二进制表示。

如您所见,jmp 指令的模式和寄存器为 111010,表示与 PC 的 16 位字扩展偏移量。16 位扩展是当前地址 8hex 的 8hex 偏移量。它应该导致 12 但是,我的数学表明我得到了 10。这里有什么问题,为什么似乎生成了错误的跳转地址?它在我正在设计的处理器模型中引起了一些问题。任何帮助将不胜感激!

0 投票
2 回答
189 浏览

68000 - 68000 汇编语言 - MOVE 指令

MOVE 1234,D5和 和有什么不一样MOVE #1234,D5?我试图在网上查看,但看不到第一条指令在做什么。

0 投票
1 回答
1096 浏览

68000 - 68000 - 68000 上的 TRAP 14 和 EASy68K 上的 TRAP 15

这些是一样的吗?EASy68K 上的 TRAP 15 是否与 68000 板上的 TRAP 14 相同。我试过寻找这个答案,并且认为它是正确的,但我想确定一下。

有人可以确认一下吗?