Entwickler-Ecke

Algorithmen, Optimierung und Assembler - [Assembler] Problem beim Teilen


Delete - Do 26.01.06 19:52
Titel: [Assembler] Problem beim Teilen
Hallo!

Hab mal angefangen mir etwas assembler beizubringen und bin nun (nach dem obligatorischen 'Hello World' ;) ) beim Teilen angelangt.
Möchte einfach 42 durch 11 teilen.
(Da kommt bekanntermaßen 3 Rest 9 raus.
der rest kommt ins ah register und das ergebnis ins al)

Hier mein Quelltext:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
org 100h
start:
  mov ax,[divident]
  div [divisor]
  mov [ergebnis],al
  mov [resti],ah
  mov ah,4Ch
  int 21h
section .date
  divident dw 2Ah
  divisor dw 0Bh
  resti dw 00h
  ergebnis dw 00h

Wer sich wundert warum ich 'resti' statt 'rest' schreibe: mit 'rest' kommen zwei compilerfehler (Zeilen 6,12). Mit 'resti' nur einer in Zeile 4. Der macht mir zu schaffen.

Hoffe mir kann jemand helfen!

MMMichael


Moderiert von user profile iconChristian S.: Topic aus Off Topic verschoben am Sa 28.01.2006 um 09:51


tommie-lie - Do 26.01.06 21:19
Titel: Re: [Assembler] Problem beim Teilen
user profile iconmmmichael hat folgendes geschrieben:

Quelltext
 
4:
{ ... }
  div [divisor]
einer in Zeile 4. Der macht mir zu schaffen.
Du möchtest die Syntax für DIV im IA Software Developer's Manual [http://intel.com/design/Pentium4/documentation.htm#manuals] (S. 3-253) nachschauen. ;-)
Da steht eine große Auswahl an Operatorgrößen zur Verfügung. Woher soll der Prozessor nun wissen, wieviele Byte er als Divident annehmen soll? Du musst ihm also mitteilen, was tu tun ist. Im NASM geht das, indem du einfach "word" vor den Ausdruck stellst, da dein Divident in der data-Section nur ein Word groß ist:

Quelltext
1:
div word [divisor]                    
.
Assembliert mit NASM 0.98.38 ohne Fehlermeldungen.


Edit: Byte durch Word ersetzt. Du solltest dir angewöhnen, Daten in hexadezimaler Schreibweise immer in Zielgröße anzugeben. Beispielsweise 000Fh für ein Word mit dem Wert 255. Dann muss man nicht auf den Präfix achten, sondern sieht gleich, wie breit die Daten sind, die man haben will.


Delete - Fr 27.01.06 15:11

Okay, Vielen Dank! :think: