Nguồn 1 Chương trình nguồn .ASM MASM.EXE Mã đối tượng .OBJ Liệt kê .LST Tham khảo chéo .CRF LINK.EXE Mã thực thi .EXE Mã thực thi .COM Bản đồ .MAP Chương trình dịch hợp ngữ Chương
Trang 1CHƯƠNG 6
Hợp ngữ
Trang 2Nguồn 1 Chương trình
nguồn (.ASM)
MASM.EXE
Mã đối tượng (.OBJ) Liệt kê (.LST)
Tham khảo chéo (.CRF)
LINK.EXE
Mã thực thi (.EXE)
Mã thực thi (.COM) Bản đồ (.MAP)
Chương trình dịch hợp ngữ
Chương trình liên kết
Chương trình thực thi COM
Chương trình thực thi EXE
Trang 3Trị mặc nhiên : Chương trình nguồn Source.ASM
Tâp tin đối tượng Source.OBJ
Bản liệt kê chương trình NUL.LST Tập tin tham khảo chéo NUL.CRF
Trị mặc nhiên :
Tập tin đối tượng objects.OBJ Chương trình thực thi object1.COM
Bản đồ sử dụng bộ nhớ NUL.MAP Tập tin thư viện name.LIB
Trang 4Chương trình nguồn :
* Là tập tin văn bản (.ASM): Filename.ASM
* Dạng lệnh : [<nhãn>] <mã lệnh> <thông số> ;<chú thích>
* Các ký tự dùng để đặt tên cho nhãn : a - z A - Z 0 - 9 ? @ _ $
và bắt đầu bằng một ký tự khác số
* Số hệ 2 : ××××××××××××××××××××××××××××××××B (10110101B)
* Số hệ 8 : ××××××××××××Q hoặc ××××××××××××O (123Q, 705O)
* Số hệ 10 : mặc định hoặc ××××××××××××××××××××D (32767, 4509D)
* Số hệ 16 : ××××××××××××××××H và bắt đầu bằng số (1A97H, 0E05BH)
Trang 5Biến
Hằng
Nhãn
- Do người sử dụng đặt
- Không phân biệt chữ lớn
chữ nhỏ
- Chiều dài tùy ý nhưng chi
có 31 ký tự đầu có nghĩa
Tên
NEAR FAR
BYTE
WORD
DWORD
QWORD
TBYTE
ABS
Thay địa chỉ bộ nhớ
Để chứa dữ liệu
<tên>:
<tên> LABEL <thuộc tính nhãn>
<tên> PROC [<thuộc tính>]
<tên> ENDP EXTRN <tên>:<thuộc tính nhãn>[, ]
<tên> Dx <biểu thức> [, ]
<tên> <tên cấu trúc> <biểu thức>
<tên> <tên máu tin> <biểu thức>
<tên> LABEL <thuộc tính biến>
EXTRN <tên>:<thuộc tính biến>[, ]
<tên> EQU <biểu thức>
<tên> = <biểu thức>
EXTRN <tên>:ABS [, ]
Thay địa chỉ bộ nhớ
Để đánh dấu vị trí
Thay cho giá trị
Trang 6Biểu thức
tên
hằng
(địa chỉ)
biến
(địa chỉ)
trị tức thời
số
ký tự
Toán hạng
Toán tử
Thay đổi thuộc tính : PTR, :, SHORT, THIS, HIGH, LOW
Trả trị : SEG, OFFSET, TYPE, LENGTH, SIZE
Mẫu tin : số dịch, MASK, WIDTH
Số học : + - ∗∗∗∗ / MOD SHR SHL
Quan hệ : EQ, NE, LT, LE, GT, GE
Luận lý : NOT, AND, OR, XOR
Các toán tử
có độ ưu tiên
Trang 7DOSSEG
.model small
.stack <Số byte>
.data
<Các khai báo biến và hằng>
.code
main proc
<Thân chương trình chính>
<Kết thúc, trở về DOS>
main endp
<Các khai báo chương trình con>
end
title <Tên chương trình>
code segment para public 'code'
assume cs:code,ds:code,ss:code
<Các chương trình con>
main proc
<Thân chương trình chính>
<Kết thúc, trở về DOS>
main endp
<Các chương trình con>
code ends data segment para public 'data'
<Các khai báo biến và hằng>
data ends stack segment stack 'stack'
<Khai báo vùng đệm>
stack ends
end main
Dạng chương trình
Trang 8<tên> SEGMENT [<align>] [<combine>] [ '<class>']
<thân segment>
<tên> ENDS
<align> Địa chỉ bắt đầu
BYTE XXXX xxxx (1 byte)
WORD XXXX xxx0 (2 byte)
DWORD XXXX xx00 (4 byte)
PARA XXXX 0000 (16 byte)
PAGE XXX0 0000 (256 byte)
X4 bit x1 bit
0 1 2 3 4 5 6 7 8 9 A B C D E F
Bộ nhớ BYTE
WORD DWORD PARA & PAGE
A
B
B
A
0
COMMON
0
0
PUBLIC
A
B
AB
0
0
0
Không có
0
0
0 0
A
B
A
B
Trang 9ASSUME <thanh ghi đoạn>:<tên>[, ]
<tên> PROC [NEAR / FAR]
<thân chương trình>
<tên> ENDP
Kết thúc chương trình
mov AX,4C00h int 21h
hoặc
chính
ret
con
iret
con phục vụ ngắt quãng
1.Tên chương trình
Tiêu đề
2.Chương trình làm gì ?
3.Các thông số vào - ra
4.Các thanh ghi bị đổi nội dung
assume CS:code,DS:code,SS:code Giả định cho COM
assume CS:code,DS:data,SS:stack
Giả định cho EXE
Trang 101 Các mô đun phụ trong một chương
trình có nhiều mô đun
2 Tạo thư viện
3 Tạo dữ liệu
END [<biểu thức>]
Các trường hợp không có địa chỉ bắt đầu
<tên biến> Dx <biểu thức>[,<biểu thức> .]
<tên hằng> EQU <biểu thức hằng>
<tên hằng> = <biểu thức hằng>
<tên > LABEL <thuộc tính>
Xem lại mục "tên"
Trang 11<tên> GROUP <tên đoạn>[, .] PUBLIC <tên>[, .]
EXTRN <tên>:<thuộc tính>[, .]
dgroup GROUP data1,data2,data3
ASSUME DS:dgroup
INCLUDE <tên tập tin>
COMMENT <dấu ngăn>
<chú thích không cần chấm phẩy>
<dấu ngăn> <chú thích không cần chấm phẩy>
@
Trang 12<tên> MACRO [<thông số hình thức>, ]
ENDM
<tên macro> <thông số thực> , EXITM
LOCAL <tên> [, ]
PURGE <tên macro> [, ]
REPT <biểu thức>
ENDM
IRP <thông số>, <danh sách các trị trong ngoặc nhọn>
ENDM
IRPC <thông số>,<string>
ENDM
Các toán tử
&<thông số>
% (Biểu thức)
;;<chú thích>
!<ký tự>
< văn bản>
Chỉ thị Macro