首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SIC/XE机的加储价值

SIC/XE机的加储价值
EN

Stack Overflow用户
提问于 2019-11-11 14:50:17
回答 1查看 1.8K关注 0票数 0
代码语言:javascript
复制
; 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=sharing PDF也是这样做的,但是我失去了执行的流程.为什么有三千三百?

以下是PDF中的代码:

代码语言:javascript
复制
; 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-11 15:30:49

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58803657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档