Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Jedno pocetnicko pitanje

[es] :: Asembler :: Jedno pocetnicko pitanje

[ Pregleda: 3619 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mr. Jack

Član broj: 39108
Poruke: 106
*.vdial.verat.net.



Profil

icon Jedno pocetnicko pitanje30.11.2004. u 20:14 - pre 236 meseci
skoro sam poceo da se bavim assemblerom pa mi je malo tesko da sve pohvatam
iz tutorijala.Jel moze neko da objasni kako se konvertuje string u int i obrnuto?

HVALA!!!
Planets devastated
Mankind's on its knees
A saviour comes from out the skies
In answer to their pleas...

M.R. J.A.C.K
 
Odgovor na temu

Mr. Jack

Član broj: 39108
Poruke: 106
*.vdial.verat.net.



Profil

icon Re: Jedno pocetnicko pitanje30.11.2004. u 21:05 - pre 236 meseci
Upravo sam otkrio funkcije dwtoa i atodw u masm32lib. Hvala u svakom slucaju
Planets devastated
Mankind's on its knees
A saviour comes from out the skies
In answer to their pleas...

M.R. J.A.C.K
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: Jedno pocetnicko pitanje30.11.2004. u 21:17 - pre 236 meseci
Meni su te emulacije C-olikih fja totalan shit.

Mislim, cemu pisati u asembleru ako ce ti 70% koda biti te ugradjene fje, invoke .if i ostali makroi...? Samo ces izgubiti vrijeme za ono sto si mogao puno lakse napraviti unutar nekog IDE-a, a ako ti treba brzina samo kriticne dijelove koda napises preko inline asm-a ili compiler intrinsics.

Ovako da si recimo sam pokusao osmisliti algoritam i implemenirati ga bilo bi puno zabavnije. Recimo imas broj, dijelis ga sa 10 i ostatak (u edx) dodavas na (char)'0' i u petlji zapisujes unazad bajt po bajt sve dok je broj!=0. U obrnutom smjeru: broj=0; oduzimas (char)'0' od stringa unaprijed i mnozis sa 10 te dodajes na broj sve dok *string != NULL.
 
Odgovor na temu

Mr. Jack

Član broj: 39108
Poruke: 106
*.vdial.verat.net.



Profil

icon Re: Jedno pocetnicko pitanje03.12.2004. u 21:12 - pre 236 meseci
Evo probao sam da napisem funkciju za pretvaranje broj -> string. Svestan sam da je ovo verovatno moglo da se napise mnogo lakse, ali ovo je sve sto sam ja do sada shvatio, pa bi mi svaka pomoc i objasnjenje u vezi koda dobro doslo.

Code:

IntToText proc buffer:LPSTR,broj:DWORD

    push edx
    push ecx
    push ebx
    
    mov eax,broj            ;broj u eax
    mov ebx,10                ;delilac u ebx
    mov ecx,buffer            ;adresa buffera u ecx
    push ecx                ;sacuvaj adresu pocetka buffera
    add ecx,sizeof buffer    ;idi na kraj buffera

petlja:
    xor edx,edx                ;obrisi edx
    div ebx                    ;podeli eax sa ebx
    add edx,48                ;dodaj ostatku 48 (30h)
    dec ecx                    ;dec ecx
    mov byte ptr [ecx],dl    ;dodaj deo broja u buffer
    cmp eax,0                ;da li smo stigli deljenjem do 0
    jne petlja                ;ako nismo nastavi petlju
    
    pop eax                    ;adresa pocetka buffera u eax
    push [ecx]                ;
    pop [eax]                ;pomeri broj na pocetak buffera
    
    pop ebx
    pop ecx
    pop edx
    ret

IntToText endp


Planets devastated
Mankind's on its knees
A saviour comes from out the skies
In answer to their pleas...

M.R. J.A.C.K
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: Jedno pocetnicko pitanje04.12.2004. u 03:20 - pre 236 meseci
E tako treba razmisljati!

S vremenom ces prestati pisati nebuloze tipa cmp eax, 0, prestati razmisljati proceduralno vec linijski..
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.87.*



+1 Profil

icon Re: Jedno pocetnicko pitanje04.12.2004. u 15:09 - pre 235 meseci
or eax, eax
jz eax = 0
jnz eax != 0

eto malo linijski =)
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: Jedno pocetnicko pitanje05.12.2004. u 19:48 - pre 235 meseci
brze je i bajt manje
Code:

mov ecx, eax
jecxz eax_je_0


:P
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: Jedno pocetnicko pitanje07.12.2004. u 12:45 - pre 235 meseci
haha ovo je dobro =) pazi kad za ovo nisam znao uopste =)))
 
Odgovor na temu

drizz
.hr

Član broj: 24843
Poruke: 25
*.cmu.carnet.hr.

Sajt: drizz.has.it


Profil

icon Re: Jedno pocetnicko pitanje07.12.2004. u 19:49 - pre 235 meseci
ali pazi:
add ecx,sizeof buffer
sizeof buffer == sizeof LPSTR == 4 ,duzina pointera a ne prava duzina buffera
 
Odgovor na temu

drizz
.hr

Član broj: 24843
Poruke: 25
*.cmu.carnet.hr.

Sajt: drizz.has.it


Profil

icon Re: Jedno pocetnicko pitanje07.12.2004. u 19:51 - pre 235 meseci
Code:
.code
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE

ALIGN 4
DwToStr proc dwValue:DWORD,pBuffer:DWORD
    mov eax,[esp+4];dwValue
    mov edx,[esp+8];pBuffer
    .if eax
        push edi
        mov ecx,0CCCCCCCDh
        push ebx
        mov edi,edx
        .repeat
            mov ebx,eax
            mul ecx
            shr edx,3
            lea eax,[edx*4+edx]
            lea eax,[eax+eax-'0']
            sub ebx,eax
            mov eax,edx
            mov [edi],bl    
            test eax,eax
            lea edi,[edi+1]
        .until zero?
        mov [edi],al
        mov edx,[esp+8+8];pBuffer
        mov eax,edi
        .repeat 
            dec edi
            mov cl,[edx]
            mov bl,[edi]
            mov [edi],cl
            mov [edx],bl
            inc edx
        .until (edx >= edi)
        pop ebx
        sub eax,[esp+8+4];pBuffer
        pop edi
        ret 2*4
    .endif    
    mov word ptr [edx],'0'
    inc eax
    ret 2*4
DwToStr endp


OPTION PROLOGUE:PROLOGUEDEF 
OPTION EPILOGUE:EPILOGUEDEF
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: Jedno pocetnicko pitanje08.12.2004. u 03:13 - pre 235 meseci
Mogao si malo komentirat kod X=)

I meni je taj sizeof odmah bio sumnjiv, pomislio sam da se radi o nekom shitu ugradjenom u MASM (ja okorjeli TASM-as :), ali kad covjek vec kaze da radi nisam se trudio ni provjeriti :) Sad mi nije jasno zasto nije provjerio kod ?!
 
Odgovor na temu

Mr. Jack

Član broj: 39108
Poruke: 106
*.vdial.verat.net.



Profil

icon Re: Jedno pocetnicko pitanje08.12.2004. u 16:27 - pre 235 meseci
Nisam znao da je to duzina pointera, ali funkcija je radila. Bilo bi lepo komentarisati drizz-ov kod posto su to za mene na spanska sela i portugalske bandere
Planets devastated
Mankind's on its knees
A saviour comes from out the skies
In answer to their pleas...

M.R. J.A.C.K
 
Odgovor na temu

drizz
.hr

Član broj: 24843
Poruke: 25
*.cmu.carnet.hr.

Sajt: drizz.has.it


Profil

icon Re: Jedno pocetnicko pitanje08.12.2004. u 16:52 - pre 235 meseci
u biti isto je sve samo sto umjesto djeljenja je mnozenje sa magic konstantom
vise procitati ovdje :
[url]http://www.agner.org/assem/pentopt.pdf[/url]
pod 18.7 je to djeljenje, naravno i sve ostalo procitati

a gle ovo :P (nije moj kod)
Code:

DwToStr proc uses edi dwValue:dword,pBuffer:dword
; Made by tE!
    mov eax,dwValue
    mov edi,pBuffer
    push 0h  ;get some additional space on stack (10 bytes min.)
    push 0h  ;'' upper dword is 0
    push eax ;'' lower dword -> 32 bit integer to convert
    fild qword ptr[esp]  ;load 64 bit integer value on TOS
    fbstp real10 ptr[esp] ; store value as 80bit BCD value
    pop ecx
    pop eax
    mov edx,ecx
    mov ebx,eax
    shr ecx,4
    shr eax,4
    and ebx,0000000Fh   ;mask nibbles
    and edx,0F0F0F0Fh   ;...
    and ecx,0F0F0F0Fh
    add edx,30303030h   ;build ascii numbers
    add ecx,30303030h   ;...
    add eax,30h
    add ebx,30h
    mov [edi+0],al;store in buffer
    mov [edi+1],bl  ;...
    mov [edi+10],ah
    mov [edi+8],cl
    mov [edi+9],dl
    mov [edi+6],ch
    mov [edi+7],dh
    bswap ecx ;endian conversion (486 processor needed)
    bswap edx ;dto.
    mov [edi+2],cl
    mov [edi+3],dl
    mov [edi+4],ch
    mov [edi+5],dh
    pop eax ;correct stack
    ret
DwToStr endp


i da:

cmp eax,0
je

je brze od

mov ecx, eax
jecxz

:P
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: Jedno pocetnicko pitanje08.12.2004. u 23:45 - pre 235 meseci
Eh, u vezano za to ima jedan kul proggy Magic Divider, star je vec nekoliko ljeta, ali dobra fora ostaje dobra fora, hehe.

jecxz dodje kao slozena instrukcija pa je zato sporija, jelte? Ali je 4 bajta manja, a svi znamo da je velicina vazna :)

Enivej, test eax, eax je brze i od or i od cmp :P
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: Jedno pocetnicko pitanje09.12.2004. u 01:07 - pre 235 meseci
da li cu ja test, or, cmp bas mi i ne znaci na Athlon 64 =>>> sabija kevu, pa nece valjda da se uspori zbog jedne instrukcije =)))))
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: Jedno pocetnicko pitanje09.12.2004. u 01:13 - pre 235 meseci
Hehe, jeli radis ista win64asm? :) Kako se pokazao onaj NX-bit u praksi, jeli stvar radi? Nemoj mi reci samo da si stavio 32-bitne windoze :)

A uostalom sto ce ti eax, kad imas r0 :)
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: Jedno pocetnicko pitanje11.12.2004. u 13:21 - pre 235 meseci
Ma de radim u 64 asm, skinuo sam i Intel i Amd developer manuel, ali mi nisšta nije jasno =) Intel kaže da ima r0-127 a Amd kaže da ima RAX RBX RCX itd... i svi 64bitni, pa ih ništa ne razumem, a nemam vremena da detljno to prostudiram... A za ovaj NX-bit ne znam nisam toliko detaljno studirao tu arhitekturu =)
A njinblonjs je svakako 32bitni, pa di da nađem 64bitni? Da li to postoji?
 
Odgovor na temu

[es] :: Asembler :: Jedno pocetnicko pitanje

[ Pregleda: 3619 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.