[NASM} wypisanie EAXa
piotrek - 11-04-2007 00:03
[NASM} wypisanie EAXa
Hej,
jak w linuxowym NASMIe najprościej wypisać szestnastkowo tego co siedzi w EAXie? Jak ma ktoś jakiś szybki pomysł, to bede wdzięczny za źródło + komentarz,
pozdrawiam, piotrek
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Wiktor S. - 11-04-2007 00:03
> jak w linuxowym NASMIe najprościej wypisać > szestnastkowo tego co siedzi w EAXie? > Jak ma ktoś jakiś szybki pomysł, to bede > wdzięczny za źródło + komentarz,
konwersja liczby - wersja dla 16-bitów. dla 32 bitów odpowiednio musiałbyś przerobić...
dana w AX, zapis czterech cyfr do [ESI].
----------------------------- wrd_asc: pusha mov BX,0F000h mov DL,12 mov ECX,4 .cccc: push ECX push AX and AX,BX mov CL,DL shr AX,CL call bin_asc mov [ESI],AL inc ESI pop AX shr BX,4 sub DL,4 pop ECX loop .cccc popa ret
bin_asc: cmp AL,9 ja .lettr add AL,30h jmp .ok .lettr: add AL,37h .ok: ret
-----------------------------
PS. przekierowuję wątek na pl.comp.lang.asm
-- Azarien
Adam Wysocki - 12-04-2007 00:09
In pl.comp.programming Wiktor S. <ANTISPAM@wswiktor.at.poczta.dot.fm> wrote:
> konwersja liczby - wersja dla 16-bitów.
Po co, skoro w bibliotece standardowej jest funkcja printf? :)
-- Adam Wysocki * Warszawa * http://www.chmurka.net/ * GSM: 514 710 213 FidoNet: 2:480/138, SWL: SP5-250730, QTH: KO02MF, CB: 19 Śródmieście 14:50 <szumi-> musialem zapoznac mica z gophim, ale sie nie polubili -> Zostało zaledwie 1351 dni do końca kadencji Lecha Kaczyńskiego <-
piotrek - 12-04-2007 00:09
> dana w AX, zapis czterech cyfr do [ESI]. > > ----------------------------- > wrd_asc: > * * * *pusha > * * * *mov BX,0F000h Dzieki wielkie! Kurcze, a jak to przerobic na 32 bity? Bo z ASM jestem lame totalny, a potrzebuje cos takiego zrobic.
pozdrawiam, piotrek
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
guest - 12-04-2007 00:09
> > dana w AX, zapis czterech cyfr do [ESI]. > > > > ----------------------------- > > wrd_asc: > > * * * *pusha > > * * * *mov BX,0F000h > Dzieki wielkie! Kurcze, a jak to przerobic na 32 bity? Bo z ASM jestem lame > totalny, a potrzebuje cos takiego zrobic.
dla tego dostales 16 bit zeby sie troche wysilic czemu ktos mial by za ciebie "odrabiac zadanie" ?
piotrek - 12-04-2007 00:09
> > > dana w AX, zapis czterech cyfr do [ESI]. > > > > > > ----------------------------- > > > wrd_asc: > > > ** * * *pusha > > > ** * * *mov BX,0F000h > > Dzieki wielkie! Kurcze, a jak to przerobic na 32 bity? Bo z ASM jestem lame > > totalny, a potrzebuje cos takiego zrobic. > > dla tego dostales 16 bit zeby sie troche wysilic > czemu ktos mial by za ciebie "odrabiac zadanie" ? Tak sie sklada ze to nie jest moje zadanie, i assemblera znam podstawowo i nie mam tez takiego przedmiotu na studiach poki co, zeby nie bylo,
pozdrawiam, piotrek
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Bernard - 12-04-2007 00:09
Wiktor S. wrote: >> jak w linuxowym NASMIe najprościej wypisać >> szestnastkowo tego co siedzi w EAXie? >> Jak ma ktoś jakiś szybki pomysł, to bede >> wdzięczny za źródło + komentarz, > > konwersja liczby - wersja dla 16-bitów. dla 32 bitów odpowiednio > musiałbyś przerobić... > > dana w AX, zapis czterech cyfr do [ESI].
Jeśli miał to być przykład jak nie robić konwersji na ASCII HEX, to naprawdę jest rewelacyjny. Uśmiałem się jak norka.
Wiktor S. - 12-04-2007 00:09
>> dana w AX, zapis czterech cyfr do [ESI]. > > Jeśli miał to być przykład jak nie robić konwersji na ASCII HEX, to > naprawdę jest rewelacyjny. Uśmiałem się jak norka.
....ale dziala! ;-)
z reklamacja do mojego wykladowcy, on to tak wymyslil...
-- Azarien
Wiktor S. - 13-04-2007 00:04
> Dzieki wielkie! Kurcze, a jak to przerobic na 32 bity? Bo z ASM > jestem lame totalny, a potrzebuje cos takiego zrobic.
wyjątkowo dzień dobroci ;-)
wrd_asc32: pusha mov EBX,0F0000000h mov DL,28 mov ECX,8 .cccc: push ECX push EAX and EAX,EBX mov CL,DL shr EAX,CL call bin_asc mov [ESI],AL inc ESI pop EAX shr EBX,4 sub DL,4 pop ECX loop .cccc popa ret
-- Azarien
Bernard - 13-04-2007 00:04
Wiktor S. wrote: >>> dana w AX, zapis czterech cyfr do [ESI]. >> >> Jeśli miał to być przykład jak nie robić konwersji na ASCII HEX, to >> naprawdę jest rewelacyjny. Uśmiałem się jak norka. > > > ...ale dziala! ;-) > > z reklamacja do mojego wykladowcy, on to tak wymyslil...
Hmmmm... zmień wykładowcę, bo to, co pokazałeś, to jest przykład ilustrujący jak nie należy programować. Zaczynając od środka - gdyby na początku procedury wypisywania cyfry umieścić and ax, 0fh, to żonglerka przesuwaną maską w rejestrze BX i wewnętrzne użycie CL stają się zbędne - jesteśmy o jeden rejestr i dwie instrukcje do przodu. Samą procedurę wypisywanie cyfry daje się zapisać z jednym skokiem lub bez żadnego skoku - 4 instrukcje i ret.
Wiktor S. - 13-04-2007 00:21
>>>> dana w AX, zapis czterech cyfr do [ESI].
>>> Jeśli miał to być przykład jak nie robić konwersji na ASCII HEX, to >>> naprawdę jest rewelacyjny. Uśmiałem się jak norka.
>> ...ale dziala! ;-)
>> z reklamacja do mojego wykladowcy, on to tak wymyslil...
> Hmmmm... zmień wykładowcę, bo to, co pokazałeś, to jest przykład > ilustrujący jak nie należy programować. Zaczynając od środka - gdyby > na początku procedury wypisywania cyfry umieścić and ax, 0fh, to > żonglerka przesuwaną maską w rejestrze BX i wewnętrzne użycie CL > stają się zbędne - jesteśmy o jeden rejestr i dwie instrukcje do > przodu.
Aa. Bo pierwotnie było tylko bin_asc - jedna cyfra, później ujęto ją w pętlę.
> Samą procedurę wypisywanie cyfry daje się zapisać z jednym > skokiem lub bez żadnego skoku - 4 instrukcje i ret.
write_hex_32: push edx push eax push ecx push esi mov edx,eax mov ecx,8 .cccc: rol edx,4 mov al,dl and al,0Fh cmp al,9 jna .dalej add al,7 .dalej: add al,30h mov [esi],al inc esi loop .cccc pop esi pop ecx pop eax pop edx ret
przy okazji, lepiej dawać pusha/popa, czy takie litanie? ;-)
-- Azarien
Bogdan (bogdro) - 14-04-2007 00:08
Wiktor S. napisał(a): [...] > przy okazji, lepiej dawać pusha/popa, czy takie litanie? ;-) > >
Zależy, co oznacza "lepiej". Jak mniej pisania i mniejszy rozmiar kodu, to lepiej pusha/popa. A jeśli chodzi o wydajność, to moim skromnym zdaniem: z tych dwóch to "litanie", bo pusha/popa (chyba) nie za szybkie są (o efektach ubocznych nie wspominając). Ale podobno rekordy bije ... MOV:
sub esp, 4*4 mov [esp+12], eax mov [esp+8], ebx mov [esp+4], ecx mov [esp], edx
I z resztą trudno się dziwić. Każde PUSH zależy od ESP, więc kilka takich z rzędu powoduje pojawianie się zależności między każdymi 2 sąsiednimi instrukcjami. W przykładzie powyżej mamy tylko zależność instrukcji drugiej od pierwszej.
P.S. Sorki za ewentualny podwójny post, u mnie poprzedniej próby nie widać. Wszystko przez adminów news.gazeta.pl ;)
-- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Matuzalem - 14-04-2007 00:15
On 11 Kwi, 23:56, "Wiktor S." <ANTIS...@wswiktor.AT.poczta.DOT.fm> wrote: > >> dana w AX, zapis czterech cyfr do [ESI]. > > > Jeśli miał to być przykład jak nie robić konwersji na ASCII HEX, to > > naprawdę jest rewelacyjny. Uśmiałem się jak norka. > > ...ale dziala! ;-) > > z reklamacja do mojego wykladowcy, on to tak wymyslil... > > -- > Azarien
Witam
Nie tylko zmień wykładowce, ale i wykłady ba uczelnie... to, ten potworek wrrr straszne ;]
Pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Jak wypisać
Co oznacza =?ISO-8859-2?Q?skr=F3t_UPSL=3F?=
remote firebird
zakup CS2 czy czekanie na CS3
blad sql
dlaczego
automatyzowanie [automate i batch] w photoshopie
SQL Server 2000 - problem z zasobami.
M SQL 2005 - kurs online poszukiwany
[MSSQL 2000] konwersja typów - czy potrzebna?
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|