Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Assembler] Zahl aus Register in String umwandeln (https://www.delphipraxis.net/101712-%5Bassembler%5D-zahl-aus-register-string-umwandeln.html)

Zacherl 17. Okt 2007 19:28


[Assembler] Zahl aus Register in String umwandeln
 
Hey,

wie kann ich mit MASM32 eine Zahl aus einem Register z.b. eax in einen string umwandeln, den ich dann beispielsweise mit WriteConsole ausgeben kann?

Gruß

Win32.API 17. Okt 2007 19:35

Re: [Assembler] Zahl aus Register in String umwandeln
 
Guck dir mal den Zusammenhang von den Zahlen und ihrem Ascii-Code an.

Mark90 17. Okt 2007 19:46

Re: [Assembler] Zahl aus Register in String umwandeln
 
hi,

bei delpih würde ich das so machen. wenn string schon im reg ist. außerdem

Delphi-Quellcode:
integer eax_reg_int;
String rsesult;

asm
  mov eax_reg_int, eax
end;

rsesult := IntToStr(eax_reg_int);
vielleicht hilft dirs

Zacherl 17. Okt 2007 19:54

Re: [Assembler] Zahl aus Register in String umwandeln
 
@Mark90: Ja IntToStr gibts leider nur in Delphi. Ich schreibe grade ein natives Assembler Programm in MASM32.
@Win32.API: Mh hast du eventuell noch einen Tipp? Denn wenn ich den ASCII Code der Zahl ermittele muss ich ja Zeichenweise vorgehen. Wie kann ich die Zahl im Register in ihre Einzelteile zerlegen?

Win32.API 17. Okt 2007 19:59

Re: [Assembler] Zahl aus Register in String umwandeln
 
MOD/DIV sind deine freunde

(iVal mod 10)
(iVal div 10)

Progman 17. Okt 2007 20:12

Re: [Assembler] Zahl aus Register in String umwandeln
 
hm, ich glaub das ist gar nicht so schwer, jeder Disassembler macht das, und zeigt Registerinhalte als Text an, nur mir fällt das jetzt auch nicht ein, ist zu lange her, dass ich ASM gemacht habe. Zacherl, durchforste doch mal Beispielcodes, die dem MASM32 beiliegen, ob da nicht was dabei ist?

Muetze1 17. Okt 2007 20:29

Re: [Assembler] Zahl aus Register in String umwandeln
 
Zitat:

Zitat von Win32.API
MOD/DIV sind deine freunde

(iVal mod 10)
(iVal div 10)

Das schöne dabei: die DIV Instruktion rechnet den Modulo Wert direkt mit aus...

Win32.API 17. Okt 2007 20:36

Re: [Assembler] Zahl aus Register in String umwandeln
 
Da hast du natuerlich recht, hatte es gerade nur theroretisch durchdacht und nicht auf asm uebertragen :cheers:

Progman 17. Okt 2007 20:49

Re: [Assembler] Zahl aus Register in String umwandeln
 
Diese Codeschnipsel gibt schon mal eine Zahl aus:
...
mov bytecount, rv(filesize,ADDR fname) ; use "filesize" procedure
print "Size of WINDOWS.INC = "
print str$(bytecount)," bytes",13,10 ; display the results
...

Ist das die Richtung, die du suchst?

Zacherl 17. Okt 2007 22:21

Re: [Assembler] Zahl aus Register in String umwandeln
 
Ah sowas wie das str$() Makro hatte ich gesucht :) Vielen Dank. Erspart mir das selbst implementieren in diesem Falle ;)

Progman 17. Okt 2007 22:30

Re: [Assembler] Zahl aus Register in String umwandeln
 
Ich hab mir extra hier den MASM32 V9 geholt, da sind jede Menge Code-Beispiele mit dabei. Die hab ich mal durchgeguckt. Wollte schon länger mal wieder anfangen, mich mit ASM zu beschäftigen :)

Zacherl 17. Okt 2007 22:33

Re: [Assembler] Zahl aus Register in String umwandeln
 
Ja da habe ich ihn auch her :D Habe nun angefangen paar von meinen alten Consolen Programmen oder Programmen ohne Oberfläche nach ASM zu portieren.
Klappt schon recht gut dafür, dass ich mich erst seit knapp 2 Wochen mit Assembler beschäftige, aber bei manchen Sachen stehe ich dann doch auf dem Schlauch.

ErazerZ 17. Okt 2007 22:54

Re: [Assembler] Zahl aus Register in String umwandeln
 
code by shield
Delphi-Quellcode:
.data
    zahl1       dd 123456789

.data? 
    szMeinStr  db '', 0

.code

start:
    mov eax, zahl1
    mov esi, offset szMeinStr
    call _dword2decstr
   
    push MB_OK
    push offset szMeinStr
    push offset szMeinStr
    push 0
    call MessageBox

    push 0
    call ExitProcess
   

_dword2decstr proc           ; by shield
   push   edx
   push   ebx
   push   10
   pop   ecx
   push   10
   pop   ebx
_1:
   sub   edx,edx
   div   ebx
   add   dl,30h
   mov   byte ptr[esi+ecx-1],dl
   dec   ecx
   jnz   _1
   pop   ebx
   pop   edx
   ret
_dword2decstr endp

end start

Zacherl 18. Okt 2007 00:05

Re: [Assembler] Zahl aus Register in String umwandeln
 
Das ist natürlich noch besser, da es weniger Overhead mitbringt =) Danke dir :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 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