我似乎正在与我的愚蠢作斗争。
该站点解释了各种版本的 CP/M 下的系统调用。
但是,当我尝试使用调用 2(C_WRITE,控制台输出)时,什么都没有发生。
我有以下代码。
ORG 100h
LD E,'a'
LD C,2
CALL 5
CALL 0
我在这里背诵这句话。如果有错别字,请放心,它们不在原始文件中,因为文件确实编译了,而且我有一个 COM 文件要启动。
我认为这些线条的含义如下:
- 确保它被加载到地址 100h(0h 到 FFh 是零页)。
- 将 ASCII 'a' 加载到系统调用 2 的 E 寄存器中。
- 将整数 2 加载到系统调用 2 的 C 寄存器中。
- 进行系统调用(系统调用的 JMP 位于零页中的地址 5)。
- 结束程序(退出命令在零页的地址 0 处)。
程序启动和退出没有问题。如果我删除最后一个命令,它会挂起计算机(我猜这也是预期的,并显示 CALL 0 有效)。
但是,它不打印 ASCII 字符。(但它确实打印了一个额外的新行,但系统可能已经这样做了。)
如何让我的 CP/M 程序执行系统调用应该执行的操作?我究竟做错了什么?
更新:问题是我尝试过的所有汇编程序都需要某种格式的源文件。此文件与 Microsoft 的宏汇编器一起使用:
.Z80
START: LD E,'a'
LD C,2
CALL 5
JP 0
我认为(我猜)asm.com(DR 的汇编程序)和 m80.com(微软的宏汇编程序)期待 Intel 8080 助记符,并且必须告知他们何时必须期待 z80 助记符,这显然是不同的。
无论如何我都会接受下面的答案,因为它也是正确的,因为它建议只需编写图像本身而不用担心 asm.com。