Zahlen->Strings



  • HAllo
    Wie kann ich es anstellen,dass Zahlen,die von einer Speicherstelle auslese
    in einen(nullterminierten) String umwandle und diesen dann in einer Messagebox ausgebe?
    Wie kann ich außerdem nicht nur auf die Festplatte sondern auch z.b. auf den RAM-Speicher oder das Diskettenlaufwerk zugreifen(möglichst als Windowsfunktion).



  • Hi.

    Gegenfrage: Wo ist der Zusammenhang mit Assembler?



  • Nobuo T schrieb:

    Hi.

    Gegenfrage: Wo ist der Zusammenhang mit Assembler?

    Dieses Programm soll in Assembler geschrieben werden!!!



  • Hallo,

    wenn du ein win32 Programm schreibst (MASM32, TASM32 oder so) benutze die
    Funktion "wsprintf()"

    MASM32
    .data
    format DB "Mein Zahl ist: 0x%08lX",0
    strg DB 128 DUP(0)

    .code
    invoke wsprintf, addr strg, addr format, 12345

    TASM32 kennt Derektive "addr" nicht, benutze "offset"

    wenn du aber win16 Code erzeugen willst, dann wird es nicht so einfach:
    http://www.google.de/search?hl=de&q=assembler+zahl+in+zeichenkette+umwandeln&meta=lr%3Dlang_de



  • Statt mit dem invoke-Makro kannst Du auch die Parameter selber uebergeben. Die Aufrufskonvention haengt von den verwendeten Import-Bibliotheken ab, und ob Du 16- oder 32-Bit-Code erzeugst.

    Sollte auch in der Dokumentation zu Deinem Assembler stehen, wie Systemroutinen aufgerufen werden muessen.

    wsprintf() bzw. wsprintfA() und MessageBox() bzw. MessageBoxA() befinden sich in USER32.DLL (auf 32-Bit Windows) oder USER.DLL (auf 16-Bit Windows), und die Import-Library heisst dann entsprechend "user32.lib" bzw. "user.lib".

    Bei der Pascal-Calling-Konvention, die auf 16-Bit-Windows verwendet wird, werden die Parameter von links nach rechts auf den Stapel gelegt, und die aufgerufene Funktion entfernt die Parameter selbst vom Stapel.

    Die StdCall-Konvention, die bei 32-Bit-Windows verwendet wird, ist in der Windows Platform API Dokumentation dokumentiert.

    Die Import-Library, die bei Deinem Assembler dabei ist, kann aber den Aufruf entsprechend konvertieren. Deshalb sollte in der Dokumentation zum Assembler stehen, wie die mitgelieferten Import-Bibliotheken ihre Parameter erwarten.



  • Vielen Tank für die Tipps
    Werde es gleich ausprobieren



  • als Ergänzung: masm32 liegen zahlreiche libs bei, die solche Umwandlungen in der Regel schneller erledigen als die "große" wsprintf funktion (die sicherlich auch ihre berechtigung hat). Z.B

    atodw Convert ascii number to DWORD
    htodw Convert hex string to DWORD
    dwtoa Convert DWORD to ascii string
    dw2hex Convert DWORD to hex string
    dw2ah Convert DWORD to ascii hex
    udw2str Convert unsigned DWORD to string
    ustr2dw Convert string to unsigned DWORD
    ltoa Convert signed DWORD to ascii string
    atol Convert ascii string to signed DWORD

    näheres siehe die Lib dokumentation des MASM32 Packetes


Anmelden zum Antworten