AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Division (Bit-Shifting) in ASSEMBLER

Division (Bit-Shifting) in ASSEMBLER

Ein Thema von Dannyboy · begonnen am 18. Mär 2004 · letzter Beitrag vom 18. Mär 2004
 
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#1

Division (Bit-Shifting) in ASSEMBLER

  Alt 18. Mär 2004, 09:18
Hallo zusammen,

AUFGABENSTELLUNG:
In folgenden 2 Beispielen (ASM) werden die Doppelworte <VARIABLE>
dividiert; im Beispiel I durch den Wert 16 und im Beispiel II durch den
Wert 512. Der Quotient soll jeweils in den Akkumulator geschoben werden.

PROBLEM:
Die Anweisungen im Einzelnen sind mir klar (habe meine Kommentare
dahinter geschrieben), doch ich verstehe absolut nicht, WARUM dieses
Schema funktioniert und WIE es (mathematisch) funktioniert. In den beiden
Beispielen kann ich jeweils die Schritte 1 bis 4 leicht nachvollziehen,
denn die Divisionen erfolgen hier durch das binäre Schieben der
notwendigen Stellen nach rechts. Ab Schritt 5 verstehe ich NIX mehr. Ich
kann weder das AND (in Beispiel I) deuten, noch das nach LINKS (!)
Schieben.
Wäre Euch sehr dankbar, wenn ihr mir bei diesem kleinen Problem helfen
könntet.
Code:
BEISPIEL NUMERO I: DIVISION DURCH 16

VARIABLE DD (?) ; 32 BIT

<ANWEISUNGEN>

1) MOV AX, WORD PTR [VARIABLE]      ; LOW-WORD [VARIABLE] IN AX
2) MOV CL, 4                       ; CL = 4
3) SHR AX, CL                     ; AX = AX DIV 16
4) MOV BX, WORD PTR [VARIABLE+2]    ; HIGH-WORD [VARIABLE] IN BX
5) AND BL, 0FH                    ; BX AND 15
6) MOV CL, 4                       ; CL = 4   
7) SHL BL, CL                     ; BL = BL * 16
8) ADD AH, BL                     ; AH = AH + BL
Code:
BEISPIEL NUMERO II: DIVISION DURCH 512

VARIABLE DD (?); 32 BIT

<ANWEISUNGEN>
 
1) MOV AX, WORD PTR [VARIABLE]   ; LOW-WORD [VARIABLE] IN AX
2) MOV CL, 9               ; CL = 9
3) SHR AX, CL               ; AX = AX DIV 512
4) MOV DX, WORD PTR [VARIABLE+2]   ; HIGH-WORD [VARIABLE] IN DX
5) MOV CL, 7               ; CL = 7
6) SHL DX, CL               ; DX = DX * 128
7) ADD AX, DX                ; AX = AX + DX
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz