0

首先我想指出我不是母语人士,所以请不要介意我的错误:) 所以,事实上,我对一个简单的汇编命令确实有很大的问题,问题是,这个命令是与用户交互的“强大”方式。它来了:

我在 Logisim 中构建了一个 CPU(没什么特别的,我正在努力适应该程序,并且我正在努力提高我的“技能”)。有了这个,我正在用 Java 编写一个汇编翻译器(汇编输入、二进制和十六进制输出适合 CPU 的指令集)。但是我遇到了一个大问题...^^

我实际上计划添加一个 --PRINT "text"-- 命令,汇编翻译器将为每个字母生成一个 7 位 ASCII 数字并产生如下输出:

汇编输入:PRINT "hello world"

CPU 的输出

打印

打印

打印 l

打印 l

打印

打印(空格)

[...]

这是因为我的 CPU 一次只能打印一个字符 :( 好吧,在尝试执行 BRANCH 命令时会出现此问题。

例如,我的 Translator Program 中的行显示 Line: 2,在这一行中您将打印 5 个字符长的文本。因此,下一条命令将在第 3 行,但是 CPU 只打印了 5 个字符,这意味着 Programcounter 现在指向第 8 行,而 Translator 中的第 3 行实际上位于 Programcounter 的第 8 行。

我怎么能解决这个问题?添加一个特殊寄存器,在 CPU 实际执行的每个“PRINT”命令后递增,并将其添加到您要分支的行?还是有人有更好的方法将字符打印到屏幕上?

提前感谢所有答案,

销售

4

1 回答 1

0

我不确定我是否理解正确。您的汇编程序有一个打印字符串宏,它扩展为几个“打印即时”指令(大概是 2 字节大小)。而且您有一条指令(有条件地)跳过下一条指令。假设这条指令称为 ez(零时执行)。所以这样的代码:

  ez print "Hello"

将组装成类似的东西:

1234h ez
1235h print 'H'
1237h print 'e'
1239h print 'l'
123bh print 'l'
123dh print 'o'
123fh ...

并且您希望 ez 指令自动跳过五个指令,而不仅仅是一个。正确的?实现它的一种方法可能是在打印指令中有一个位来指示未链接,因此 ez 指令可以继续跳过指令,直到缺少该位。但是恕我直言,这对于 CPU 设计来说似乎有点太复杂了。我认为期望程序员知道打印字符串会生成几条指令并要求他们编写是合理的:

  enz bra skip_print
  print "Hello"
skip_print:
于 2012-08-03T17:20:23.180 回答