Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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!'1013'$'
_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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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^^