我似乎正在与我的愚蠢作斗争。
该站点解释了各种版本的 CP/M 下的系统调用。
但是,当我尝试使用 call 2(C_WRITE,控制台输出)时,没有任何反应。
我有以下代码。
ORG 100h
LD E,'a'
LD C,2
CALL 5
CALL 0
Run Code Online (Sandbox Code Playgroud)
我凭记忆在这里背诵。如果有拼写错误,请放心,它们不在原始文件中,因为文件确实已编译并且我有一个 COM 文件要启动。
我认为这些行的含义如下:
该程序启动和退出没有问题。如果我删除最后一个命令,它会挂起计算机(我猜这也是预期的,并且显示 CALL 0 有效)。
但是,它不打印 ASCII 字符。(但它确实打印了一个额外的新行,但系统可能已经这样做了。)
我怎样才能让我的 CP/M 程序做系统调用应该做的事情?我究竟做错了什么?
更新:问题是我尝试过的所有汇编程序都期望源文件具有某种格式。此文件与 Microsoft 的宏汇编程序一起使用:
.Z80
START: LD E,'a'
LD C,2
CALL 5
JP 0
Run Code Online (Sandbox Code Playgroud)
我认为(我在猜测)asm.com(DR 的汇编程序)和 m80.com(Microsoft 的宏汇编程序)正在期待 Intel 8080 助记符,并且必须在他们必须期待 z80 助记符时被告知,这显然是不同的。
无论如何我都会接受下面的答案,因为它也是正确的,因为它建议简单地编写图像本身而不必担心 asm.com。
明显的可能性:您的汇编器是否将“a”视为十六进制而不是 ASCII 字符?0xa是换行的 ASCII。也许尝试“g”或检查汇编器输出的十六进制转储?
除此之外,您的代码看起来不错,尽管RST 0会节省一些字节。
编辑:
我手工将您的代码组装为:
1e 61
0e 02
cd 05 00
cd 00 00
Run Code Online (Sandbox Code Playgroud)
我将其保存到磁盘上,名称为 mytest.com。然后我启动了这个 CP/M 模拟器(警告:这是一个直接文件下载链接;该模拟器的标题似乎是Joan Riff 的“Z80MU PROFESSIONAL”Z80 和 CP/M 2.2 模拟器,它本身已有二十多年的历史,所以似乎并没有在 DOSBox 内有一个用于 DOS 的网页)并运行 mytest.com。它输出字母“a”。所以要么是你的工具链有问题,要么是你的 CP/M 出了问题。
一张照片,因为它确实发生过:
