Fragen zu Assembler

BlueB

Grünschnabel
Ich habe vor einer Woche angefangen Assembler zu lernen.
Jetzt wollte ich mal ein Programm programmieren, dass den Kreisumfang berechnet.
Unter .data habe ich
pi db 3,1415
durchmesser db 0
umfang dd durchmesser*pi

geschrieben.

der Durchmesser sollte dan so bestimmt werden:
mov ah,01
int 21h

mov [durchmesser],al

Dann wollte ich den Umfang ausgeben:
mov ah,09
mov dx,offset umfang
int 21h

Der TASM mach das aber nicht.
Was muss man da machen, wenn das nicht funktioniert?
 
1. pi db 3,1415 (bzw 3.1415) kannst du nicht in ein BYTE speichern (Kommazahlen sind sowieso etwas komplizierter)
2. im Datensegment kannst du nichts berechnen
3. al ist nur 1 Byte groß. Du willst aber seinen Inhalt auf die Adresse eines Doppelwortes schreiben.
Entweder machst du:
durchmesse als db
oder du nimmts:
mov durchmesser, al
4. wenn du eine Zeichenkette mit 09h ausgeben willst muss diese mit einem $ terminiert werden.
5. Zeichenketten müssen als db definiert werden
Bsp.: string db 'das ist ein string$' oder string db 'String mit Zeilenumbruch',10,13,'$'
 
Zuletzt bearbeitet:
Antwort von Uranus

Danke Uranus

Dann noch mal ein paar Fragen
z.b.:

DOSSEG
.model small
.stack 100h
.data
pi ... 3,1415
Umfang dw 0
.code
mov ax,@data
mov ds,ax

mov ah,01
int 21h

mul pi
mov Umfang,ax

1.Wie kann man einer Variable einen Wert geben, der eine pos. rationale, gebrochene Zahl ist?

2.Wie könnte man jetzt "Umfang ausgeben?

3.Wenn man eine Zeicheneingabe mit 01 in ah macht, werden immer ascii Zahlen in al gespeichert. Wie kann man das machen, dass bei z.b.:1auch 1 und nicht 61 gespeichert wird?
 
Zuletzt bearbeitet:
1. Das is ne gute Frage da muss ich mich selber erstmal schlau machen. :rolleyes:

2. Das kann sehr komplex werden ;-) am einfachsten is es wenn man einen String hat in dem man das Ergebnis schreibt. Allerdings ist das Ergebins ja meist ein Kommazahl d.h. es wird schon wieder kompliziert
:(

3.
0 = 30h
9 = 39h
d.h. du ziehst einfach 30h von al ab und hast deine Zahl

Kannst du es nich erstmal mit einfach sachen versuchen wie 2 Dimensionale Arrays adressieren ;)
 
um mit reellen Zahlen zu arbeiten, musst du mit der FP-Einheit programmieren.

Frage: muss es unbedingt ein DOS-Programm sein? sonst würde ich dir sowieso empfehlen auf win32 umzusteigen (ist mit dem Speicher einfacher).

Google mal nach "Art of Assembly" - ist ein kostenloses Assemblerbuch (gibt's in 3 Ausführungen 16bit, 32bit win und 32bit linux).

Da steht auch drin wie man mit der fp-unit arbeitet.
 

Neue Beiträge

Zurück