【问题标题】:"PRINT" command in Assembly装配中的“打印”命令
【发布时间】:2012-06-03 22:42:47
【问题描述】:

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

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

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

汇编输入: 打印“你好世界”

CPU 输出

打印 h

打印电子

打印出来

打印出来

打印出来

打印(空格)

[...]

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

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

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

提前感谢所有答案,

出售

【问题讨论】:

    标签: assembly cpu


    【解决方案1】:

    我不确定我是否理解正确。您的汇编程序有一个打印字符串宏,它扩展为几个“打印即时”指令(大概是 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:
    

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2012-02-25
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多