Salam dostlar
Assemblerdə hesablama üçün kiçik proqramlar yazanda həmin proqram kiçik ədədlər üçün doğru işləyir ancaq əddləri böyük edəndə nəticə səhv olur. Məsələn:
1 | #prog1.s |
2 | .data |
3 | begin: |
4 | .long 1 |
5 | end: |
6 | .long 10 |
7 | .text |
8 | .globl _start |
9 | _start: |
10 | movl $0, %edx |
11 | movl begin, %eax |
12 | movl end,%ecx |
13 | for: |
14 | cmpl %eax, %ecx |
15 | js son |
16 | addl %eax, %edx |
17 | addl $1, %eax |
18 | jmp for |
19 | son: |
20 | movl %edx, %ebx |
21 | movl $1, %eax |
22 | int $0x80 |
Bu proqramı 1-dən 100-ə qədər ədədlərin cəmini toplamaq üçün yazmışdım ancaq end dəyişəni 100 olanda nəticə olaraq 186 yazıldı nəticə səhv oldu ancaq 5-10 yazanda nəticə düzgün olur.
İndi necə edim ki proqram böyük ədədlər üçün də düzgün işləsin?
Verilmiş cavablar və yazılan şərhlər (1 cavab var)
2
int instruksiyasından evvel nişan elan edib proqramın icrasını debaqqerle hemin nişanda dayandırıb %ebx -in qiymetini yoxlayın.
Sual verin
Cavab verin