Hallo liebe HaBo-Community,
Ich weiß nicht, wie es bei euch aussieht und ob mir hier jemand helfen kann, aber momentan bin ich am Erlernen von Assembler auf Windows und habe mir diverse Bücher geholt, die so anfängerfreundlich sind wie die Sonne kalt.
Ich bin dann auf dieses Forum gestoßen und ich glaube, dass dieses Forum genau das Wissen beherbergt, das mir eventuell helfen könnte. (Ich wäre euch äußerst dankbar
)
Ich habe momentan das Buch "Assembler - Grundlagen der PC-Programmierung" von E.-W. Dieterich in der Hand. Die Webseiten, an denen man die benötigten Daten für die Abarbeitung des Buches braucht, sind leider down. Naja, man braucht sie nicht wirklich, aber das Buch arbeitet sehr viel mit eigenen Makros und diese sind in einer Datei abgespeichert.
Ich habe mir die Mühe gemacht, diese aus den letzten Seiten abzuschreiben und wollte gleich anfangen weiter zu lernen. Nun kommt es bei mir jetzt zu Problemen:
Als ich folgenden Code ausführen wollte
Ich habe diesen genommen, da er bei mir eigentlich die eindeutigsten Fehlermeldungen hinterlässt)
Bekam ich folgende Fehlermeldungen:
Unbenannt.PNG - directupload.net
Die Liste ist hier:
Ich verzweifle langsam xD
Ich weiß, dass es nach viel aussieht, aber vielleicht findet sich ein nettes und geübtes Auge, dem mein Problem sofort auffällt. Ich bin ein absoluter Neuling und würde sowas ungern aufgeben, nur weil es hier scheitert. Ich weiß sonst nicht, wohin damit.
Ich danke euch im Voraus!
Ich weiß nicht, wie es bei euch aussieht und ob mir hier jemand helfen kann, aber momentan bin ich am Erlernen von Assembler auf Windows und habe mir diverse Bücher geholt, die so anfängerfreundlich sind wie die Sonne kalt.
Ich bin dann auf dieses Forum gestoßen und ich glaube, dass dieses Forum genau das Wissen beherbergt, das mir eventuell helfen könnte. (Ich wäre euch äußerst dankbar
Ich habe momentan das Buch "Assembler - Grundlagen der PC-Programmierung" von E.-W. Dieterich in der Hand. Die Webseiten, an denen man die benötigten Daten für die Abarbeitung des Buches braucht, sind leider down. Naja, man braucht sie nicht wirklich, aber das Buch arbeitet sehr viel mit eigenen Makros und diese sind in einer Datei abgespeichert.
Code:
%pushlctl
%nolist
%noCref
%NoSyms
;;--------------------
SReg macro regs
irp reg,<regs>
push reg
endm
ENDM
;;--------------------
RReg macro regs
irp reg,<regs>
pop reg
endm
ENDM
;;-------------------
;;HILFSDATEN
.DATA
_puffer db 256 dup (0)
_gr dw 255
.CODE
;;-------------------
ReadS macro StringOfs,Elnge,ALnge
Local weiter
;;-------------------
SREG <ax,bx,cx,dx,es,si,di>
IFNB <ELnge>
mov ax,ELnge
mov _gr,ax
ELSE
mov _gr,255
ENDIF
mov bx,0 ;;handle für Standardeingabe
mov cx,255 ;;Anzahl zu lesender Bytes
mov dx,Offset _puffer ;;Lesen in Puffer
mov ah, 03Fh ;;Lesen aus einer Datei
int 21h
dec ax ;;Carriage Return/Line feed
dec ax ;; gleich abziehen
cmp ax,_gr ;;Vergl. mit gelesenen Zeichen
jle weiter ;;falls ok, dann weiter
mov ax,_gr ;;sonst: auf Elnge abschneiden
mov di,_gr
mov _puffer[di],0
weiter:
IFNB <ALnge> ;;falls ALnge angegeben,
mov ALnge,ax ;;gelesene Länge zurückgeben
ENDIF
mov cx,ax ;;Vorbereitung für Kopie
inc ax ;;des Strings aus Hilfspuffer
cld ;;in angegebenen Speicherbereich
mov ax,ds
mov es,ax
mov si, Offset _puffer
mov di, Offset StringOfs
rep movsb ;; kopieren des Hilfspuffers
RREG <di,si,es,dx,cx,bx,ax>
endm
;;------------------------------------------------------------------------------
readZ macro Zahl
readS _puffer,8, _gr
dedu Zahl, _puffer, _gr
ENDM
;;----------------------------------------
laenge macro Text
Local SuchSchleife, gefunden, M_Ende
SReg <bx,cx,dx,es,di>
mov ax,ds
mov es,ax ;;es auf .DATA
mov di,Text
mov bx,di
xor al,al ;;Null-Byte Suchen
mov cx,256
cld
Suchschleife:
scasb ;;Suche nach NUL
je gefunden
loop Suchschleife
;;nicht gefunden?
mov ax,-1 ;;Fehlerwert nach ax
jmp M_Ende
gefunden:
dec di ;;wegen Zeigervorlaufs
mov ax,di
sub ax,bx ;;Längenberechnung in Byte
M_Ende: RReg <di,es,dx,cx,bx>
ENDM
;;-------------------------------------------
write macro Text,Ausgabe
;;-------------------------------------------
SReg <ax,bx,cx,dx>
ifb <Text>
%out >> WRITE: 1. Parameter fehlt
.err
endif
IFB <Ausgabe>
mov bx,1
ELSE
ifdif <Ausgabe>,<bx>
mov bx,Ausgabe ;;PRN für Drucker
endif
ENDIF
Laenge <Text>
mov cx,ax ;;Laenge in cx
ifdif <Text>,<dx>
mov dx,Text ;;Stringadresse in dx
endif
mov ah,40h ;;Ausgabe auf Datei
int 21h
RReg <dx,cx,bx,ax>
ENDM
;;----------------------------
writeZ macro Zahl, Lnge, Ausgabe
push di
IFB <Lnge>
dude Zahl, _puffer,8 ;;zahl nach Ascii wandeln
mov di, 8
ELSE
dude Zahl, _puffer, Lnge
mov di,Lnge
ENDIF
mov _puffer[di],0 ;;Stringende
write <Offset _puffer>
pop di
ENDM
;;----------------------------
writeS macro Text, Ausgabe
write <Offset Text>,Ausgabe
ENDM
;;----------------------------
print macro Text, Ausgabe
local db _T
.DATA
_T Text, 0
.CODE
write <Offset _T>, Ausgabe
ENDM
println macro Text, Ausgabe
local _T
.DATA
_T label byte
ifnb <Text>
db Text
endif
db 10,13,0
.CODE
write <Offset _T>,Ausgabe
ENDM
nl macro
SReg <ax,dx>
mov ah,2 ;;char direkt ausgeben
mov dl, 10 ;;line feed
int 21h
mov dl,13 ;;carriage return
int 21h
RReg <dx,ax>
ENDM
.DATA
RandSeed dw 1h ;;Startwert für Random-Generator
randomize macro
SReg <ax,cx,dx>
mov ah,2ch
int 21h
mov RandSeed,dx
RReg <dx,cx,ax>
ENDM
random macro von, bis
local alles
SReg <ax,bx,cx>
mov ax, RandSeed
mov bx,32719
mul bx
add ax,3
mov bx,32749
div bx
mov RandSeed,dx
xor ax,ax
div bx
mov bx,bis
sub bx,von
inc bx
jz alles
xor dx,dx
div bx
add dx,von
alles: RReg <cx.bx.ax>
ENDM
exec macro procedure,parameterliste
irp param,<parameterliste>
mov ax,param
push ax
endm
call procedure
endm
dude macro INT, ZAHLSTR,ANZ
ifb <INT>
%out ">> dude: 1. Parameter fehlt!"
.err
endif
ifb <ZAHLSTR>
%out ">> dude: 2. Parameter fehlt!"
.err
endif
SReg <ax,bx,cx,dx,si>
mov ax,INT
mov bx,OFFSET ZAHLSTR
ifnb <ANZ>
mov cx,ANZ-1
else
mov cx,7
endif
add bx,cx
call _text:dude_p
RReg <si,dx,cx,bx,ax>
ENDM
.CODE
locals
dude_p proc near
.DATA
@@vz db ?
.CODE
mov dl, ' '
mov @@vz, dl
cmp ax, 0
jns @@pos
mov dl,'-'
mov @@vz,dl
neg ax
@@pos: mov si,10
sub dx,dx
div si
add dl,'0'
mov [bx],dl
dec bx
dec cx
js DudeAbr
jz DudeAbr
Umwand: sub dx,dx
div si
cmp ax,0
jnz Stelle
cmp dx,0
jnz Stelle
mov dl, ' '
jmp Ausgabe
Stelle: add dl, '0'
Ausgabe: mov [bx],dl
dec bx
loop Umwand
mov dl,@@vz
mov [bx],dl
ret
DudeAbr: mov dx, offset Fehlermeldung
mov ah,09h
int 21h
ret
.data
Fehlermeldung db 10,13,"---->>>>",7,7
db "LAUFZEIT-FEHLER beim Zahlenwandeln",10,13
db "Wahrscheinlich Längen-Parameter"
db " zu klein bei "
db "DUDE- oder writeZ-Aufruf !!! "
db 7,7,7,10,13,"$"
.code
dude_p endp
dedu macro NUMERIC, STRING; SIZE
local NeuesZeichen, Weiterschalten
local Positiv,Vz,Weiter,Ende
vz dw +1
.CODE
ifb <NUMERIC>
%out ">> dude: 1. Parameter fehlt!"
.err
endif
ifb <STRING>
%out ">>dedu: ". Parameter fehlt!"
.err
endif
SReg <ax,bx,cx,dx,di>
mov vz, +1
xor ax,ax
mov di,10
ifb <SIZE>
mov cx,8
else
mov cx,SIZE
endif
xor si,si
NeuesZeichen:
mov bl,[si+STRING]
cmp bl,0
je Ende
mul di
cmp bl,'-'
jne Weiter
mov [vz],-1
jmp Weiterschalten
Weiter:
cmp bl,'0'
jl Weiterschalten
cmp bl,'9'
jg Weiterschalten
and bx,15
add ax,bx
Weiterschalten:
inc si
loop NeuesZeichen
Ende:
cmp vz,-1
jne Positiv
neg ax
Positiv:
if ((.type Numeric) and 16) gt 0
mov vz,ax
else
mov Numeric,ax
endif
RReg <di,dx,cx,bx,ax>
if ((.type Numeric) and 16) gt 0
mov Numeric, vz
endif
ENDM
%poplctl
%nomacs
Als ich folgenden Code ausführen wollte
Code:
DOSSEG
.MODEL SMALL
.STACK 100H
include macros.mac
.CODE
begin:
mov ax,@Data
mov ds,ax
print "Diese Datei heisst "
print ??FileName
print " und wurde am "
print ??Date
print " um "
print ??Time
println " übersetzt."
mov ax,4c00h
int 21h
end begin
Unbenannt.PNG - directupload.net
Die Liste ist hier:
Code:
Turbo Assembler Version 3.0 08/05/15 00:36:21 Page 1
try.asm
1 DOSSEG
2 0000 .MODEL SMALL
3 0000 .STACK 100H
4 include macros.mac
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
36 004F .CODE
37 004F begin:
38 004F B8 0000s mov ax,@Data
39 0052 8E D8 mov ds,ax
40 print "Diese Datei heisst "
41 print ??FileName
42 print " und wurde am "
43 print ??Date
44 print " um "
45 print ??Time
46 println " übersetzt."
47 01FF B8 4C00 mov ax,4c00h
48 0202 CD 21 int 21h
49 end begin
Turbo Assembler Version 3.0 08/05/15 00:36:21 Page 2
Symbol Table
Symbol Name Type Value
??0000 Near _TEXT:006F
??0001 Near _TEXT:007A
??0002 Near _TEXT:007F
??0003 Near _TEXT:00AC
??0004 Near _TEXT:00B7
??0005 Near _TEXT:00BC
??0006 Near _TEXT:00E9
??0007 Near _TEXT:00F4
??0008 Near _TEXT:00F9
??0009 Near _TEXT:0126
??000A Near _TEXT:0131
??000B Near _TEXT:0136
??000C Near _TEXT:0163
??000D Near _TEXT:016E
??000E Near _TEXT:0173
??000F Near _TEXT:01A0
??0010 Near _TEXT:01AB
??0011 Near _TEXT:01B0
??0012 Byte DGROUP:01C8
??0013 Near _TEXT:01DD
??0014 Near _TEXT:01E8
??0015 Near _TEXT:01ED
??DATE Text "08/05/15"
??FILENAME Text "try "
??TIME Text "00:36:21"
??VERSION Number 0300
@32BIT Text 0
@@POS Near _TEXT:0013
@@VZ Byte DGROUP:0104
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0101H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text TRY
@INTERFACE Text 00H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
AUSGABE Near _TEXT:003B
BEGIN Near _TEXT:004F
DUDEABR Near _TEXT:0047
DUDE_P Near _TEXT:0000
FEHLERMELDUNG Byte DGROUP:0105
RANDSEED Word DGROUP:0102
STELLE Near _TEXT:0038
UMWAND Near _TEXT:0025
_GR Word DGROUP:0100
_PUFFER Byte DGROUP:0000
_T Number [DGROUP:BP-0002]
Turbo Assembler Version 3.0 08/05/15 00:36:21 Page 3
Symbol Table
Macro Name
DEDU
DUDE
EXEC
LAENGE
NL
PRINT
PRINTLN
RANDOM
RANDOMIZE
READS
READZ
RREG
SREG
WRITE
WRITES
WRITEZ
Groups & Segments Bit Size Align Combine Class
DGROUP Group
STACK 16 0100 Para Stack STACK
_DATA 16 01D6 Word Public DATA
_TEXT 16 0204 Word Public CODE
Turbo Assembler Version 3.0 08/05/15 00:36:21 Page 4
Error Summary
**Error** try.asm(9) PRINT(6) Symbol already different kind: _T
**Error** try.asm(10) PRINT(6) Symbol already different kind: _T
**Error** try.asm(11) PRINT(6) Symbol already different kind: _T
**Error** try.asm(12) PRINT(6) Symbol already different kind: _T
**Error** try.asm(13) PRINT(6) Symbol already different kind: _T
**Error** try.asm(14) PRINT(6) Symbol already different kind: _T
Ich verzweifle langsam xD
Ich weiß, dass es nach viel aussieht, aber vielleicht findet sich ein nettes und geübtes Auge, dem mein Problem sofort auffällt. Ich bin ein absoluter Neuling und würde sowas ungern aufgeben, nur weil es hier scheitert. Ich weiß sonst nicht, wohin damit.
Ich danke euch im Voraus!