好的 - 我确定我在做一些愚蠢的事情,但我看不到它。
我有一个小样本汇编程序,我将提供给想要学习汇编程序的同事,但它有一个奇怪的错误,我需要先解决。.
当输出文件 (DDNAME SYSUT2) 是一个临时的 80 字节文件时,它工作正常。将 SYSUT2 更改为 SYSOUT=*,它会从“关闭文件”WTO 循环。
所以这是程序:
//C.SYSLIB DD DISP=SHR,DSN=SYS1.MACLIB
// DD DISP=SHR,DSN=SYS1.MODGEN
// DD DISP=SHR,DSN=SYS1.ASM.SASMMAC2
//* DD DISP=SHR,DSN=JOCS065.STEVE.SOURCE
- - - - - - - - - - - - - - - - 4 Line(s) not Displayed
TITLE 'TEST PROGRAM'
SYMBOLIC CSECT
ASMDREG .Register equates
SAVE (14,12),,'SYMBOLIC PARM SUB &SYSDATE &SYSTIME'
LR R12,R15 .R12 -> entry point
USING SYMBOLIC,R12 .Establish addressability
* Get the parm passed
L R1,0(R1) .R1 -> …
Run Code Online (Sandbox Code Playgroud) 我们知道每条指令都转换为基址+偏移量,并且偏移量最大大小设置为4K(4096)。如果我的程序大小超过 4k 怎么办?
Line 1 : Base + 1 ,
Line 2 : Base + 5 ,
.
.
.
.,
Line x : base + 4090
Run Code Online (Sandbox Code Playgroud)
当指令超出页面大小 4096 时,如何对第 x 行开始进行寻址(如基址 + 偏移量)?
从 X 行开始的指令是如何组装的?我们是否需要将基地址更改为保存指令的下一页的开头?
我一直在网上寻找有关显式寻址的信息,但什么也没有,而且解释很模糊。我希望有人可以详细解释我,如果可能的话,还可以举个例子。我想知道,应该使用哪些寄存器作为索引,基数,位移值应该是什么
示例 8(,4) 或 5(0,5) 或 6(7)