Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Frage zu Arnold Assembler » Themenansicht

Autor Thread - Seiten: -1-
000
18.03.2017, 22:24 Uhr
maleuma



Ich möchte im Arnold-Assembler für Z80-Code Zeichenketten Byte für Byte mit 0A8h XOR-verknüpfen, also statt

DB CR,"Test",0

die Bytefolge A5, FC, CD, DB, DC, A8 erzeugen.
Das wollte ich mit einem MACRO machen. In der Beschreibung von as steht das Beispiel:

Quellcode:
irpc char,"Hello World"
db 'CHAR'
endm



Das wollte ich nun allgemein nutzbar machen für verschiedene Zeichenketten und habe daraus folgendes MACRO gemacht:

Quellcode:
DX    MACRO
     IRPC    X,STRING
      DB    'X' ! 0A8h
     ENDM
    ENDM
; Codierte Texte erzeugen:
    DX    CR
    DX    "Test"
    DX    0


Aber as meldet bei jedem Aufruf des MACROs DX "invalid operand type". Wenn ich STRING in Anführungszeichen setze, kommt kein Fehler, aber es wird bei jeder Verwendung die Zeichenkette "STRING" benutzt.
Was mache ich falsch?
--
Mario.

Dieser Beitrag wurde am 18.03.2017 um 22:51 Uhr von maleuma editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
18.03.2017, 22:30 Uhr
ambrosius



Ist STRING auch als Textvariable definiert? Ich kenne mich mit dem Arnold-Ass nicht aus, aber es könnte auch sein, das der Aufruf eines Macros innerhalb eines Macros nicht gestattet ist. Außerdem wird im zweiten Codestück DX als Label für das Macro genommen und dann auch als Label für die Textstücke. Müßte da nicht das Label STRING vor dem CR stehen?
--
Beste Grüße
Holger
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
18.03.2017, 22:42 Uhr
maleuma



DX ist der Name des Macros, aber der Tipp war schon gut, denn da fehlte der Parameter.
Ich habe das jetzt so geschrieben:

Quellcode:
DX    MACRO   STRING
     IRPC    X,STRING
      DB    'X' ! 0A8h
     ENDM
    ENDM
; Codierte Texte erzeugen:
    DX    CR
    DX    "Test"
    DX    0


Jetzt funktioniert es zumindest für die Zeichenkette "Test".
Nun müsste ich das nur noch für die Einzelbytes hinbekommen.
Am liebsten wäre mir natürlich die Form:

DX CR,"Test",0
--
Mario.

Dieser Beitrag wurde am 18.03.2017 um 22:43 Uhr von maleuma editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
19.03.2017, 10:56 Uhr
ambrosius



Könnte es sein, das der AA ein einzelnes CR nicht als String anerkennt? Dann müßtest Du das CR irgendwie mit Test verknüpfen (evtl. CR+"Test"? o.s.ä.), um einen kompletten String zu erhalten. Wie gesagt, ich kenne die Syntax des AA nicht und kann nicht sagen, ob das so funktioniert.
--
Beste Grüße
Holger
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
19.03.2017, 17:40 Uhr
timpi



Hallo Mario,

Wenn Du den String als Ganzes angibst


Quellcode:
    DX "\rTest"



dann geht's. Das Problem ist jedoch die Stringterminierung, die wird nicht mit genommen, selbst wenn Du "\000" noch hinten dran hängst.

Willst Du das Macro nur auf nullterminierte Strings anwenden, dann klappt vielleicht:

Quellcode:
DX    MACRO    data
        IRPC    X,data
        DB    'X' ! 0A8h
        ENDM
        DB    0 ! 0A8h
        ENDM



timpi.

Dieser Beitrag wurde am 19.03.2017 um 17:42 Uhr von timpi editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
20.03.2017, 09:48 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Ein bisschen tricky, aber es geht:


Quellcode:

    cpu    z80

CR    equ    0dh

DX   macro X
    IFNB X
    if EXPRTYPE(x) = 2
      irpc y,x
          DB    'Y' ! 0A8h
          ENDM
        else
          DB  (X) ! 0A8h
    endif
    shift
        DX ALLARGS
        endif    
    endm

                      
; Codierte Texte erzeugen:
    DX    CR
    DX    "Test"
    DX    0

    DX    CR,"Test",0

    end


--
VolkerP

http://hc-ddr.hucki.net
(z9001, Z1013, LC-80, ...)

Dieser Beitrag wurde am 20.03.2017 um 09:50 Uhr von volkerp editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
20.03.2017, 18:36 Uhr
maleuma



Super, danke.

Das ist genau das was ich gesucht habe. Das mit SHIFT und ALLARGS hatte ich auch schon in der Dokumentation gefunden. Nur das Zusammenspiel hatte bei mir noch nicht funktioniert.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek