0

我的问题

构建下面的代码我得到:“319920C30020C30A20FBED563E00C600CA0520F33E55D3073E00FBC9”

我的问题是我假设这将用零填充,这样每个代码块都位于程序存储器中请求的地址 0000H、0038H 和 2000H。

立即我可以看到手动进行填充的解决方法,但是 Z80 处理器如何加载上述程序,以位于正确的地址?

代码

STACK .EQU 2099H
.ORG 0000H
    ld  SP, STACK
    jp 2000H

.ORG 0038H
    jp  service_routine

.ORG 2000H
    EI
    IM 1 
    LD  A, 00H

LOOP:
    ADD A, 00H
    jp  z, LOOP

service_routine:
    DI
    ld  A, 55H
    out (07H),A
    ld  A, 00H
    EI
    ret
4

2 回答 2

1

ORG指令仅告诉汇编器您认为 PC 在代码中的那个点是什么。然后,汇编器可以使用它来计算相对跳转的正确代码。它不会指示汇编器或加载器实际加载该地址处的代码。

于 2012-08-15T23:30:10.543 回答
0

将磁盘映像转换为正在运行的程序的过程可能非常复杂。在过去,1k 个零块被视为对磁盘空间的严重浪费,但今天在不同的规模上也是如此——你可能会嘲笑 1K 个零,但没有人会怀疑文件中的 1G 个零会是浪费。

根据机器架构,该过程可能涉及的不仅仅是重新定位代码和数据块。例如,代码中的跳转地址可能必须被修补以引用外部模块的正确地址。

于 2012-08-15T23:35:47.203 回答