Witam serdecznie,
mam napisać program w asemblerze, który zamienia podaną liczbę np z dziesiętnej na szesnastkową itp... z 10 na 9...
Proszę o wskazówki bo dopiero zaczynam i kompletnie nie wiem jak się do tego zabrać (Pod system Linux)
Z gory dziękuję i pozdrawiam
0
0
Było poszukaj
0
asembler napisał(a)
(Pod system Linux)
To ASM zależy od SO? :-O
0
właśnie, że szukałem tutaj i w google i nic chyba że nie umiem szukać :(
To moje początki na tym forum więc proszę o wsparcie...
0
somekind napisał(a)
asembler napisał(a)
(Pod system Linux)
To ASM zależy od SO? :-O
Tak. Inne funkcje systemowe (ba - inny sposób wołania!) ma przecież Linux (przerwanie 80h), Windows (funkcje importowane z dllek) czy inny OS...
0
Docelowy system operacyjny nie ma tu nic do gadania, przecież tak prosty algorytm nie potrzebuje zewnętrznych funkcji:
cyfry: db "0123456789ABCDEF"
dec2hex:
mov eax,[esp+4] ; liczba
xchg esi,[esp+8] ; bufor
mov ecx,8
sub edx,edx
.go:
rol eax,4
mov dl,al
and dl,15
mov dl,[cyfry+edx]
mov [esi],dl
add esi,1
loop .go
xchg esi,[esp+8]
ret 8
Przykład użycia:
main:
%define liczba 3735943886
%define wynik 0xDEADFACE
; miejsce na wynik
sub esp, 12
; wywołanie funkcji
push esp
push liczba
call dec2hex;, liczba, esp
; zakończ wynik zerem
mov byte[esp+8],0
; print
cinvoke puts, esp
add esp,12
[cut]