Thread View: pl.comp.lang.asm
11 messages
11 total messages
Started by Johnny
Wed, 14 Jun 2006 13:52
Wynik w konsoli
Author: Johnny
Date: Wed, 14 Jun 2006 13:52
Date: Wed, 14 Jun 2006 13:52
5 lines
870 bytes
870 bytes
W jaki sposób mogę wyświetlić w konsoli wynik operacji, który mieści się np. w ax? -- Johnny
Re: Wynik w konsoli
Author: Stachu 'Dozzie' K.
Date: Wed, 14 Jun 2006 13:56
Date: Wed, 14 Jun 2006 13:56
13 lines
1336 bytes
1336 bytes
On 14.06.2006, Johnny <johnny_bez_spamu_@klub.chip.pl> wrote: > W jaki sposób mogę wyświetlić w konsoli wynik operacji, który mieści się > np. w ax? Możesz użyć printf, tylko będziesz musiał zlinkować program z libc. Możesz też użyć bezpośrednio syscalla 4 (int 0x80), ale wtedy będziesz musiał w pętli po jednej cyfrze dziesiętnej zapisywać do bufora (umieszczonego na przykład na stosie), a potem ten bufor wypisać w odwrotnej kolejności. -- Feel free to correct my English Stanislaw Klekot
Re: Wynik w konsoli
Author: Wiktor S.
Date: Wed, 14 Jun 2006 22:06
Date: Wed, 14 Jun 2006 22:06
25 lines
1347 bytes
1347 bytes
> W jaki sposób mogę wyświetlić w konsoli wynik > operacji, który mieści się np. w ax? Zamienić na ciąg znaków, w systemie dziesiętnym albo szesnastkowym. Wyświetlanie liczby z al (czyli 8-bitowej) w postaci szesnastkowej: ; składnia NASM-a xor ebx,ebx mov bl,al and bl,11110000b shr bl,4 mov ah,[.heksy+ebx] call writechar mov bl,al and bl,00001111b mov ah,[.heksy+ebx] call writechar .heksy db '0123456789ABCDEF' -- Azarien
Re: Wynik w konsoli
Author: Bernard
Date: Wed, 14 Jun 2006 22:53
Date: Wed, 14 Jun 2006 22:53
38 lines
1622 bytes
1622 bytes
Wiktor S. wrote:
>> W jaki sposób mogę wyświetlić w konsoli wynik
>> operacji, który mieści się np. w ax?
>
> Zamienić na ciąg znaków, w systemie dziesiętnym albo szesnastkowym.
>
> Wyświetlanie liczby z al (czyli 8-bitowej) w postaci szesnastkowej:
>
> ; składnia NASM-a
>
> xor ebx,ebx
> mov bl,al
> and bl,11110000b
> shr bl,4
> mov ah,[.heksy+ebx]
> call writechar
> mov bl,al
> and bl,00001111b
> mov ah,[.heksy+ebx]
> call writechar
>
> .heksy db '0123456789ABCDEF'
Eee, strasznie długie i skomplikowane...
Ja wolę:
aam 16
xchg al, ah
call printhex
mov al, ah
printhex:
add al, 90h
daa
adc al, 40h
daa
jmp putchar
; putchar jest procedurą, która wypisuje znak ASCII z al
Re: Wynik w konsoli
Author: Wiktor S.
Date: Thu, 15 Jun 2006 11:38
Date: Thu, 15 Jun 2006 11:38
36 lines
1620 bytes
1620 bytes
>> xor ebx,ebx >> mov bl,al >> and bl,11110000b >> shr bl,4 >> mov ah,[.heksy+ebx] >> call writechar >> mov bl,al >> and bl,00001111b >> mov ah,[.heksy+ebx] >> call writechar >> >> .heksy db '0123456789ABCDEF' > > Eee, strasznie długie i skomplikowane... > Ja wolę: > > aam 16 > xchg al, ah > call printhex > mov al, ah > printhex: > add al, 90h > daa > adc al, 40h > daa > jmp putchar > > ; putchar jest procedurą, która wypisuje znak ASCII z al ezoteryczne instrukcje, magiczne wartości i skoki, nad którymi trzeba się kilka minut zastanawiać - ktoś tu mówił o skomplikowaniu? :-) -- Azarien
Re: Wynik w konsoli
Author: Bernard
Date: Fri, 16 Jun 2006 23:28
Date: Fri, 16 Jun 2006 23:28
39 lines
1934 bytes
1934 bytes
Wiktor S. wrote: >>> xor ebx,ebx >>> mov bl,al >>> and bl,11110000b >>> shr bl,4 >>> mov ah,[.heksy+ebx] >>> call writechar >>> mov bl,al >>> and bl,00001111b >>> mov ah,[.heksy+ebx] >>> call writechar >>> >>> .heksy db '0123456789ABCDEF' >> >> Eee, strasznie długie i skomplikowane... >> Ja wolę: >> >> aam 16 >> xchg al, ah >> call printhex >> mov al, ah >> printhex: >> add al, 90h >> daa >> adc al, 40h >> daa >> jmp putchar >> >> ; putchar jest procedurą, która wypisuje znak ASCII z al > > ezoteryczne instrukcje, magiczne wartości i skoki, nad którymi trzeba > się kilka minut zastanawiać - ktoś tu mówił o skomplikowaniu? :-) Policz instrukcje, zajętość rejestrów i pamięci oraz odwołania do pamięci (w tym operacje stosowe) w obu wariantach. Tak "na oko" niemal wszystko wychodzi ok. 2 razy lepiej w mojej wersji. Aha, zapomniałeś dopisać "ret" na końcu ;) W końcu na tym właśnie polega programowanie w asemblerze, nie?
Re: Wynik w konsoli
Author: Wiktor S.
Date: Sat, 17 Jun 2006 11:51
Date: Sat, 17 Jun 2006 11:51
16 lines
1664 bytes
1664 bytes
>> ezoteryczne instrukcje, magiczne wartości i skoki, nad którymi trzeba >> się kilka minut zastanawiać - ktoś tu mówił o skomplikowaniu? :-) > Policz instrukcje, zajętość rejestrów i pamięci oraz odwołania do > pamięci (w tym operacje stosowe) w obu wariantach. Uhum. Niestety, jak czytam dokumentację wychodzi, że aam i daa nie są dozwolone w trybie 64-bitowym. Dziwne, po co miano by usuwać instrukcje? > Tak "na oko" niemal wszystko wychodzi ok. 2 razy lepiej w mojej > wersji. Aha, zapomniałeś dopisać "ret" na końcu ;) Ach, przepraszam najmocniej, był to wycięty fragment większej procedury. -- Azarien
Re: Wynik w konsoli
Author: Bernard
Date: Sat, 17 Jun 2006 14:25
Date: Sat, 17 Jun 2006 14:25
22 lines
2184 bytes
2184 bytes
Wiktor S. wrote: >>> ezoteryczne instrukcje, magiczne wartości i skoki, nad którymi trzeba >>> się kilka minut zastanawiać - ktoś tu mówił o skomplikowaniu? :-) > >> Policz instrukcje, zajętość rejestrów i pamięci oraz odwołania do >> pamięci (w tym operacje stosowe) w obu wariantach. > > Uhum. Niestety, jak czytam dokumentację wychodzi, że aam i daa nie są > dozwolone w trybie 64-bitowym. Dziwne, po co miano by usuwać instrukcje? Nie "nie są dozwolone" a "zostały usunięte" (więc ich po prostu nie ma). żaden kompilator nie użyje takich instrukcji - były one przeznaczone do ręcznego pisania kodu w asemblerze, a ponieważ obecnie prawie się tego nie robi - nie ma realnej potrzeby ich zachowywania w nowych procesorach. Pozy tym AAM jako instrukcja dzielenia jest paskudnie wolna (ale i tak zwykle szybsza niż dostęp do tablicy w pamięci, zresztą nie do tego służy). AAM da się zastąpić przez SHR tak, że przybędzie tylko jedna instrukcja albo i żadna. Gorzej z DAA, które akurat w tym zadaniu spisuje się bardzo wdzięcznie. Właściwie to już mam pomysł na nową asemblerową łamigłówkę - to samo, tylko bez DAA i bez skoków. Powinno dać się zrobić.
Re: Wynik w konsoli
Author: Wiktor S.
Date: Sun, 18 Jun 2006 23:17
Date: Sun, 18 Jun 2006 23:17
17 lines
1742 bytes
1742 bytes
>> Uhum. Niestety, jak czytam dokumentację wychodzi, że aam i daa nie są >> dozwolone w trybie 64-bitowym. Dziwne, po co miano by usuwać >> instrukcje? > > Nie "nie są dozwolone" a "zostały usunięte" Na jedno wychodzi: nie działają. > (więc ich po prostu nie ma). żaden kompilator nie użyje > takich instrukcji - były one przeznaczone do ręcznego pisania > kodu w asemblerze, a ponieważ obecnie prawie się tego nie robi > - nie ma realnej potrzeby ich zachowywania w nowych procesorach. W procesorze i tak muszą być, gdyż w trybie rzeczywistym i chronionym są. -- Azarien
Re: Wynik w konsoli
Author: Bernard
Date: Mon, 19 Jun 2006 18:08
Date: Mon, 19 Jun 2006 18:08
22 lines
1971 bytes
1971 bytes
Wiktor S. wrote: >>> Uhum. Niestety, jak czytam dokumentację wychodzi, że aam i daa nie są >>> dozwolone w trybie 64-bitowym. Dziwne, po co miano by usuwać >>> instrukcje? >> >> Nie "nie są dozwolone" a "zostały usunięte" > > Na jedno wychodzi: nie działają. > >> (więc ich po prostu nie ma). żaden kompilator nie użyje >> takich instrukcji - były one przeznaczone do ręcznego pisania >> kodu w asemblerze, a ponieważ obecnie prawie się tego nie robi >> - nie ma realnej potrzeby ich zachowywania w nowych procesorach. > > W procesorze i tak muszą być, gdyż w trybie rzeczywistym i chronionym są. Chodziło o zwolnienie kodów operacyjnych na przyszłość. Narazie kody zostały zwolnione i leżą odłogiem. Mam już wersję 32-/64-bitową bez instrukcji DAA - zamiana tetrady na ASCII bez użycia skoków zajmuje nadal 4 instrukcje, ale wymaga użycia drugiego rejestru (np. edx), no i te instrukcje mają o parę bajtów więcej.
Re: Wynik w konsoli
Author: Radoslaw Korzeniewski
Date: Thu, 22 Jun 2006 09:45
Date: Thu, 22 Jun 2006 09:45
8 lines
1211 bytes
1211 bytes
Wiktor S. napisał(a): > ezoteryczne instrukcje, magiczne wartości i skoki, nad którymi trzeba > się kilka minut zastanawiać - ktoś tu mówił o skomplikowaniu? :-) Przecież to klasyka gatunku, to się czyta jak poezję :) pozdr Radek
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads