Platinum2d

First ASM lesson

Oct 3rd, 2017
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main(void)
  5. {
  6. /*
  7. Piccolo appunto personale: se fai una somma che sfora (esempio con ADC) il bit di troppo te lo memorizza nel Carry Flag!! Esiste anche il duale (borrow) per la sottrazione.
  8.  
  9. <length keyword> ptr [<address>]
  10. ptr dice "occhio che questo è un puntatore", mentre dword è una keyword (fissa nella sintassi della deferenziazione dei puntatori) che serve per dirgli di leggere quattro byte a partire dall'indirizzo di memoria passato.
  11. le length keyword sono dword (4 byte), word (2 byte) e byte (1 byte). Quindi se faccio mov al, byte ptr [000h] sto prendendo dalla memoria i primi 8 bit (occhio alla dimensione degli operandi). Puoi fare anche mov eax, dword ptr [ebx] per leggere tot roba dai vai registri.
  12.  
  13.  
  14. Attenzione: non si può andare in memoria due volte con questa tecnica. Questo perchè i registri utilizzati per deferenziare i puntatori e contenerne i dati sono due (MAR e MDR) sono solo due, ne servirebbero 4 per gestire un'istruzione del genere!
  15. Questo è importante e vale per qualsiasi istruzione.
  16.  
  17. */
  18.  
  19. char a[50] = { "Peppa pig" };
  20. char *b = &(a[0]);
  21. char c;
  22.  
  23. __asm
  24. {
  25. mov ebx, b
  26.  
  27. //b = a+b - c
  28.  
  29. /*add ebx, eax
  30. sub ebx, ecx //si sarebbe potuto anche negare ecx con neg ecx e poi aggiungerlo invece che sottrarlo
  31. mov b, ebx*/
  32.  
  33. //b += a
  34.  
  35. //add ebx, eax
  36. //mov b, ebx
  37.  
  38. //terzo elemento di a
  39. mov esi, 4 //indice
  40. mov cl, byte ptr [ebx + esi * 1] //non puoi farlo direttamente con c, ricorda che sarebbe come fare mov dword ptr [c], dword ptr [ebx + 8] che NON SI PUO' FARE, MAR E MDR NON SI SDOPPIANO CAZZO
  41. mov c, cl
  42. }
  43.  
  44. printf("%c", c);
  45.  
  46. return EXIT_SUCCESS;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment