You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制z88dk汇编器仅使用Z80原生指令编译Z80汇编代码

如何关闭z88dk-z80asm的指令自动替换行为?

我正在使用z88dk将Z80汇编代码编译为80年代计算机可用的二进制代码。当编写了包含无效Z80指令add hl, a的汇编代码:

public _main            ; This entry point definition is required by z88dk
_main:
    org 0x0000

    ld hl, 0x8000
    ld a, 1
    add hl, a           ; Not a correct Z80 instruction

执行编译命令:

z88dk-z80asm test.asm z88dk-z80asm -b test.o

反汇编生成的test.bin后发现,汇编器自动将无效指令add hl, a替换成了一个用标准Z80指令实现对应功能的子程序调用:

0000 ORG_0000:
0000              ld   hl,8000h     ; 32768, -32768
0003              ld   a,01h    ; 1
0005              call .org_0000_l  ; 0008h
0008 .org_0000_l:
0008              push af     
0009              add  a,l    
000A              ld   l,a    
000B              ld   a,h    
000C              adc  a,00h    ; 0
000E              ld   h,a    
000F              pop  af     
0010              ret         

解决方案

  • z88dk-z80asm直接编译时:添加-x(或--no-extensions)参数,禁用汇编器的非标准指令扩展支持,遇到无效指令时直接报错而非自动替换。修改后的命令:
z88dk-z80asm -x test.asm -b test.o
  • 通过zcc编译时:使用-Cz-x参数将禁用扩展的选项传递给底层的z88dk-z80asm。示例命令(替换+target为实际目标平台,如+zx对应ZX Spectrum):
zcc +target -Cz-x -o test.bin test.asm

启用该参数后,汇编器遇到add hl, a这类无效Z80指令时会直接抛出错误,不会再自动生成替代子程序。

内容的提问来源于stack exchange,提问作者Markus Rautopuro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:40:15