⏯️Arrays

Theo như các bạn cũng đã học qua một số ngôn ngữ lập trình bậc cao rồi thì chắc hẳn các bạn cũng biết là chức năng của mảng là gì nên mình sẽ không nói nữa. Hôm nay mình sẽ liệt kê ra các cú pháp để khai báo 1 mảng như sau:

Cach1:
NUMBERS	DW  0x34,  0x45,  0x56,  0x67,  0x75, 0x89
; Cách này sẽ khai báo ra một mảng định nghĩa sẵn các giá trị cho từng phần tử mảng
; Để lấy được phần tử "0x45" thì ta sẽ trỏ tới theo cú pháp NUMBERS + 1
Cach2:
NUMBERS TIMES 8 DW 0x0
; Cách này sẽ khai báo ra 10 phần tử với cùng 1 giá trị là 0x0.

Ví dụ với code sau đây:

section .data
        msg     db      "Hello, Here is sum of Arrays: "
        len     equ     $-msg
        number  db      0x2, 0x3, 0x4
        sum     db      0x0

section .text
        global _start

_start:
        mov     edx, len
        mov     ecx, msg
        mov     ebx, 0x1
        mov     eax, 0x4
        int     0x80

        mov ecx, 0x3
        mov eax, number
        mov ebx, [sum]

        calc:
                push    ecx
                add     ebx, [eax]
                inc     eax
                pop     ecx
        loop calc

        add     ebx, 0x30
        mov     [sum], ebx

        mov     edx, 0x1
        mov     ecx, sum
        mov     ebx, 0x1
        mov     eax, 0x4
        int     0x80

        mov     eax, 0x1
        int     0x80

Lưu ý một chút: Bạn lên phân biệt rõ là [number] với number nhé @@. Mình sẽ chứng minh nó khác ở dưới đây.

Thanh ghi EAX sau khi lênh mov eax, number được thực thi

Thì bạn có thể thấy nó sẽ di chuyển cả địa chỉ của biến number vào thanh ghi eax.

Ngược lại với number là địa chỉ thì [number] sẽ lưu trữ giá trị khi mov được thực thi thì giá trị là cái sẽ được di chuyển. Sau khi thực thi code trên thì bạn sẽ được output là 9.

Bài tập:

Bài tập của buổi hôm nay sẽ là: Khai báo 1 mảng chứa 10 phần tử. Nhập vào các số tự nhiên và in ra tổng của các số đó

<Phần này mình sẽ không để source vì đều là những phần mình từng làm rồi :v >

Last updated