[ASSEMBLY] BÀI 1: NHẬP MÔN ASSEMBLY VỚI HELLO WORD

Nhập môn Mục đích Làm quen với ngôn ngữ lập trình Assembly Biết cách viết, dịch, chạy và chẩn lỗi (debug) một vài chương trình đơn giản Tóm tắt lý thuyết Hợp ngữ (assembler) là ngôn ngữ bậc thấp, giúp cho người lập trình không phải ghi nhớ mã máy (opcode) mà sử dụng các từ ngữ gợi nhớ (pseudo-code) gần với ngôn ngữ tự nhiên để miêu tả công việc cần thực hiện. Tuy vậy, assembler rất gần với ngôn ngữ máy, đòi hỏi người lập trình phải hiểu biết tương đối đầy đủ về cấu trúc phần cứng máy tính. Với mỗi kiểu kiến trúc của bộ vi xử lý, có một bộ lệnh riêng, do đó, có một ngôn ngữ assembler riêng cho nó. Ở đây, chúng ta nghiên cứu assembler cho các bộ vi xử lý Intel thuộc họ x86. Các chương trình sẽ được viết cho chế độ thực (real mode) trong DOS và được biên dịch bằng Turbo Assembler.

Cấu trúc thông thường của một chương trình hợp ngũ

.model <Khai báo kiểu chương trình> .stack <Khai báo kích thước ngăn xếp> .data <Khai báo dữ liệu> .code <Các lệnh> end

Ví dụ: Chương trình sau in ra màn hình dòng chữ “XIN CHAO CAC BAN”

.MODEL SMALL   ; KHAI BAO CHE DO BO NHO .STACK 100H   ;KHAI BAO BO NHO DANH CHO CHUONG TRINH .DATA     ;PHAN CHUA DU LIEU CHO CHUONG TRINH TB DB “XIN CHAO CAC BAN $”    ; <TEN BIEN>  <KIEU DU LIEU> <DU LIEU> .CODE MOV AX,@DATA     ;NAP DU LIEU VAO THANH GHI DX MOV DS,AX             ; DU LIEU DC CHUYEN DEN THANH GHI DATA SEGERMENT

LEA DX,TB              ; XAC DINH HAY NAP DU LIEU , TEN BIEN CAN IN MOV AH,9               ; AH =9 IN DU LIEU TU THANH GHI DX RA MAN HINH INT 21H                   ; HAM GOI LENH DOS CUA MAY

MOV AH,4CH          ; AH=4CH THOAT CT INT 21H

END                           ; KET THUC CHUONG TRINH TAI DAY Lưu ý: – Mọi chương trình đều phải có đoạn code thoát khỏi chương trình, nếu không chương trình sẽ không dừng khi hết chương trình của mình.

Khai báo biến trong hợp ngữ

Cú pháp: <tên biến> D<Kiểu DL> <giá trị khởi tạo> hoặc <tên biến> D<Kiểu DL> <số phần tử> dup(<giá trị khởi tạo>)

Các kiểu dữ liệu: B (1 byte), W (2 bytes), D (4 bytes) Nếu không khởi tạo, dùng dấu hỏi “?”

Ví dụ:

Khai báo trong C Khai báo trong hợp ngữ char ch; ch DB ? char ch = ‘a’; ch DB ‘a’ char ch = 5; ch DB 5 char s[]=”\nhello world!” s DB 10,13,”hello world!$” int i=100; i DW 100 long l; l DD ? char a[] = {1,2,3}; a DB 1,2,3 char a[100]; a DB 100 dup(?) char a[100][50]; a DB 100 dup(50 dup(?))

Chương Trình Hello Word

Một số lệnh cơ bản

MOV des,src : chép dữ liệu từ src sang des INC des : tăng des một đơn vị DEC des : giảm des một đơn vị ADD des,src : des = des + src SUB des,src : des = des – src INT num : gọi ngắt

Tài liệu học assembly: Google

Từ khóa » Tự Học Assembly