在SIC/XE机器中添加和存储价值


; 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也做了同样的事情,但我放松了执行流程。。。为什么有三个、三百个和所有的?

这是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

我不明白这些是如何工作的: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个字节之后停止的原因。

最新更新