问题标签 [sic]
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.
c++ - 标记 SIC 汇编器源
我已经为我的系统编程类编写了一个 SIC 汇编器,但我对标记化部分感到困惑。
例如,以这行源代码为例:
格式(自由格式)为:{LABEL} OPCODE {OPERAND{,X}} {COMMENT}
卷曲表示该字段是可选的。
此外,每个字段必须由至少一个空格或制表符分隔。
上面的代码更容易组织,但下面的代码片段给我带来了困难。
我的代码将读取注释的第一个单词,就好像它是一个操作数一样。
这是我的代码:
我的教授要求用两个版本的源代码测试汇编器——一个有错误,一个没有。
RSUB OPCODE 不依赖于 OPERAND,因此我了解 RSUB OPCODE 之后的所有内容都可以视为注释,但是如果错误的源代码在 OPERAND 字段中包含值,或者缺少依赖于 OPERAND 的 OPCODE OPERAND 值,我该如何补偿?我需要将这些标记为错误并打印出错误的操作数值(或缺少)。
我的问题是:如何防止代码的注释部分被视为操作数?
assembly - 如何识别 n、i、x 和 e 位设置(SIC/XE)?
我的系统软件类有一个项目,我们必须生成一个子程序来将一行源代码分解为 4 个组件:标签、操作码、操作数 1 和操作数 2,并识别 n、i、x 和 e 位设置。我在试图找出 nixbpe 位时遇到问题。预先感谢您的帮助
以下是一些示例: 以下 4 个源代码行示例的组件和位如下:
示例 +LDA STUFF,X .MAIN
标签:“示例”操作码:“LDA”操作数 1:“STUFF”操作数 2:“X”
nixbpe: 111??1
RSUB 无操作
标签:“”操作码:“RSUB”操作数1:“NO”操作数2:“OP”
nixbpe: 110??0
CMT BYTE @C'保留块',XYZ 搁置
标签:“CMT” 操作码:“BYTE” 操作数 1:“C'RESERVED BLOCK'” 操作数 2:“XYZ”第二个操作数>
nixbpe: 101??0
RMO A,X
标签:“”操作码:“RMO”操作数1:“A”操作数2:“X”
nixbpe: 11l??0
nixbpe 位标记为“?” 保持从调用程序接收到的状态;操作码的前缀决定了 e-bit;操作数 1 的前缀决定了 n 和 i 位;操作数 2 的第一个字符确定 x 位。b 和 p 位在别处设置。在这个例程中不需要进行语义检查(所以特别是,上面 RSUB 语句的两种解释都可以)。组件的默认值是空字符串。“ni??pe”位的默认值为“00??00”。
assembly - 立即数和程序计数器相对寻址
我遇到了一个 sic/xe 机器的代码……下面是对我来说是问题根源的行……
现在给出'a'将有一个目标代码,其中将使用pc相对和立即模式....但b将只有立即模式....现在长度为0033,那么为什么使用pc relative模式....如果按照惯例必须使用 pc 相对模式,那么为什么不在“b”中同时使用 pc 相对模式和直接模式呢?
assembly - sicxe 汇编语言编程
以下是 sic/xe 机器的汇编语言代码....
这是一个引导加载程序...该程序的目的是从设备 F1 读取并将输入存储在从 80 开始的地址...现在我的问题是,当我们为什么需要执行 shift s,4.. .当我们接受一次输入时,我们从它的ascii值中找到它的原始值,然后将它发送到'loop'来存储它......从程序看来,只有前半字节的字符被发送到循环,然后其他...如果这是事实,那么首先会有字符的前半字节,因此前半部分的 ascii 操作不会给我们输入的实际值...当程序返回到 'getc ' 获取另一半字节不会读取列表中的其他字符...以下是同一本书中的一行以寻求帮助...
assembly - 计算对象代码 - SIC/XE
我将如何计算的目标代码
如何获得 010064(目标代码)的结果?我已经知道如何做第一部分(010),但我不确定我应该如何获得 064 的第二部分。
任何帮助都会很棒!
assembly - SICXE 程序集中的反转整数列表
我的任务要求我列出一个数字列表,然后使用 SICXE 将它们以相反的顺序排列。我的问题出现在我实际上不知道如何检查反转是否确实发生的地方,所以我实际上无法判断我的程序是否按我想要的方式工作。我可以阅读转储并知道我的原始列表在哪里,但我不明白我应该在哪里看到反向列表以查看我所做的是否真的有效。我实际上无法在这里找到受人尊敬的名单。我假设它应该从 15F 开始,因为这是 BETA 以 10 个保留字开头的地方。但是由于那里没有任何显示,我认为这意味着我做错了什么,但我实际上不确定我是否正确。如果我是我应该如何解决我的问题?我将包括 .lst 文件以及 sic.log 文件。
.lst 文件
sic.log 文件
assembly - 在 SIC 汇编器输出中生成目标代码的困惑
所以现在我正试图了解目标代码是如何生成的,但是这两行真的让我感到困惑,有人想向我解释一下吗?
assembly - 算术的汇编语言语法问题
我有一个关于汇编语言的相当简单的问题。我们使用的是 SIC/XE 架构,它基本上是可信的,仅用于教育目的,但确实遵循其他架构的通用约定。现在我的问题和答案的第一个想法。
假设符号 ALPHA 和 BETA 是源程序中的标签。以下两个语句序列有什么区别?
为清楚起见,LDA 将数据加载到用于算术运算的寄存器 A 中。像这里看到的 SUB 或 ADD 之类的操作默认在寄存器 A 上工作,而无需声明它。
现在,乍一看,我假设 A 和 B 是等价的。我的逻辑很简单。将 ALPHA 和 BETA 的差值加载到 A 中,或者将 ALPHA 加载到 A 中,然后从寄存器 A 中的 ALPHA 中减去,BETA。在我看来,哪个完成了同样的事情?我错过了一些琐碎的细节还是真的像看起来那么简单?
assembly - SIC/XE 装配的斐波那契
有人可以帮助解释以下代码。我正在尝试向以下 SIC/XE 程序添加注释,该程序解释了该程序如何计算从 3 开始的前 20 个数字的斐波那契数列。
assembly - SIC 汇编目标代码中的 BYTE 操作混淆
在尝试为 SIC 制作汇编程序时,我想到了这些问题。
LABEL BYTE X'AB'
这里生成的目标代码是AB
. 因此,作为示例,目标代码可能看起来像这样。
001045 4C1046 AB 001045
这里我使用空格来区分代码,但目标代码看起来像这样。
0010454C1046AB001045
那么在执行目标代码时,加载器如何发现AB
确实是一个常量而不是任何助记目标代码的一部分?
我对 WORD 也有同样的问题,因为 WORD 的长度可能是 3 个字节,但是加载程序如何区分常量和助记符代码。
任何澄清将不胜感激。