gpt4 book ai didi

z80 - CP/M 3.1 (z80) 的最小汇编程序

转载 作者:行者123 更新时间:2023-12-03 20:18:48 24 4
gpt4 key购买 nike

我似乎正在与我的愚蠢作斗争。

This site解释了各种版本的 CP/M 下的系统调用。

但是,当我尝试使用 call 2(C_WRITE,控制台输出)时,没有任何 react 。

我有以下代码。

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(Microsoft 的宏汇编程序)正在期待 Intel 8080 助记符,并且必须在他们必须期待 z80 助记符时被告知,这显然是不同的。

    无论如何我都会接受下面的答案,因为它也是正确的,因为它建议简单地编写图像本身而不必担心 asm.com。

    最佳答案

    明显的可能性:您的汇编程序是否将 '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 模拟器,它本身已有二十多年的历史,因此似乎没有网页)用于 DOS在 DOSBox 中运行 mytest.com。它输出字母'a'。因此,您的工具链或 CP/M 都有问题。

    一张照片,因为它确实发生了:

    enter image description here

    关于z80 - CP/M 3.1 (z80) 的最小汇编程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245317/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com