AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [ASM x86] Absolutwert eines vorzeichenbehafteten Integers
Thema durchsuchen
Ansicht
Themen-Optionen

[ASM x86] Absolutwert eines vorzeichenbehafteten Integers

Ein Thema von BUG · begonnen am 20. Apr 2011 · letzter Beitrag vom 20. Apr 2011
Antwort Antwort
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#1

[ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 16:21
Bekommt man in Assembler irgendwie mit einer Instruktion den Absolutwert eines vorzeichenbehafteten Integers in einem Register?
Oder muss ich das zu Fuß machen?
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 16:24
Das höchstwertige Bit ausblenden
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: [ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 16:32
Kuckst du: http://www.strchr.com/optimized_abs_function
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: [ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 16:33
nicht ganz, wobei dieses Bit schon richtig ist, aber die negativen Werte sind noch um 1 verschoben. ( die 0 braucht man ja nicht doppelt, da -0 = +0 )

wenn X negativ,
dann X negieren oder X := X xor -1 {$FFFFFFFF} .


oder so wie Delphi es delphi macht
Delphi-Quellcode:
//mov EAX, X
cdq
xor EAX, EDX { wenn X negativ, dann ist EDX = -1,            }
              { ansonsten ist es 0 und es würde nix passieren }
sub EAX, EDX { wenn X negativ, dann -(-1) aka +1, ansonsten -0 aka nichts }
//mov X, EAX
Da sollte man nur beachten, daß man hierfür ein freies EDX benötigt und der Wert in EAX liegen muß,

ansontens kommt man wohl nicht um die ASM-Variante des IF-Konstrukts nicht herum.

[add]
das vergessene SUB eingefügt
$2B or not $2B

Geändert von himitsu (20. Apr 2011 um 17:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: [ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 16:34
Das höchstwertige Bit ausblenden
.. ist Schwachsinn, da Integer-Zahlen 2k-codiert sind.

Was mir momentan einfällt:
Delphi-Quellcode:
function AbsAsm(A: Integer): Integer;
asm
  cmp eax, 0
  jge @@ende
  neg eax
  @@ende:
end;
Kann aber gut sein, dass es da noch was optimierteres gibt.

@himitsu: Dein Code funktioniert bei mir aber auch nicht richtig...
Hab mal nachgeguckt.. Hast bei deinem Code was vergessen:
Delphi-Quellcode:
function AbsAsm2(A: Integer): Integer;
asm
  cdq
  xor eax, edx
  sub eax, edx
end;
So gehts auch!
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (20. Apr 2011 um 16:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: [ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 16:40
Das höchstwertige Bit ausblenden
Dann hab ich das Zweierkompliment des Wertes den ich haben will in den unteren Bits.

Mhm, dann wird es wohl nicht in einer Instruktion gehen

Danke für die Vorschläge.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: [ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 16:53
Mhm, dann wird es wohl nicht in einer Instruktion gehen
Kommt drauf an, was für dich eine Instruktion ist

call ABS
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#8

AW: [ASM x86] Absolutwert eines vorzeichenbehafteten Integers

  Alt 20. Apr 2011, 17:39
Code:
cdq
add eax, edx
xor eax, edx
Das lässt sich gut erklären, falls die Tutoren nachfragen
Werde ich nehmen, edx ist in dem Moment bei mir eh frei.

Auf die Idee cdq dafür zu missbrauchen, wäre ich wohl ewig nicht gekommen. Werde ich mir merken.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (20. Apr 2011 um 18:40 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz