Hi Leute!
Ich hab ein Problem mit dieser Aufgabe:
In MACROS.ASM sind folgende Makros definiert, die Sie verwenden können:
ClrScr Löscht den User-Bildschirm
Set_Cursor Zeile, Spalte Setzt den Cursor an bestimmte Position Zeile
und Spalte sind Bytes!
Read_KBD_and_Echo liest ein Zeichen (Byte) in Al ein und zeigt es am
Bildschirm an
Display_Char gibt ein Zeichen (aus DL) auf den Bildschirm aus
Einwickeln Sie nun ein Programm, mit dem Sie ein bestimmtes Element (M[i
, j])
einer n x m – Matirx , einlesen können.
Die Eingabe von i und j soll über die Tastatur erfolgen – m und n können
Sie fest vorgeben!
Es sollen nur Zahlen eingegeben werden können – ohne Vorzeichen!
Die Elemente der Matrix sollen jeweils 16-Bit groß sein!
Die Elemente der Matrix sollen mit 0FFFFh vorbelegt werden!
Nach der Eingabe des Elementes M(i,j) soll die Matrix auf den Bildschirm
ausgegeben werden!
Hier nun mein bisheriger Lösungsansatz:
1 | ; --------------------------------------- Dateiname: a52.ASM ----------------------------------------------
|
2 | ; Array in Assembler
|
3 | ;
|
4 | ;
|
5 | ;------------------------------------------------------------------------------------------------------------------------------
|
6 |
|
7 | %noctls ; Listing-Steueranweisungen werden nicht im Listing augegeben
|
8 | %noincl ; Incude-Dateien werden nicht im Listing ausgegeben
|
9 |
|
10 | INCLUDE MACROS.ASM ; Datei Macros.asm einbinden
|
11 | ASSUME CS:CODE, DS:DATA ; Segmentnamen bekannt geben
|
12 | ; „CODE“ wird Codesegment, „DATA“ wird Datensegment
|
13 |
|
14 | ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
15 | DATA SEGMENT ; Beginn des Segmentes „DATA“
|
16 |
|
17 | array DW 0AH DUP(0FFFFh)
|
18 | DW 0AH DUP(0FFFFh)
|
19 | DW 0AH DUP(0FFFFh)
|
20 |
|
21 | i DW 0h
|
22 | j DW 0h
|
23 | zahl DW 0h
|
24 |
|
25 | DATA ENDS ; Ende des Segmentes „DATA“
|
26 | ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
27 |
|
28 | ;-------------------------------------------------------------------------------------------------------------------------------
|
29 | CODE SEGMENT ; Beginn des Segmentes „CODE“
|
30 |
|
31 | Anfang:
|
32 | ; Zahll nach i einlesen:
|
33 | Read_KBD_and_Echo ; Zeichen für i (Zeile) entgegennehmen
|
34 | SUB AX,30h ; Zahl berechnen
|
35 | XOR AH,AH ; Funktionsaufruf löschen
|
36 | MOV i,AX ; Zahl nach BX kopieren
|
37 |
|
38 | ; Zahl nach j einlesen:
|
39 | Read_KBD_and_Echo ; Zeichen für j (Spalte) entgegennehmen
|
40 | SUB AX,30h ; Zahl berechnen
|
41 | XOR AH,AH ; Funktionsaufruf löschen
|
42 | MOV j,AX ; Zahl nach DI kopieren
|
43 |
|
44 | ; Zahl nach DI einlesen:
|
45 | Read_KBD_and_Echo ; Zeichen für Element entgegennehmen
|
46 | SUB AX,30h ; Zahl berechnen
|
47 | XOR AH,AH ; Funktionsaufruf löschen
|
48 | MOV zahl,AX ; Zahl nach DI kopieren
|
49 |
|
50 | ; "zahl" in Abhängigkeit von "i" und "j" an die richtige Stelle schreiben
|
51 |
|
52 | MOV BX,i
|
53 | MOV DI,j
|
54 |
|
55 | MOV SI,[array[BX][DI]]
|
56 | MOV WORD PTR[SI],zahl
|
57 |
|
58 | MOV DL,array[BX][DI]
|
59 | ADD DL,30
|
60 | Display_Char
|
61 |
|
62 |
|
63 | Terminate_Program ; Makro Terminate_Program aufrufen
|
64 |
|
65 | CODE ENDS ; Ende des Segmentes „CODE“
|
66 | ;-------------------------------------------------------------------------------------------------------------------------------
|
67 |
|
68 | END Anfang ; Ende des Programms
|
69 | ; Programm wird bei Anfang gestartet
|
Das Problem an meinem Code ist nur, dass wenn ich ihn assembliere ich
zwei fehler bekomme. Nämlich: Zweile 56 und 58. Ich hab allgemein das
Problem jetzt, dass ich nicht recht weiß, wie ich dem Programm jetzt
beibringen soll, dass er mir die "Zahl" an die Stelle in Abhängigkeit
von i und j schreiben soll.
Könnt ihr mir bis zur Lösung meines Problems stückchenweise helfen?
Edit: Womit auch immer noch Probleme hab, ist dieser Befehl mov WORD
PTR[]... Könnt ihr mir mal da genau erklären was Sache ist? Ich finde
dazu auch nicht wirklich was in meiner Literatur und im Internet find
ich auch nix!
Danke!