Dopiero zaczynam się uczyć Asemblera. Oto kod programu do którego mam pytania:
1format ELF64 executable
2entry _start
3
4segment readable executable
5
6_start:
7
8 mov esi, 0fh
9
10 mov eax, "0"
11 mov ebx, nasze_flagi
12 xor edi, edi
13
14 mov cx,32
15
16petla:
17 and al, "0"
18 shl esi, 1
19 adc al, 0
20 mov [ebx+edi], al
21 inc edi
22 loop petla
23
24 mov eax,4
25 mov ebx, 1
26 mov ecx, nasze_flagi
27 mov edx, 32
28 int 80h
29
30 mov eax,1
31 xor edi,edi
32 int 80h
33
34segment readable writeable
35
36nasze_flagi: times 64 db "0"
Numerów linii nie ma w programie. Mam następujące pytania:
- Po co 10 linia? Program bez niej nie działa, ale przecież rejestr EAX nie jest używany aż do 24 linii.
- Co robi linia 17?
- Co robi linia 19?
- Co to jest [rejestr]? Co robi linia 20?
- Linia 22. Czemu pętla się kończy? Gdzie zmienia się rejestr CX, który odlicza powtórzenia?
- Gdzie zmienia się zmienna nasze_flagi? Linie 24-28 tylko ją wyświetlają.
- Program się kompiluje i uruchamia ale Makefile zgłasza "Błąd 1". Dlaczego?