Viết chương trình Hello World đầu tiên trong Assembly

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

Viết chương trinh hello world assembly

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
  1. .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ỏ.
  2. .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).
  3. .DATA: Khai báo phần dữ liệu của chương trình.
  4. 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 (‘$’).
  5. .CODE: Khai báo phần mã lệnh của chương trình.
  6. mov ax, @data: Di chuyển giá trị của thanh ghi @data vào thanh ghi ax. Thanh ghi @data chứa địa chỉ của phần dữ liệu.
  7. mov ds, ax: Di chuyển giá trị của thanh ghi ax vào thanh ghi ds (Data Segment), thiết lập vùng dữ liệu để trỏ đến phần dữ liệu.
  8. lea dx, m: Ghi địa chỉ của biến m (địa chỉ của chuỗi “HELLO WORLD$”) vào thanh ghi dx.
  9. 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.
  10. 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.
  11. 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.
  12. 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

Viết chương trinh hello world assembly

Kết quả:

Viết chương trinh hello world assembly

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.

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em