我似乎正在失去与我的愚蠢斗争。
This site解释了各种版本的CP / M下的系统调用。
但是,当我尝试使用调用2(C_WRITE,控制台输出)时,没有什么事情发生。
我有以下代码。
ORG 100h
LD E,'a'
LD C,2
CALL 5
CALL 0
我在这里从记忆中背诵这个。如果有拼写错误,请放心,因为文件编译后我们没有原文,我有一个COM文件可以启动。
我认为这些行意味着以下内容:
程序启动和退出没有问题。如果我删除了最后一个命令,它会挂起计算机(我猜这也是预期的,并显示CALL 0有效)。
但是,它不会打印ASCII字符。 (但它会打印一个额外的新行,但系统可能已经这样做了。)
如何让我的CP / M程序执行系统调用应该执行的操作?我做错了什么?
更新:问题是我试过的所有汇编程序都期望源文件的某种格式。此文件适用于Microsoft的宏汇编程序:
.Z80
START: LD E,'a'
LD C,2
CALL 5
JP 0
我认为(我猜)asm.com(DR的汇编程序)和m80.com(微软的宏汇编程序员)期待英特尔8080助记符,必须告诉他们什么时候需要z80助记符,显然是不同的。
我会接受下面的答案,因为它也是正确的,因为它建议只是自己编写图像而不用担心asm.com。
答案 0 :(得分:3)
明显的可能性:你的汇编程序是'a'是十六进制而不是ASCII字符? 0xa
是新行的ASCII。也许尝试'g'或检查汇编程序输出的十六进制转储?
除了你的代码看起来很好,虽然RST 0
会节省几个字节。
编辑:
我将您的代码汇总到:
1e 61
0e 02
cd 05 00
cd 00 00
我将其保存为磁盘mytest.com。然后我启动this CP/M emulator(警告:这是一个直接的文件下载链接;模拟器似乎标题为 Joan Riff的“Z80MU PROFESSIONAL”Z80和CP / M 2.2模拟器并且本身超过20个岁,所以似乎没有一个网页)DOS DOS内的DOS和运行mytest.com。它输出字母'a'。所以你的工具链或你的CP / M都有问题。
一张照片,因为它确实发生了: