编写汇编代码系统编程

时间:2014-10-31 18:41:47

标签: assembly system

我正在编写汇编程序代码。对于PASS#1,我遵循所有指示,但坚持以下几点 操作码=' BYTE'

时的规则
if OPCODE=‘BYTE’ then
            begin
                  find length of constant in bytes
                  add length to LOCCTR
            end {if BYTE}

它说如果OPCODE =' BYTE'然后找到常量的长度并添加到位置计数器(LOCCTR)。我没有采取这一步骤。有人可以向我澄清一下。

我也有这个示例输入程序及其输出。

输入程序

PROG START 0
FIRST STL RETADDR
SECOND LDA =CꞌABCDꞌ
THIRD LDA =XꞌFFꞌ
J @RETADR
DEF BYTE CꞌDEFꞌ
SYM1 EQU 512

上述程序的输出

LINE# LOCCTR  LABEL     OPERATION    OPERAND
01    00000   PROG      START        0
02    00000   FIRST     STL          RETADDR
03    00003   SECOND    LDA          =C’ABCD’
04    00006   THIRD     LDA          =X’FF’
05    00009             J            @RETADR
06    0000C   DEF       BYTE         C’DEF’
07    00200   SYM1      EQU           512
08    0000F   SYM2      EQU           *
09    00003   SYM3      EQU          SECOND-FIRST
10    0000F   RETADDR   RESW         1
11    00012             END          FIRST
12    00012   *         =C’ABCD’
13    00016   *         =X’FF’

程序长度=(12 - 0)+ 5 = 17

当我们到达第6行时,您可以看到,其中包含LOCCTR电影到00200的下一行中的字节。我不确定它是怎么发生的。请解释一下。感谢

1 个答案:

答案 0 :(得分:1)

EQU指令是一个编译时指令,不会将任何内容放入内存中。它只是将左侧的符号设置为右侧的值。如果该值为星号(*),则该值为LOCCTR的当前值。这些指令不是将当前位置放在LOCCTR列中,而是显示分配给它们的值(以十六进制表示)。因此00200只是512的十六进制。同样,0000F的{​​{1}}是分配给SYM2的当前位置。 SYM2旁边的00003SYM3的值,它们是第一条和第二条指令的地址。

SECOND-FIRST指令是一个编译时指令,它将数据从当前位置开始加载到内存中。该规则只是将数据的长度添加到BYTE,以确定程序的下一部分将去往何处。

请注意,第6行LOCCTR指令从位置BYTE开始,包含字符串0000C。这是3个字符。 'DEF'0000C + 3,这是0000F指令之后的下一个LOCCTR值(不会将任何内容放入内存中)。