【问题标题】:Easy68k: How to call a macro in assembly?Easy68k:如何在汇编中调用宏?
【发布时间】:2016-07-25 20:53:46
【问题描述】:

我是第一次使用easy68k,我写了两个我想在我的程序中调用的宏。宏定义编译得很好。

但是,当我尝试从主程序中调用宏时(即在“org”语句之后),它不会编译。

我尝试了所有我能想到的语法,我查看了帮助部分和互联网上的其他一些网站,但没有任何效果。

目前,当我编译下面的代码时,它会显示两条错误消息:

有人说:第 57 行 (MUL_MAC d1,d3,) 错误:无效参数 另一个说: Line 60 (bsr MUL_SUB) ERROR: Invalid argument

这是我的源代码(MC68000 汇编):

MUL_MAC macro          
    movem.l d6-d7, -(a7)
    move.w \1, d6
    clr.l d7
loop\@ add.w \2, d7
    dbra d6, loop\@
    move.w d7, \2
    movem.l (a7)+, d6-d7
    endm

MUL_SUB equ *           ; Subroutine
    move.w d2, d3
    clr.l d4
loop_sub add.w d1, d4
    dbra d3, loop_sub
    move.w d4, d2
    rts

PRINT_RES macro         
    movem.l d5-d7, -(a7)
    clr.l a1
    move #248, d7   ; Code to display character
    cmp \1, \2
    beq right\@
    move.b INC_L, d5
loop_ch_2\@ move.b  INC(a1)+, d0
    trap #14
    dbra d5, loop_ch_2\@
    bra finish\@
right\@ move.b COR_L, d5
loop_ch_2\@ move.b  COR(a1)+, d0
    trap #14
    dbra d5, loop_ch_2\@
finish\@ movem.l (a7)+, d5-d7
    endm

    ORG    $1000
START:                  ; first instruction of program

    clr.w d1
    clr.w d2
    clr.w d3
    clr.w d4

    move.w X, d1
    move.w Y, d2
    move.w d2, d3
    move.w d2, d4

    mulu d1, d4         ; Store the actual result in d2 to compare later
    MUL_MAC d1,d3,
    PRINT_RES d3,d4,

    bsr MUL_SUB
    PRINT_RES d2,d4,

    move #228, d7
    trap #14

* Put program code here

    SIMHALT             ; halt simulator

* Put variables and constants here

X   ds  1
Y   ds  1
INC dc.b    73, 78, 67, 79, 82, 82, 69, 67, 84 ; INCORRECT
COR dc.b    67, 79, 82, 82, 69, 67, 84         ; CORRECT 
INC_L dc.b 9                                   ; Length of INCORRECT
COR_L dc.b 7                                   ; Length of CORRECT


    END    START        ; last line of source

【问题讨论】:

  • 定义“不编译”。您收到错误消息吗?如果是这样,该消息究竟说了什么?
  • 这是一个好点,我将编辑帖子以包含它,但基本上它在我编译上述内容时显示两条错误消息:一个说:第 57 行 (MUL_MAC d1,d3,)错误:无效参数另一个说:第60行(bsr MUL_SUB)错误:无效参数

标签: assembly macros call motorola easy68k


【解决方案1】:

至少我会像这样删除尾随的逗号

MUL_MAC d1,d3
PRINT_RES d3,d4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多