Bất kỳ một lập trình viên nào nếu muốn trở nên chuyên nghiệp, đều phải khởi đầu từ ngôn ngữ cơ bản nhất. Bài viết sẽ hướng dẫn các bạn viết chương trình hello world assembly đầu tiên.
IDE sử dụng trong bài viết là DOSBox 0.74
Giới thiệu về Assembly
Assembly là một ngôn ngữ lập trình gần với mã máy được sử dụng để tương tác trực tiếp với phần cứng của máy tính. Đối với các lập trình viên, viết chương trình Assembly có thể trở nên khá phức tạp và khó hiểu. Tuy nhiên, viết một chương trình Hello World đầu tiên trong Assembly sẽ giúp chúng ta hiểu cách giao tiếp cơ bản giữa ngôn ngữ lập trình và phần cứng.
Khởi tạo
Khởi động DOSBox 0.74 và nhập các dòng lệnh:
mount t d:\ t: cd BTASM edit hi.asm
Hello World
Chương trình Hello World assembly có cấu trúc như sau:
.MODEL small .STACK 100h .DATA m db 'HELLO WORLD$' .CODE PS: mov ax, @data mov ds, ax lea dx, m mov ah, 9 int 21h mov ah, 4ch int 21h END PS
- .MODEL small: Khai báo kiểu mô hình chương trình. Trong trường hợp này,
small
đại diện cho kiểu mô hình chương trình nhỏ. - .STACK 100h: Đặt kích thước của ngăn xếp (stack) cho chương trình. Trong trường hợp này, kích thước của ngăn xếp là 256 bytes (100h là 256 khi được viết ở hệ cơ số 16).
- .DATA: Khai báo phần dữ liệu của chương trình.
- m db ‘HELLO WORLD$’: Khai báo một biến có tên
m
kiểu byte (db) và gán giá trị là chuỗi ký tự “HELLO WORLD$” kết thúc bằng ký tự null (‘$’). - .CODE: Khai báo phần mã lệnh của chương trình.
- mov ax, @data: Di chuyển giá trị của thanh ghi
@data
vào thanh ghiax
. Thanh ghi@data
chứa địa chỉ của phần dữ liệu. - mov ds, ax: Di chuyển giá trị của thanh ghi
ax
vào thanh ghids
(Data Segment), thiết lập vùng dữ liệu để trỏ đến phần dữ liệu. - lea dx, m: Ghi địa chỉ của biến
m
(địa chỉ của chuỗi “HELLO WORLD$”) vào thanh ghidx
. - mov ah, 9: Đặt giá trị của thanh ghi
ah
là 9, là mã hàm dịch vụ của DOS để hiển thị chuỗi. - int 21h: Gọi hàm dịch vụ DOS thông qua ngắt mềm 0x21. Trong trường hợp này, hàm dịch vụ 9 sẽ hiển thị chuỗi được trỏ bởi thanh ghi
dx
. - mov ah, 4ch: Đặt giá trị của thanh ghi
ah
là 4ch, là mã hàm dịch vụ của DOS để kết thúc chương trình. - int 21h: Gọi hàm dịch vụ DOS để kết thúc chương trình.
Chạy chương trình
- Sau khi gõ lệnh xong, Save file và Exit.
- Tiếp tục gõ lệnh tlink > tasm hi.asm > dir > tlink hi > hi
Kết quả:
Lời kết
Viết chương trình Hello World đầu tiên trong Assembly là một cách tuyệt vời để bắt đầu làm quen với ngôn ngữ lập trình này. Qua bài viết này, chúng ta đã tìm hiểu cách sử dụng trình biên dịch NASM và viết mã nguồn đơn giản để in ra chuỗi “Hello World!” trên màn hình.