构建下面的代码我得到: “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
答案 0 :(得分:1)
ORG
指令只是告诉汇编器你认为PC在代码中的那个点。然后,汇编器可以使用它来计算相对跳转的正确代码。它不会指示汇编程序或加载程序实际加载该地址的代码。
答案 1 :(得分:0)
将磁盘映像转换为正在运行的程序的过程可能非常复杂。在过去,一块1k的零被认为是对磁盘空间的严重浪费,但今天在不同的规模上也是如此 - 你可能会嘲笑1K零但是没人会怀疑文件中的1G零是一个浪费。
根据机器架构,该过程可能涉及的不仅仅是重新定位代码块和数据块。例如,可能必须修补代码中的跳转地址 请参阅外部模块的正确地址。