Ghép các phần lại
Thuộc phần Kiến thức nền tảng trong hành trình Assembly của Coddy. Bài học 39 trên 45.
Bạn đã học đủ bốn thành phần của lệnh gọi hệ thống write:
| Thanh ghi | Chứa gì | Giá trị khi xuất ra màn hình |
|---|---|---|
rax | Số lệnh gọi hệ thống | 1 (write) |
rdi | Bộ mô tả tệp | 1 (stdout) |
rsi | Địa chỉ bộ đệm | Địa chỉ chuỗi của bạn |
rdx | Số byte | Độ dài chuỗi của bạn |
Bây giờ là lúc ghép tất cả lại với nhau.
Mẫu syscall write hoàn chỉnh:
mov rax, 1 ; số hiệu syscall cho write
mov rdi, 1 ; bộ mô tả tệp (stdout)
mov rsi, msg ; địa chỉ của chuỗi
mov rdx, msgLen ; số byte cần in ra
syscall ; yêu cầu OS in raMột chương trình hoàn chỉnh có thể chạy:
section .data
msg db 'Hello, World!', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallChương trình này làm gì:
| Bước | Điều gì xảy ra |
|---|---|
| 1 | In "Hello, World!" ra màn hình |
| 2 | Chuyển sang dòng mới |
| 3 | Thoát bình thường với mã 0 |
Thứ tự rất quan trọng:
Bạn phải thiết lập các thanh ghi trước khi thực thi syscall. Thứ tự của các lệnh mov không quan trọng, miễn là bạn thiết lập đủ cả bốn trước khi thực thi syscall.
Thử thách
Viết một chương trình hoàn chỉnh để in ra thông điệp "Assembly is fun", theo sau là một ký tự xuống dòng, rồi thoát gọn gàng.
Chuỗi và độ dài của chuỗi đã được định nghĩa sẵn. Bạn chỉ cần viết code bên trong _start:.
Tự làm thử
section .data
msg db 'Assembly is fun', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; TODO: Thiết lập và gọi lời gọi hệ thống write
; Dùng rax=1, rdi=1, rsi=msg, rdx=msgLen
; TODO: Thoát đúng cách với mã 0
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
3Lệnh đầu tiên: MOV
MOV là gì?MOV với giá trị tức thờiMOV từ thanh ghi sang thanh ghiMOV từ bộ nhớ sang thanh ghiMOV từ thanh ghi vào bộ nhớLEA: nạp địa chỉMOV với các kích thước khác nhauLuyện tập: hoán đổi thanh ghiÔn tập: thử thách MOV6Lời gọi hệ thống write
Lời gọi hệ thống write (1)Bộ mô tả tệp (rdi)Địa chỉ bộ đệm (rsi)Số byte (rdx)Ghép các phần lạiIn hai chuỗiKý tự xuống dòng rất quan trọngÔn tập: thiết lập writeTự luyện tập: Playground Assembly