Tải bản đầy đủ (.pdf) (71 trang)

05 lap trinh hop ngu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.4 MB, 71 trang )

Trong máy tính IBM-PC/XT (BVXL 8088/8086)
- Các vi mạch sau có chức năng gì?
+ Vi mạch 8288
+ Vi mạch 74LS373
+ Vi mạch 74LS245
+ Vi mạch 8284


BÀI 4
LẬP TRÌNH HỢP NGỮ
ASSEMBLY


1. Giới thiệu về lập trình hợp ngữ.
2. Chương trình .COM, .EXE

3. Tập lệnh BVXL 8086/8088.
4. Mô tả các cấu trúc lệnh if, while, for…
bằng lệnh hợp ngữ.
5. Vào/ra bàn phím, màn hình với ngắt
21h

6. Các ví dụ minh họa và demo trên
Emu8086.


1. Giới thiệu
• Ngôn ngữ máy (Machine language): Là tập các
lệnh của BVXL biểu diễn dưới dạng nhị phân
(hoặc hex) - mã máy, nó được nạp trực tiếp vào bộ
nhớ để BVXL thực hiện.


• Hợp ngữ (Assembly language): Là ngôn ngữ bậc
thấp, một chương trình viết bằng hợp ngữ bao
gồm một chuỗi các lệnh của BVXL biểu diễn
bằng các cú pháp dễ nhớ mà khi được dịch bằng
một trình dịch hợp ngữ, thì chúng có khả năng nạp
được vào bộ nhớ đồng thời thực thi được bởi
BVXL.


1. Gii thiu
Từ gợi nhớ (Mnemonic) tơng đơng 1-1 với
lệnh CPU.
Chơng trình biên dịch (Assembler) dùng
để biên dịch từ dạng ký hiệu sang mã máy.
MacroAssembler của Microsoft.
TurboAssembler của Borland.


Sử dụng MacroAssembler
Bớc 1: Sử dụng các trình soạn thảo ASCII để viết
chơng trình nguồn và đặt tên mở rộng là .ASM.
Bớc 2: Sử dụng chơng trình MASM.exe để dịch chơng trình nguồn .ASM thành chơng trình .OBJ.
Cách viết:
masm sourcefile
Bớc 3: Sử dụng chơng trình link để liên kết các tệp
tin mã máy dạng .OBJ thành tệp tin thi hành đợc
dạng .EXE.
Cách viết:
LINK objectfile
VD:

link chao
Nếu là chơng trình .COM thì sử dụng exe2bin.exe
để chuyển đổi tệp tin .EXE thành tệp tin .COM.
VD:
exe2bin chao chao.com


• Trình dịch hợp ngữ (Assembler): Là một chương
trình dịch bậc thấp, dịch các chương trình hợp
ngữ thành các mã máy, nạp được vào bộ nhớ
đồng thời thực thi được. VD trình dịch Emu8086.
Mã máy (Hex)

Lệnh hợp ngữ

ORG 100h
B412
B023
02C4
BE3412
8A1C
CD20

MOV AH,12H
MOV AL,23H
ADD AL,AH
MOV SI,1234H
MOV BL,[SI]
INT 20H


END

Ghi chú
Chỉ thị dẫn hướng cho trình dịch
đặt mã lệnh từ đ/c 100h
Gán AH=12H
Gán AL=23H
AL=AL+AH
Gán SI=1234H
Đọc ô nhớ có đ/c 1234h vào BL
Lệnh gọi ngắt 20h kết thúc C/T

Từ khóa kết thúc C/T hợp ngữ

db 0B4h,12h,0B0h,23h,02h,0C4h,0BEh,34h,12h,8Ah,1Ch,0CDh,20h


Cú pháp một câu lệnh hợp ngữ
• Một lệnh hợp ngữ đầy đủ gồm 4 thành phần sau:
[Tên nhãn:] <Tên lệnh> [Các toán hạng] [;Chú thích]
Vdụ Next: MOV
AH, 12h
; gán AH = 12h

• Trong đó:
+ [Tên nhãn:]: Là một dãy các kí tự đứng trước
câu lệnh (kết thúc (:)), nó cho biết địa chỉ của câu
lệnh ngay sau tên nhãn, tên nhãn được dùng trong
các câu lệnh lặp, lệnh nhảy, hoặc tên một chương
trình con... Do đó, nó chỉ được sử dụng khi cần.

- Trong một chương trình hợp ngữ không thể có
hai tên nhãn ở hai vị trí trùng tên nhau.


+ <Tên lệnh>: Cho người dùng biết hoạt động của
lệnh và thường là chữ tiếng anh viết tắt như MOV,
ADD(Addition), SUB(subtract), INC, DEC ...
- Lệnh hợp ngữ không phân biệt chữ hoa/thường.
Trong chương trình hợp ngữ mỗi dòng chỉ có thể
chứa 1 lệnh và mỗi lệnh phải được đặt trên1 dòng.
+ [Các toán hạng]: Là đối tượng mà lệnh tác động
vào. Một lệnh hợp ngữ của 8088/8086 có thể không
có toán hạng, có một toán hạng, hoặc có hai toán
hạng. Nếu có hai toán hạng thì toán hạng đứng
trước gọi là [Toán hạng đích], toán hạng đứng sau
gọi là [Toán hạng nguồn]. [Toán hạng đích] không
thể là một hằng số.


+ [;Chú thích]: Lời giải thích của người viết
chương trình, trình biên dịch bỏ qua chú thích
này, thường được dùng để làm rõ ý nghĩa của câu
lệnh. Lời giải thích phải nằm sau dấu chấm phảy
(;).
Dưới đây là một đoạn chương trình hợp ngữ:
mov CX, 5 ; gán cx=5, hai TH
Mov BX, 100 ; gán bx=100, hai TH
BACK: DEC BX
; giảm bx 1 đơn vị, 1 TH
NOP

; lệnh không có TH
LOOP BACK ;Tên nhãn BACK
; trong lệnh lặp.


Khai báo biến, hằng
• Khai báo biến 1byte sử dụng từ khóa DB
- VD khai báo 2 biến a,b: a db 00h
b db ?
• Khai báo biến 2byte (Word): DW
- VD khai báo biến c 2 byte: c dw 1234h
• Khai bao chuỗi: db
- VD khai bao chuỗi str: str db "Hello"

• Khai báo mảng: m db 100 dup(?)
• Khai báo hằng sử từ khóa: EQU
- VD: kytuA EQU 65


Vị trí khai biến, hằng
• File COM: Hằng khai báo ở đầu chương, biến ở
cuối chương trình, ở vị trí chứa dữ liệu.
• File EXE: Khai báo trong đoạn dữ liệu
• Lưu trữ 16 bít trong bộ nhớ (địa chỉ cao có trọng
số lớn hơn) ;BE3412 ; MOV SI, 1234h


Chỉ rõ kính thước ô nhớ
• Xác định rõ kích thước của ô nhớ dùng từ
khóa PTR.

• Hoạt động 8 bit:
BYTE PTR [1000h]
Tham chiếu đến 1 byte có địa chỉ 1000h
• Hoạt động 16 bít: WORD PTR [1000h]
Tham chiếu 2 byte có địa chỉ 1000h, 1001h


CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ
1. Chế độ định địa chỉ thanh ghi
Ví dụ: ADD
AX, BX
2. Chế độ định địa chỉ tức thi
Ví dụ: MOV
AX, 0B800H
Các chế độ định địa chỉ bộ nhớ
3. Chế độ định địa chỉ bộ nhớ trực tiếp
Ví dụ: MOV
DL, [100]
4. Chế độ định địa chỉ bộ nhớ gián tiếp thanh ghi
Ví dụ: MOV
AX, [BX]
DS:BX
5. Chế độ định địa chỉ quan hệ cơ sở
Ví dụ: MOV
CX, [BX]+10
6. Chế độ định địa chỉ quan hệ chỉ số
Ví dụ: MOV
DX, [SI] + 5
7. Chế độ định địa chỉ chỉ số cơ sở
MOV

CL, [BX] [DI]+8
MOV
CH, [BP] [SI]+12

DS:BX+10
DS:SI+5
DS:BX+DI+8
ES:BP+SI+12


Địa chỉ hiệu dụng
• Địa chỉ hiệu dụng là tổ hợp của 3 nhóm địa chỉ
sau đặt trong dấu []
– Nhóm thanh ghi chỉ số: SI, DI
– Nhóm thanh ghi cơ sở: BX, BP
– Địa chỉ tực tiếp: số 16 bít
Đ/C hiệu dụng không có 2 thanh ghi trong cùng một nhóm
và phù hợp với một trong các chế độ địa chỉ.


2. C/Trúc file chương trình COM, EXE
- C.trúc CT hợp ngữ tạo ra file .COM
MaA EQU 65 ;Khai báo các hằng số
ORG 100h ; Đặt mã lệnh từ đ/c 100h
;Viết các lệnh hợp ngữ
MOV AH,12H
MOV AL,23H
ADD AL,AH
INT 20H
; Khai báo các biến

str db “Hello”
END

- Hợp ngữ không phân biệt chữ
hoa, thường.
- Chú thích viết sau dấu chấm
phẩy (;)

- Cấu trúc CT hợp ngữ tạo ra file .EXE
MaA EQU 41h
data segment ; Khai báo đoạn data
pkey db "press any key...$"
ends
stack segment ; khai báo đoạn stack
dw 128 dup(0)
ends
code segment ; Khai báo đoạn mã lệnh
start:
mov ax, data
mov ds, ax
mov es, ax
;Viết các lệnh hợp ngữ
mov ax, 4c00h
int 21h
ends
end start


•VD 1. Viết chương trình hợp ngữ dạng COM
hiển thị ký tự „A‟ lên màn hình; Dùng chức năng

02h của ngắt 21h.
MaASCII EQU 'A'
org 100h
mov ah, 02h ; 02h mã chức năng xuất ký tự
mov dl, MaASCII ; nạp mã ascii vào dl
int 21h
; gọi ngắt 21h
mov a, dl
int 20h
; gọi ngắt kết thức CT
a db 0
end


Đặc điểm file COM, EXE
• File chương trình .COM là file chương trình có
cấu trúc đơn giản nhỏ gọn, mã lệnh và dữ liệu đặt
trong cùng một đoạn bộ nhớ. Kích thước file
<=64Kb. 4 thanh ghi đoạn đặt cùng một đoạn bộ
nhớ (CS=DS=SS = ES).
• File chương trình .EXE là file chương trình có cấu
trúc phức tạp hơn file .COM, mã lệnh và dữ liệu
có thể đặt trong các đoạn bộ nhớ khác nhau. Kích
thước file .exe cho phép lớn hơn 64Kb. 4 thanh
ghi đoạn CS, DS, SS, ES có thể trỏ đến các đoạn
bộ nhớ khác nhau.


• Viết chương trình COM hiển thị 2 ký tự A, B
lên màn hình dùng chức năng AH=02h, của

ngắt int 21h.


3. Tập lệnh BVXL 8086/8088
3.1 Các ký hiệu quy ước
-

reg: chỉ một thanh ghi bất kỳ
reg16: thanh ghi 16 bits
segreg: thanh ghi đoạn
accum: thanh ghi tích lũy AX, hoặc AL
mem: địa chỉ bộ nhớ trực tiếp
mem16: địa chỉ từ nhớ 2 byte
immed: hằng số
immed8: hằng số 8 bits
thđ: toán hạng đích (toán hạng trước)
thn: toán hạng nguồn (toán hạng sau)


3.2 Nhóm lệnh chuyển dữ liệu
1. Lệnh MOV


2. Lệnh PUSH – Cất dữ 2 byte vào Stack

3. Lệnh POP – Lấy 2 byte ra từ Stack


4. Lệnh LEA – lấy địa chỉ ô nhớ
- LEA reg16, mem



5. Lệnh IN – đọc cổng IO


6. Lệnh OUT – Ghi cổng IO


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×