使用 z80 asm 时,(HL) 和 (BC/DE) 之间有区别吗?
When using z80 asm is there a difference between (HL) and (BC/DE)?
在尝试为我的 TI-84 PlusCE 编写程序集的过程中,我遇到了一个奇怪的“错误”。考虑以下代码:
#include "includes\ti84pce.inc"
s_mem_start = saveSScreen
.assume ADL=1
.org userMem-2
.db tExtTok,tAsm84CeCmp
;relevant portion
ld HL, s_mem_start
ld DE, 2
ADD HL, DE
ld D, H
ld E, L
ld A, (HL)
call _PutC
ld A, (DE)
call _PutC
;/relevant portion
ret
saveSScreen
是空闲内存的一部分。 _PutC
是一个 rom 调用,它将 A
的值打印到屏幕上。请参阅此图表:http://tibasicdev.wikidot.com/83lgfont。我已经确认 _PutC
不会影响任何寄存器。这段代码在屏幕上的输出是 v[CursorInsertSecond]
。 (CursorInsertSecond 是计算器上的一个字符)。这些等同于十六进制 03
或 73
和 E5
。分不清v是正体v还是斜体v
显然 (HL)
和 (DE)
正在访问内存的不同部分。这在使用BC
时也是一样的。奇怪的是我在任何地方都找不到记录的这些信息。仅使用一对寄存器来访问内存似乎是一个重大损害。确实让我自己的代码感觉很臃肿。
我注意到的最后一件奇怪的事情是,这似乎只适用于添加到 HL
时。考虑以下代码:(减去 header 部分)。
ld HL, s_mem_start + 2
ld DE, s_mem_start + 2
ld A, (HL)
call _PutC
ld A, (DE)
call _PutC
这导致输出 vv
。这里会发生什么?为什么 (HL)
和 (DE)
给出不同的输出,但只是在某些时候。
- 我的计算器屏幕在 运行 第一个程序之后:https://imgur.com/a/C6zGCz2
- 我的 ti84pce.inc 文件:https://wikiti.brandonw.net/index.php?title=84PCE:OS:Include_File
- 计算器型号:TI-84 Plus CE
- 编译器:https://github.com/alberthdev/spasm-ng/releases
- 链接器:TI-Connect
事实证明,ti84plusce 确实运行ez80 程序集。在 ez80 程序集中,HL、BC 和 DE 是三个字节而不是两个。我的代码只复制了两个字节,因此地址弄乱了。
在尝试为我的 TI-84 PlusCE 编写程序集的过程中,我遇到了一个奇怪的“错误”。考虑以下代码:
#include "includes\ti84pce.inc"
s_mem_start = saveSScreen
.assume ADL=1
.org userMem-2
.db tExtTok,tAsm84CeCmp
;relevant portion
ld HL, s_mem_start
ld DE, 2
ADD HL, DE
ld D, H
ld E, L
ld A, (HL)
call _PutC
ld A, (DE)
call _PutC
;/relevant portion
ret
saveSScreen
是空闲内存的一部分。 _PutC
是一个 rom 调用,它将 A
的值打印到屏幕上。请参阅此图表:http://tibasicdev.wikidot.com/83lgfont。我已经确认 _PutC
不会影响任何寄存器。这段代码在屏幕上的输出是 v[CursorInsertSecond]
。 (CursorInsertSecond 是计算器上的一个字符)。这些等同于十六进制 03
或 73
和 E5
。分不清v是正体v还是斜体v
显然 (HL)
和 (DE)
正在访问内存的不同部分。这在使用BC
时也是一样的。奇怪的是我在任何地方都找不到记录的这些信息。仅使用一对寄存器来访问内存似乎是一个重大损害。确实让我自己的代码感觉很臃肿。
我注意到的最后一件奇怪的事情是,这似乎只适用于添加到 HL
时。考虑以下代码:(减去 header 部分)。
ld HL, s_mem_start + 2
ld DE, s_mem_start + 2
ld A, (HL)
call _PutC
ld A, (DE)
call _PutC
这导致输出 vv
。这里会发生什么?为什么 (HL)
和 (DE)
给出不同的输出,但只是在某些时候。
- 我的计算器屏幕在 运行 第一个程序之后:https://imgur.com/a/C6zGCz2
- 我的 ti84pce.inc 文件:https://wikiti.brandonw.net/index.php?title=84PCE:OS:Include_File
- 计算器型号:TI-84 Plus CE
- 编译器:https://github.com/alberthdev/spasm-ng/releases
- 链接器:TI-Connect
事实证明,ti84plusce 确实运行ez80 程序集。在 ez80 程序集中,HL、BC 和 DE 是三个字节而不是两个。我的代码只复制了两个字节,因此地址弄乱了。