Assembler x64 ( pomoc s domácím úkolem)

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
Zakk
Level 3.5
Level 3.5
Příspěvky: 728
Registrován: 04 úno 2013 11:06

Re: Assembler x64 ( pomoc s domácím úkolem)

Příspěvek od Zakk »

Tak jak bych zapsal správně ten if ?
Porovnám rbx a rcx a když rbx je menší tak chci aby se provedlo " add dword ptr [rbx],1" a když není menší tak ne ( Podle toho zadání v javě).
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

Re: Assembler x64 ( pomoc s domácím úkolem)

Příspěvek od satik »

label prikaz:
hod az za ten add a ten podmineny jump otoc, aby jsi ten add kdyztak preskocil
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
Uživatelský avatar
Zakk
Level 3.5
Level 3.5
Příspěvky: 728
Registrován: 04 úno 2013 11:06

Re: Assembler x64 ( pomoc s domácím úkolem)

Příspěvek od Zakk »

Díky.
Udělal jsme to a určitě je to dobře.
Nejdřív jsme si to samotné vyzkoušle jak to funguje
mov rdx, 1
mov rsi, 2
mov rax, 1
mov rbx, 2

cmp rbx, rax
jb prikaz
call print_rdx
prikaz:

a podle toho jsme to pak zakonponoval i do to programu

nicméně mi to pořád háže při spuštění
" make: *** [Makefile:18: run] Segmentation fault (obraz paměti uložen)"
když to najede na ten řádek
" add dword ptr [rbx],1 "
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

Re: Assembler x64 ( pomoc s domácím úkolem)

Příspěvek od satik »

segfault na

Kód: Vybrat vše

add dword ptr [rbx],1
V RBX mas mit v tuhle chvili ukazatel na misto nekde v pameti, a snazis se na to misto v pameti ulozit jednicku, takze v rbx mas nejakou neplatnou adresu, kdyz to hazi segfault.
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
Uživatelský avatar
Zakk
Level 3.5
Level 3.5
Příspěvky: 728
Registrován: 04 úno 2013 11:06

Re: Assembler x64 ( pomoc s domácím úkolem)

Příspěvek od Zakk »

už vůbec nevím, co s tím

ještě jsem zkoušel místo add 1 použít inc, ale to nic nezmění
schválně jsem zkusil dát do podmínky print a zacyklí se to.. skončí to ale vypíše to strašně moc řádků.

Kód: Vybrat vše

/
/*deklarace*/ 
pole: .quad 1, 3, 3, 5, 2, 4, 4, 4, 4, 3, 2, 2, 1, 5, 5, 6

hist: .quad 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 

delka: .int 5   		        /*nějaká "náhodná" čísla"*/
pocetBinu: .int 5              /*nějaká "náhodná" čísla"*/

/*program*/
lea rax, pole[rip]	/* pointer na začátek pole pole*/
lea rbx, hist[rip]     /* pointer na začátek pole hist,*/
mov rcx, pocetBinu[rip]    /* pocetBinu do rcx  */
mov rdx, delka[rip]  /* nastaví iterátor podle délky */

cycle:
mov rbx, [rax]  /*přiřadí do rbx,hodnotu pole na pozici i (kde je pointer), prvek=pole[i] */

add rax,8	/* posun ukazatele v poli o jedno místo */

cmp rcx, rbx  /*porovnání  pocetBinu a pole[i] */
jb prikaz			/*pokud je pocetBinu menší než pole[i] přeskočí následující příkaz*/
    inc dword ptr [rbx]		/* zvětšení hist na pozici kde je pointer o 1 (hist[prvek]++) */
prikaz:     /*skok sem */
 
dec rdx         /*zmenšení iterátoru* i++(respektive v našem případě i--)*/
jnz cycle        /*skok na cyklus*/

 /*tisk ?? hist */

Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

Re: Assembler x64 ( pomoc s domácím úkolem)

Příspěvek od satik »

1.

Kód: Vybrat vše

add rax,8   /* posun ukazatele v poli o jedno místo */
tenhle kod te posune o dve mista, int (= DWORD = long) ma 4 bajty

2. vyhazel bych ty ripy, fakt si nejsem jistej, jestli tam nedelaji nejakej bordel
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pomoc při taktu
    od ondyN » » v Taktování a další úpravy PC
    2 Odpovědi
    10219 Zobrazení
    Poslední příspěvek od Dyonysos
  • Pomoc s výběrem
    od belphegor666 » » v Rady s výběrem hw a sestavením PC
    14 Odpovědi
    12169 Zobrazení
    Poslední příspěvek od belphegor666
  • Pomoc s webem
    od Tay » » v Web-tipy a vaše weby
    5 Odpovědi
    49126 Zobrazení
    Poslední příspěvek od Tay
  • Pomoc s výběrem komponentů
    od Robrt » » v Rady s výběrem hw a sestavením PC
    2 Odpovědi
    4867 Zobrazení
    Poslední příspěvek od Robrt
  • Pomoc s výběrem nového PC
    od Benzou » » v Rady s výběrem hw a sestavením PC
    6 Odpovědi
    14574 Zobrazení
    Poslední příspěvek od WinDroid

Zpět na „Programování a tvorba webu“