Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Mi-au disparut amigdalitele ?

Exista vreun plan de terorizare p...

Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone
 Monede JO 2024

Suprasolicitare sistem electric

CIV auto import

Mutare in MOZAMBIC - pareri, expe...
 Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...

Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...
 Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...

Kanal D va difuza serialul “...

Upgrade xiaomi mi11
 

Assembler

- - - - -
  • Please log in to reply
19 replies to this topic

#1
raspberry

raspberry

    Junior Member

  • Grup: Junior Members
  • Posts: 38
  • Înscris: 13.05.2016
Salutare.
Sunt cam afon la assembler si trebuie sa fac un proiect in C++ si altauri de el trebuie sa fie si un cod echivalent in assembler.
Va roog sa puna cineva codul care sa adune 2 numere si sa le afiseze in fereastra de dos. Compilatorul folosit este Turbo assembler , am reusit sa adun 2 numere dar cand vreau sa afisez , imi afiseaza niste simboluri.

#2
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,603
  • Înscris: 30.07.2003
Scrie aplicatia in C apoi genereaza ASM-ul pt. inspiratie.

#3
raspberry

raspberry

    Junior Member

  • Grup: Junior Members
  • Posts: 38
  • Înscris: 13.05.2016

View Postneagu_laurentiu, on 29 mai 2016 - 13:32, said:

Scrie aplicatia in C apoi genereaza ASM-ul pt. inspiratie.

Am facut asta .. M-am ingrozit.

#4
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,603
  • Înscris: 30.07.2003
Pai nu te uita la tot codul ci doar la partea care te intereseaza. Pe de alta parte, asta-i ASM-ul.

#5
suiren

suiren

    Junior Member

  • Grup: Members
  • Posts: 48
  • Înscris: 21.01.2013
E f. simplu sa afisezi ceva in MS-DOS. MS-DOS defineste un interrupt care are mai multe functii, printre care si cea de a afisa ceva. Daca nu ma insel este vorba de int 21h. Cauta pe google, sigur o sa gasesti.

Mai problematica decat afisarea o sa fie conversia numarului in text, dar nu e dificil.

#6
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004

View Postraspberry, on 29 mai 2016 - 12:26, said:

Salutare.
Sunt cam afon la assembler si trebuie sa fac un proiect in C++ si altauri de el trebuie sa fie si un cod echivalent in assembler.
Va roog sa puna cineva codul care sa adune 2 numere si sa le afiseze in fereastra de dos. Compilatorul folosit este Turbo assembler , am reusit sa adun 2 numere dar cand vreau sa afisez , imi afiseaza niste simboluri.
Assembler, DOS, Turbo assembler, imi amintesc de chestiile astea, era prin 1993. Spune-i idiotului ca sintem in 2016.

#7
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,603
  • Înscris: 30.07.2003
Probabil s-a preferat API-ul MS-DOS cu intreruperi pt. intelegerea unor aspecte fundamentale din arhitectura, nu acest API in sine avand importanta, el fiind doar un instrument didactic. Cert e ca poti invata ASM facand apel si la un API actual dar unele aspecte nu le mai controlezi ca altadata, informatii necesare in cazul proiectarii "de la zero". Asta daca nu cumva e o confuzie a initiatorului intre fereastra cu mediul pe 16-bit sau consola actuala !

Edited by neagu_laurentiu, 30 May 2016 - 08:47.


#8
student_cti

student_cti

    Junior Member

  • Grup: Members
  • Posts: 120
  • Înscris: 02.02.2015
Confirm, eu am facut o materie similara acum 2 ani, si tot in MS-DOS am lucrat. Mi s-a parut o idee proasta, e foarte greu de interactionat cu emulatoarele dintr-un mediu modern.

#9
suiren

suiren

    Junior Member

  • Grup: Members
  • Posts: 48
  • Înscris: 21.01.2013

View Poststudent_cti, on 06 iunie 2016 - 10:26, said:

Confirm, eu am facut o materie similara acum 2 ani, si tot in MS-DOS am lucrat. Mi s-a parut o idee proasta, e foarte greu de interactionat cu emulatoarele dintr-un mediu modern.

Ati lucrat in MS-DOS pt. ca era cel mai simplu.

#10
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018
Ca sa nu mai deschid alt topic, daca v-ati bagat nasul prin assembly si stiti ceva simplu.
Instructiunea DIV.

mov eax, 0ffff ffffh
mov edx, 0ffff ffffh
mov ebx, 02h
div ebx


Daca am inteles bine, numarul din care se imparte e pastrat implicit in EDX:EAX (high order double word in EDX), numarul la care se imparte este pus explicit in EBX. Rezultatul partea intreaga poposeste in EAX iar restul (un nr mai mic decat numarul din EBX) poposeste in EDX.
Toate bune si frumoase numai ca daca fac impartirea cu numerele din codul prezentat, numarul intreg ce trebuie sa mearga in EAX e mai mare de 32 de biti. Ce imi scapa? E aiurea daca trebuie sa am EU grija sa imi incapa rezultatul in EAX adica sa fac calculul inainte sa pun calculatorul sa-l faca. Posted Image Debuggerul imi da eroare signal SIGFPE.

#11
dexterash

dexterash

    --something---

  • Grup: Senior Members
  • Posts: 22,912
  • Înscris: 19.08.2004
Ia vezi, DIV ăla nu cumva setează și niște biti/flaguri?

#12
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Primesti exceptie daca rezultatul e prea mare: https://c9x.me/x86/h..._x86_id_72.html

De ce ai vrea insa sa imparti numere asa mari (264 - 1) in cazul de fata daca rezultatul incape doar pe 32-biti?

#13
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018

View Postdexterash, on 15 mai 2021 - 13:28, said:

Ia vezi, DIV ăla nu cumva setează și niște biti/flaguri?

Cica DIV nu afecteaza niciun flag

View Postdani.user, on 15 mai 2021 - 13:45, said:

Primesti exceptie daca rezultatul e prea mare: https://c9x.me/x86/h..._x86_id_72.html

De ce ai vrea insa sa imparti numere asa mari (264 - 1) in cazul de fata daca rezultatul incape doar pe 32-biti?

Pai de ce n-as vrea sa impart numere asa mari? Nu despre asta e vorba? Adica uite iti punem la dispozitie doi registri de 32 biti alaturati ca sa poti imparti din numere mari pe 64 biti (facem abstractie aici de rax & co, MMX sau SSE).
In cazul de fata rezultatul nu incape in 32 biti. Si nu e o exceptie, se poate intampla ori de cate ori numarul la care se face impartirea e prea mic. Uite alt exemplu:

4 FFFF FFFF / 2
Boom, are doar 36 de biti, il imparti la 2 si rezultatul e pe 34 de biti: 2 7FFF FFFF

sau imi scapa mie ceva ca daca e asa e cam aiurea.

Edited by wolfenste, 17 May 2021 - 13:05.


#14
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007

View Postwolfenste, on 17 mai 2021 - 13:03, said:

Adica uite iti punem la dispozitie doi registri de 32 biti alaturati ca sa poti imparti din numere mari pe 64 biti (facem abstractie aici de rax & co, MMX sau SSE).

Nu chiar... Iti punem la dispozitie doi registrii de 32 biti pentru a putea efectua mai repede unele impartiri atunci cand scrii cod pentru lucru cu numere mari. Mai multe detalii: https://stackoverflo...in-x86-assembly

#15
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018
Pai asta e partea funny, "unele impartiri" si ca sa stii care impartire se preteaza, trebuie sa calculezi tu inainte :) Sau nu?

#16
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
https://opensource.a...di3.S.auto.html exemplu comentat de impartire pe 64bit

#17
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018
Ce-i asta, ghiveci c++ assembly?

#18
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Daca comentarii bine plasate sunt ghiveci...

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate