Monday, April 11, 2016
giáo trình hợp ngữ nâng cao
ASCII code (Hex)
7
8
9
A
D
SYMBOL
BEL
BS
HT
LF
CR
FUNCTION
beep
backspace
tab
line feed
carriage return
1.9
Chương trình đầu tiên
Chúng ta sẽ viết một chương trình hợp ngữ nhằm đọc một ký tự từ bàn phím
và in nó trên đầu dòng mới .
TITLE
PGM1: ECHO PROGRAM
Đề cương bài giảng HP NGỮ
.MODEL
SMALL
.STACK
100H
.CODE
MAIN
PROC
; display dấu nhắc
MOV AH,2
MOV DL,’?’
INT 21H
; nhập 1 ký tự
MOV AH,1 ; hàm đọc ký tự
INT 21H
; ký tự được đưa vào AL
MOV BL,AL
; cất ký tự trong BL
; nhảy đến dòng mới
MOV AH,2 ; hàm xuất 1 ký tự
MOV DL,0DH
; ký tự carriage return
INT 21H
, thực hiện carriage return
MOV DL,0AH
; ký tự line feed
INT 21H
; thực hiện line feed
; xuất ký tự
MOV DL,BL
; đưa ký tự vào DL
INT 21H
; xuất ký tự
; trở về DOS
MOV AH,4CH
; hàm thoát về DOS
INT 21H
; exit to DOS
MAIN ENDP
END MAIN
1.10 Tạo ra và chạy một chương trình hợp ngữ
12
Có 4 bước để tạo ra và chạy một chương trình hợp ngữ là :
• Dùng một trình soạn thảo văn bản để tạo ra tập tin chương trình nguồn ( source
program file ) .
• Dùng một trình biên dòch (Assembler ) để tạo ra tập tin đối tượng (object file)
ngôn ngữ máy
• Dùng trình LINK để liên kết một hoặc nhiều tập tin đối tượng rồi tạo ra file thực
thi được .
• Cho thực hiện tập tin EXE hoặc COM .
Bước 1 : Tạo ra chương trình nguồn
Đề cương bài giảng HP NGỮ
13
Dùng một trình soạn thảo văn bản (NC chẳng hạn) để tạo ra chương trình
nguồn .Ví dụ lất tên là PGM1.ASM. Phần mở rộng ASM là phần mở rộng quy ước để
Assembler nhận ra chương trình nguồn .
Bước 2 :Biên dòch chương trình
Chúng ta sẽ dùng MASM ( Microsoft Macro Assembler ) để chuyển tập tin
nguồn PGM1.ASM thành tập tin đối tượng ngôn ngữ máy g là PGM1.OBJ bằng
lệnh sau :
MASM PGM1;
Sau khi in thông tin về bản quyền MASM sẽ kiểm tra file nguồn để tìm lỗi cú
pháp . Nếu có lỗi thì MASM sẽ inra số dòng bò lỗi và một mộ tả ngắn về lỗi đó .
Nếu không có lỗi thì MASM sẽ chuyển PGM1.ASM thành tậo tin đối tượng ngôn ngữ
máy gọi là PGM1.OBJ .
Dấu chấm phẩy sau lệnh MASM PGM1 có nghóa là chúng ta không muốn tạo
ra một tập tin đối tượng có tên khác với PGM1 . Nếu không có dấu chấm phẩy sau
lệnh thì MASM sẽ yêu cầu chúng ta gõ vào tên của một số tập tin mà nó có thể tạo
ra như hình dưới đây :
Object file name [ PGM1.OBJ]:
Source listing [NUL.LIST]
: PGM1
Cross-reference [NUL.CRF]
: PGM1
Tên mặc nhiên là NUL có nghóa là không tạo ra file tương ứng trừ khi lập
trình viên gõ vào tên tập tin .
Tập tin danh sách nguồn ( source listing file) : là một tập tin Text có đánh số
dòng , trong đó mã hợp ngữ và mã nguồn nằm cạnh nhau . Tập tin này thường dùng
để gỡ rối chương trình nguồn vì MASM thông báo lỗi theo số dòng .
Tập tin tham chiếu chéo ( Cross -Reference File ) : là 1 tập tin chứa danh
sách các tên mà chúng xuất hiện trong chương trình kèm theo số dòng mà tên ấy
xuất hiện . Tập tin này đưọc dùng để tìm các biến và nhãn trong một chương trình
lớn .
Bước 3 : Liên kết chương trình
Tập tin đối tượng tạo ra ở bước 2 là một tập tin ngôn ngữ máy nhưng nó
không chạy được vì chưa có dạng thích hợp của 1 file chạy . Hơn nữa nó chưa biết
chương trình được nạp vào vò trí nào trên bộ nhớ để chạy . Một số đòa chỉ dưới dạng
mã máy có thể bò thiếu .
Trình LINK sẽ liên kết một hoặc nhiều file đói tượng thành một file chạy duy
nhất ( *.EXE ) .Tập tin này có thể được nạp vào bộ nhớ và thi hành .
Đề cương bài giảng HP NGỮ
14
Để liên kết chương trình ta gõ :
LINK PGM1;
Nếu không có dấu chấm phẩy ASM sẽ yêu câù chúng ta gõ vào tên tập tin
thực thi .
Bước 4 : Chạy chương trình
Từ dấu nhắc lệnh có thể chạy chương trình bằng cách gõ tên nó rồi nhấn
ENTER .
1.11 Xuất một chuỗi ký tự
Trong chương trình PGM1 trên đây chúng ta đã dùng INT 21H hàm 2 và 4 để
đọc và xuất một ký tự . Hàm 9 ngắt 21H có thể dùng để xuất một chuỗi ký tự .
INT 21H , Function 9 : Display a string
Input : DX=offset address of string
The string must end with a ‘$’ character
Ký tự $ ở cuối chuỗi sẽ không được in lên màn hình . Nếu chuỗi có chứa ký
tự điều khiển thì chức năng điều khiển tương ứng sẽ được thực hiện .
Chúng ta sẽ viết 1 chương trình in lên màn hình chuỗi “HELLO!” . Thông
điệp HELLO được đònh nghóa như sau trong đoạn số liệu :
MSG DB
‘HELLO!$’
Lệnh LEA ( Load Effective Address )
LEA
destnation , source
Ngắt 21h , hàm số 9 sẽ xuất một chuỗi ký tự ra màn hình với điều kiện đòa chỉ
hiệu dụng của biến chuỗi phải ở trên DX . Có thể thực hiện điều này bởi lệnh :
LEA DX,MSG
; đưa đòa chỉ offset của biến MSG vào DX
Program Segment Prefix ( PSP ) : Phần đầu của đoạn chương trình
Khi một chương trình được nạp vào bộ nhớ máy tính , DOS dành ra 256 byte
cho cái gọi là PSP . PSP chưá một số thông tin về chương trình đang được nạp trong
bộ nhớ . Để cho các chương trình có thể truy xuất tới PSP , DOS đặt số phân đoạn
của nó (PSP) trong cả DS và ES trước khi thực thi chương trình . Kết qủa là thanh
ghi DS không chứa số đoạn của đoạn số liệu của chương trình . Để khắc phục điều
này , một chương trình có chứa đoạn số liệu phải được bắt đầu bởi 2 lệnh sau đây :
MOV AX,@DATA
Đề cương bài giảng HP NGỮ
15
MOV DS,AX
Ở đây @DATA là tên của đoạn số liệu được đònh nghóa bởi DATA .
Assembler sẽ chuyển @DATA thành số đoạn .
Sau đây là chương trình hoàn chỉnh để xuất chuỗi ký tự HELLO!
TITLE
PGM2: PRINT STRING PROGRAM
.MODEL
SMALL
.STACK
100H
.DATA
MSG DB
‘HELLO!$’
.CODE
MAIN
PROC
; initialize DS
MOV AX,@DATA
MOV DS,AX
; display message
LEA DX,MSG
MOV AH,9
INT 21H
; return to DOS
MOV AH,4CH
INT 21H
MAIN
ENDP
END MAIN
1.12 Chương trình đổi chữ thường sang chữ hoa
Chúng ta sẽ viết 1 chương trình yêu cầu người dùng gõ vào một ký tự
bằng chữ thường . Chương trình sẽ đổi nó sang dạng chữ hoa rồi in ra ở dòng tiếp
theo .
TITLE
.MODEL
.STACK
.DATA
CR
LF
MSG1
MSG2
PGM3: CASE COVERT PROGRAM
SMALL
100H
EQU
EQU
DB
DB
0DH
0AH
‘ENTER A LOWER CASE LETTER:$’
0DH,0AH,’IN UPPER CASE IT IS :’
Đề cương bài giảng HP NGỮ
CHAR
DB
?,’$’
16
; đònh nghóa biến CHAR có giá trò ban đầu chưa
;xác đònh
.CODE
MAIN
PROC
; INITIALIZE
DS
MOV
AX,@DATA
MOV
DS,AX
;PRINT PROMPT USER
LEA DX,MSG1
; lấy thông điệp số 1
MOV AH,9
INT 21H
; xuất nó ra màn hình
;nhập vào một ký tự thường và đổi nó thành ký tự hoa
MOV AH,1
; nhập vào 1 ký tự
INT 21H
; cất nó trong AL
SUB AL,20H
; đổi thành chữ hoa và cất nó trong AL
MOV CHAR, AL ; cất ký tự trong biến CHAR
; xuất ký tự trên d
ò
theo
11 10 9 8 7 6 5 4 3 2 1 0 ng tiếpDX, MSG2
LEA
; lấy thông điệ
O D IF T S Z
A
P
C
p
thứ 2
F F
F F F
F
F
F MOV AH,9
INT 21H
; xuất chuỗi ký tự thứ hai , vì MSG2 không kết
;thúc bởi ký tự $ nên nó tiếp tục xuất ký tự có trong biến CHAR
;dos exit
MOV AH,4CH
INT 21H
; dos exit
MAIN
ENDP
END MAIN
Đề cương bà i giả n g Hợ p ngữ
17
Chương 2 : Trạng thái của vi xử lý và các thanh ghi cờ
Trong chương này chúng ta sẽ xem xét các thanh ghi
cờ của vi xử lý và ảnh hưởng của các lệnh máy đến các
thanh ghi cờ như thế nào . Trạng thái của các thanh ghi là
căn cứ để chương trình có thể thực hiện lệnh nhảy , rẻ
nhánh và lặp .
Một phần của chương này sẽ giới thiệu chương trình
DEBUG của DOS .
2.1 Các thanh ghi cờ ( Flags register)
Bit
Name
Symbol Điểm khác biệt qu
an trọ 0
ng của máy tính so
Carry flag
CF
với c
ác
2
Parity flag
PF
thiết bò điện tử kh
4
Auxiliary
AF
ác là
khả năng cho các q
carry flag
uyết
đònh
6
Zero flag
ZF
.
Một mạch đặc biệt
7
Sign flag
SF
trong 11 Overflow flag
CPU có thể làm cá
OF
c quy 8
ết
Trap flag
TF
đònh này bằng các
9
Interrrupt flag
IF
h că 10 Direction flag
n cứ vào trạng thá
DF
i hiệ
n hành
của CPU . Có một thanh ghi đặc biệt cho biết trạng
thái của CPU đó là thanh ghi cờ .
Bảng 2.1 cho thấy thanh ghi cờ 16 bit của 8086
Bảng 2.1 :Thanh ghi cờ của 8086
Đề cương bà i giả n g Hợ p ngữ
18
Mục đích của các thanh ghi cờ là chỉ ra trạng thái của
CPU .Có hai loại cờ là cờ trạng thái ( status flags) và cờ
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment