xTremeSurfer Posted February 2, 2014 Report Share Posted February 2, 2014 Tocmai ce am invatat si eu putin ASM pe la facultate si m-am gandit sa scriu un mic tutorial (basic shit in asm) poate e cineva interesat.Let's begin.Pentru inceput partea de cod din ASM o putem scrie in C/C++#include<iostream>using namespace std;int main(){ _asm{ //codul asm }return 0;}RegistriiToate operatiile aritmetice/logice/acces la memorie se fac prin intermediul registrilor. Registrii microprocesorului sunt asemanatori variabilelor (pot fi initializati cu anumite valori, se pot efectua operatii asupra lor, pot fi accesati (cititi/modificati)).registri de uz general : eax, ebx, ecx, edx si subregistrii lor;registri segment : cs (code segment), ds (data segment), es (extra segment), ss (stack segment) - sunt folositi pentru adresarea memoriei in cazul modelului de memorie segmentatregistrii index : esi, edi (source index, destination index);registri speciali : ebp, esp, ip;In prima parte vom lucra doar cu registrii de uz general.eax - numit si "accumulator" - acesta este cel mai folosit in executarea operatiilor aritmetice (adunare, scadere, inmultire, impartire);ebx - numit si "base" - acesta registru este folosit pentru adresarea indirecta a memoriei;ecx - numit si "count" - acest registru este folosit mai ales in cadrul "buclelor" (in instructiunile repetitive : for/ while do/ do while/ repeat until);edx - numit si "data" - retine anumite variabile, si este folosit impreuna cu eax in executarea operatiei "div", impartire intreaga (avand rolul de a retine restul impartirii).Instructiunimov - instructiunea copiaza o valoare dintr-o locatie in alta locatie. Aceasta locatie poate fi zona de memorie, variabila, registru. De retinut este ca nu exista variante ale instructiunii care copiaza direct dintr-o zona de memorie in alta.add - instructiunea este folosita pentru a aduna 2 valoriExemplu: add eax,ebx // aduna valorea lui ebx cu eax si rezultatul se pastreaza in eaxeste echivalenta cu a=a+b sub - scadereExemplu: sub eax,ebx // este echivalenta cu a=a-b div - imparte eax. catul este pastrat in eax si restul in edxExemplu: mov eax,10 //eax = 10mov ebx,5 //ebx = 5mov edx,0 //edx = 0 div ebx // 10/5eax = 2edx = 0mul - se inmulteste eax.Exemplu:mov eax,10 // eax = 10mov ebx,5 // ebx = 5mul ebx // 10*5eax = 50inc & dec - echivalentul a i++ / i--. pentru aceste instructiuni in mare parte din cazuri se foloseste registrul ecx care este registrul "contor"Exemplu:mov ecx,0 // ecx = 0inc ecx // ecx = ecx + 1ecx = 1Tutorialul de unde m-am inspiratIntroducere in asamblareBasic shit is here. Cand o sa am timp ( zilele urmatoare ) daca sunteti interesati o sa scriu un tutorial si despre cum faci un IF // FOR // WHILE // DO WHILE in ASM sau in link-ul de mai sus gasiti toate informatiile necesare.Thanks 1 Quote Link to comment Share on other sites More sharing options...
parazitul29 Posted February 2, 2014 Report Share Posted February 2, 2014 Daca vrei ceva mai "hardcore" incearca nasm sau masm , c-ul nu e prea potrivit pentru asamblare Quote Link to comment Share on other sites More sharing options...
xTremeSurfer Posted February 2, 2014 Author Report Share Posted February 2, 2014 Stiu dar am pus asa ca o introducere Quote Link to comment Share on other sites More sharing options...
BatranuSpliff Posted June 19, 2014 Report Share Posted June 19, 2014 Frumos, mai a?tept tutoriale de genu pentru t?nt?l?ii ca mine! Quote Link to comment Share on other sites More sharing options...