Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 14.07.10 15:33
Hey,
ich steh grad vor ner aufgabe wo ich nich recht weiter weiß. Wir sollen ein Assembler Programm schreiben, bei dem 2 Zahlen addiert und auf dem Bildschirm ausgegeben werden. Das ganze soll mit Prozeduren realisiert werden. Soweit hab ich das auch hin bekommen und es funktioniert auch. Jetzt sollen wir die Segmente aber in mehrere Module packen, diese dann assemblieren und manuell zusammen linken. Es soll je ein Modul für das Hauptprogramm, die Prozeduren und die Daten erstellt werden. Und da komm ich nicht weiter, weil ich nicht weiß wie ich dem PC sagen soll, das die Segmente die er verwenden muss in einer anderen Datei stehen. Bei den Prozeduren ist das ja relaitiv einfach, da muss man nur angeben, das die irgendwo extern geschrieben sind: EXTRN ProcAdd:near, ProcPrintSum:near. Aber bei den Daten weiß ich nit wie das geht. Hier mal der funktionierene Code, den ich dann zerlegen muss:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
| _Stack Segment Para Stack 'Stack' DB 200h DUP(0) _Stack EndS
_Data1 Segment Word Public 'Data' Zahl1 DB 23h _Data1 EndS
_Data2 Segment Word Public 'Data' Zahl2 DB 56h _Data2 EndS
_Data3 Segment Word Public 'Data' Text DB 'Die Summe ist $' Error DB 'Summe ist zu gross!', 10, 13, '$' _Data3 EndS
_Code1 Segment Word Public 'Code' Assume CS:_Code1, SS:_Stack Start: mov ax, _Data3 mov ds, ax Assume DS:_Data3
call ProcAdd call ProcPrintSum mov ah, 4Ch int 21h ProcAdd PROC near mov ax, _Data1 mov ds, ax assume DS:_Data1 xor bx, bx mov bl, Zahl1 mov ax, _Data2 mov ds, ax assume DS:_Data2 xor ax, ax mov al, Zahl2 add ax, bx ret ProcAdd EndP
ProcPrintSum PROC near cmp ax, 100h jae M_Error mov bl, 10h div bl push ax mov ax, _Data3 mov ds, ax assume DS:_Data3 mov dx, OFFSET Text mov ah, 09h int 21h pop ax push ax mov dl, al add dl, 30h mov ah, 02h int 21h pop ax mov dl, ah add dl, 30h mov ah, 02h int 21h mov dl, 68h int 21h jmp M_Ende M_Error: mov ax, _Data3 mov ds, ax assume DS:_Data3 mov dx, OFFSET Error mov ah, 09h int 21h jmp M_Ende M_Ende: ret ProcPrintSum EndP
_Code1 EndS END Start |
Wäre toll wenn mir da jmd weiterhelfen könnte. Achja das ganze hat nix mit Delphi zu tun. Wir arbeiten mit HS-ASM. Aber am Asseblmer selbst sollte sich ja nix ändern.
MfG & Thx Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 14.07.10 17:49
Mit dem konkreten Assembler hab ich noch nicht gearbeitet, aber i.d.R. läuft das so, dass du Labels und Symbole (z.B. für Variablen) explizit exportieren musst. Viele Assembler haben dafür ein .export- bzw. .globl-Makro oder auch eine EXPORT-Direktive. Wie das in deinem Assembler konkret ausschaut bitte mal in der Dokumentation dazu nahschlagen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 14.07.10 18:01
Hey,
die Hilfe die zu dem Programm dazu is kann man vergessen, da stehen nur die wichtigsten Assembler-Befehle drin, und google spuckt auch nix brauchbares aus, weil das Programm schon sehr alt is und scheinbar nicht so weit verbreitet ist.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|