【问题标题】:Adding and storing value in SIC/XE machine在 SIC/XE 机器中添加和存储价值
【发布时间】:2019-11-11 14:50:17
【问题描述】:
; Assembly Program

;¯¯¯|¯¯¯|¯¯¯|¯¯¯|¯¯¯|¯¯¯|¯¯¯|¯¯¯|¯¯¯|
;                                   |
;       Programmer: joe247          |
;                                   |
;___|___|___|___|___|___|___|___|___|

; Write a SIC/XE Program program in which ALHPA, BETA and GAMMA are array capable of storing 100 words.
; Add the words in ALPHA and BETA and store it in GAMMA.

; Assumption 1: that the data is already stored in the corresponding locations ALPHA & BETA
; Assumption 2: the memory is a linear array starting from 0
;
; Memory Locations:
;    ______ ______ ______     ______ ______ ______     ______ ______ ______
;   | 0000 | 0001 | 0002 |...| 0100 | 0101 | 0102 |...| 0200 | 0201 | 0202 |...
;    ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯     ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯     ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯
;   X                         S                        T

;LABEL       OPCODE      OPERAND
;-----       ------      -------
             LDX         #0              ; X = 0
             LDS         #100            ; S = 100
             LDT         #200            ; T = 100
 LOOP        LDA         ALPHA, X        ; A = ALPHA[X]
             ADD         BETA, S         ; A += BETA[T]
             STA         GAMMA, T        ; GAMMA[T] = A
             ADD         S, #1           ; A = S + 1
             STA         S               ; S = A
             ADD         T, #1           ; A = T + 1
             STA         T               ; T = A
             TIX         #99             ; check if X <= 99: set flag & X += 1
             JLT         LOOP            ; jump to LOOP if flag is set
;-----------------------------------------------------------------------------
 ALPHA       RESW        100             ; reserve 100 words for ALPHA
 BETA        RESW        100             ; reserve 100 words for BETA
 GAMMA       RESW        100             ; reserve 100 words for GAMMA

Q1:关于 SIC/XE 机器的第二个假设是否正确?

Q2:上述程序逻辑正确吗?

Q3:第 16 页中给出的代码:https://drive.google.com/file/d/1-Mt59wikepLm8_Bc-eDK8LGKjqQn7lSQ/view?usp=sharingPDF 也是如此,但我失去了执行流程……为什么会有 3、300 和所有? p>

这是 PDF 中的代码:

; SIC/XE
; ======

            LDS         #3              ; INITIALIZE REGISTER S TO 3
            LDT         #300            ; INITIALIZE REGISTER T TO 300
            LDX         #0              ; INITIALIZE INDEX RESISTER TO 0
ADDLP       LDA         ALPHA, X        ; LOAD WORD FROM ALPHA INTO REGISTER A
            ADD         BETA, X         ; ADD WORD FROM BETA
            STA         GAMMA, X        ; STORE THE RESULT IN A WORD IN GAMMA
            ADDR        S, X            ; ADD 3 TO INDEX VALUE
            COMPR       X, T            ; COMPARE NEW INDEX VALUE TO 300
            JLT         ADDLP           ; LOOP IF INDEX VALUE IS LESS THAN 300
            .
            .
            .                           ; ARRAY VARIABLES --100  WORDS EACH
ALPHA       RESW        100
BETA        RESW        100
GAMMA       RESW        100

我不明白这些是如何工作的:LDA ALPHA, XCOMPR X, TTIX #99

【问题讨论】:

  • Q2:上面的程序在逻辑上是否正确?你有没有测试过它的一些输入,看看它在某些情况下是否至少碰巧给出了正确的答案?如果它有效,这是codereview.stackexchange.com 的问题,如果它不包含测试用例以制作minimal reproducible example

标签: assembly sic


【解决方案1】:

我不明白这些是如何工作的:LDA ALPHA、X、COMPR X、T 和 TIX #99?

LDA ALPHA, X — 该指令计算地址 ALPHA + X 并将该地址处的字(3 个字节)加载到 A 寄存器中。

COMPR X, T — 该指令将 X 寄存器的值与 T 寄存器的值进行比较,将比较结果设置为 SW(状态字寄存器)中的条件代码。

TIX #99 — 该指令将 X 寄存器的值与立即数 99 进行比较,并将比较结果设置为 SW 寄存器中的条件代码。


内存是一个从0开始的线性数组

关于 SIC/XE 机器的第二个假设是否正确?

内存确实是一个线性数组,虽然它从哪里开始有些无关紧要,因为标签抽象了实际位置。


上述程序逻辑正确吗?

不,您的程序将字节算术地址计算与字加载混合在一起,它应该使用字算术地址计算和字加载。

由于单词的长度为 3 个字节,因此您必须将 3 添加到索引中才能找到下一个单词。这也是 100 个字(3 字节元素)的数组在 300 个字节后停止的原因。

【讨论】:

  • A1TIX #99会增加X吗?如果是,多少(3 或 1)?在 A3 中是否意味着我应该更改为... ADD S, #3STA SADD T, #3STA T 等等?
  • (1) 是的,TIX 增加 X,但它只增加 1,因此它适用于例如带有 i++ 的 for 循环。 (2) 虽然我不确定那个代码序列,但在高层次上:是的,你需要增加 3 才能到达下一个单词。
  • 还有一件事……在 (1) 中,如果 ALPHA+X 是计算地址,那么可以说 ALPHA、BETA 和 GAMMA 在初始化为 @ 时分配了不同的地址位置987654329@,不是吗?
  • 是的,完全正确。索引 X 前进,而单独的指令使用相同的索引访问不同的数组元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多