ein wohl ganz billiges Assemblerproblem

darkdennis

Grünschnabel
Hallo zusammen.
Im 3. Semester hatte ich u.a. auch Assembler, hab aber viel in Gruppenarbeit gemacht und nun möchte ich die Sprache "neu" lernen.
Folgendes kleines Problem:
ich möchte zu Test/Lernzwecken ein Programm schreiben, wo einfach 2 Variabeln oder Werte addiert werden und dann das Ergebnis auf den Screen ausgegeben wird.

daten segment
assume ds:daten
eins db 50
zwei db 50
ergebnis db ?
daten ends

code segment
assume cs:code
mov ax,daten
mov ds,ax

mov dl,eins
add dl,zwei
mov ergebnis,dl
mov ah,09h
int 21h
ende (den Rest spar ich mir) Aber es wird nix oder ein Zeichenwirrwarr (binb mir nicht mehr sicher) ausgegeben. Was ist da falsch?
Zur Zeit nutze ich MASM unter Linux-DosEMU. Habe aber unter WinXP Hutch's MASM32. Was ist da anders? Hui, so viele Fragen, aber Danke für Eure Antworten und allen ein schönes neues Jahr.
 
Warum so kompliziert?
Code:
.DATA
a db 50
b db 50
erg db ?
.CODE
mov ah, [a]
add ah, [b]
;So, jetzt ist schonmal addiert!
mov [erg], ah
;So, und jetzt gespeichert
;Und dann gibst du das einfach aus!



Übrigens, könte sein das das nciht stimmt, ich mache OS-Dev da gibts kein Data-Segment in *.bin Dateien.



Und übrigens, dein Zeichenwirrwar entsteht, weil diese Zahlen als ASCII-Code interpretiert werden! du muss das erst umwandeln!
 
Nein! Ein Forum ist nciht dazu da, dir code zu schreiben!
Es sieht ungefähr so us:

wenn das register mit der Zahl ah ist:

zahl_char:
cmp ah, 1
jnz .1
mov ah, "1"
.1:
cmp ah, 2
jnz .2
mov ah, "2"
usw.
dann sind die zahlen umgewandelt, jetzt mit einem int ausgeben und fertig
 
Da hast Du natürlich Recht. Aber jetzt weiß ich auch wieder, warum ich Assembler damals verflucht habe. Nichts desto trotz, Danke für die Hilfe.
 

Neue Beiträge

Zurück