Bài giảng Kỹ thuật Vi xử lý: Chương 4 Lập trình hợp ngữ với 8088 trên IBM-PC, cung cấp cho người học những kiến thức như: cấu trúc lập trình ASM; Các cấu trúc lập trình. Mời các bạn cùng tham khảo!
Trang 1hoantq@hnue.edu.vn
Trang 2Chương 4: Lập trình hợp ngữ với
8088 trên IBM-PC
• I/Cấu trúc lâ ̣p trình ASM
• II/Cấc cấu trúc lâ ̣p trình
Trang 3I/Cấu trúc lập trình ASM
1 Tổng quân về ASM
2 Cấc đôận chương trình
3 Cấu trúc chung củâ mô ̣t lê ̣nh ASM
4 Dữ liê ̣u chương trình
5 Cấc biến
6 Cấc hầng cố tên
7 Dịch từ ngô n ngữ bâ ̣c câô sâng hợp ngữ
8 Khung củâ mô ̣t chương trình ASM
9 Ngất
10 Cấch tậô vầ chậy mô ̣t chương trình hợp ngữ
Trang 41.Tổng quan về ASM
• Cấc khấi niê ̣m :
– Ngô n ngữ mấy
– Trình hợp ngữ
– Trình hợp dịch
• ➔Sô sấnh với cấc ngô n ngữ lâ ̣p trình bâ ̣c câô
Trang 51.Tổng quan về ASM
• Ngô n ngữ mấy :
Mỗi lê ̣nh cố dậng mẫ riê ng (gồm mô ̣t tổ
hợp cấc bit 0 vầ 1) mầ chỉ người thiết kế vầ VXL hiểu được, gội lầ ngô n ngữ mấy dậng mẫ.
• Nhược điểm
– Khố nhớ vầ dễ viết sâi
– Khô ng đâ ̣c trưng chô hầnh đô ̣ng lê ̣nh
➔Mẫ lê ̣nh gợi nhớ.
Dô vâ ̣y, cần mô ̣t trình biê n dịch hợp ngữ để dịch lê ̣nh dậng hợp ngữ râ ngô n ngữ mấy.
Trang 61.Tổng quan về ASM
• Trình hợp ngữ : Dịch chương trình hợp ngữ râ ngô n ngữ mẫ mấy.
• Trình biê n dịch : Dịch ngô n ngữ lâ ̣p trình
bâ ̣c câô râ ngô n ngữ mẫ mấy.
• ➔Sô sấnh với cấc ngô n ngữ lâ ̣p trình bâ ̣c câô.
Trang 72.Các đoạn chương trình
• Mô ̣t CT ASM cố 3 đôận chính:
dâtâ,stâck,côdê
• Đôận dữ liê ̣u :
được sử dụng để chứâ dữ liê ̣u củâ CT
• Sâu .DATA sễ lầ khâi bấô biến hây hầng
Trang 82.Các đoạn chương trình
• Đôận ngâ n xếp :
được sử dụng để chứâ dữ liê ̣u truy xuất thêô phương thức FILO
• Cú phấp khâi bấô
.STACK <kích thước>
Trang 92.Các đoạn chương trình
• Bê n trông đôận mẫ cấc lê ̣nh tổ chức như
mô ̣t thủ tục
Trang 102.Các đoạn chương trình
Trang 113.Cấu trúc chung của một
lệnh
• <Tê n> <Tôấn tư> <Tôấn hậng> <Chúgiẩi>
• A.Trường tên
• B.Trường tôấn tử
• C.Trường tôấn hậng
• D.Trường chú giẩi
Trang 123.Cấu trúc chung của một
lệnh
• Trường tên
được sử dụng lầm nhẫn lê ̣nh, tê n thủ tục hôâ ̣c
tê n biến
• Chiều dầi từ 1 đến 31 ký tự
• Bâô gồm : chữ cấi, chữ số vầ cấc ký tự đâ ̣c biê ̣t
( ? @ _ $ % ) với Phẩi đứng đầu tên
• Khô ng phâ n biê ̣t chữ hôâ , chữ thường
Trang 133.Cấu trúc chung của một lệnh
Trang 143.Cấu trúc chung của một lệnh
• Trường tôấn tử
chứâ mẫ lê ̣nh dậng hợp ngữ
• Ví dụ
MOVADDSUB
Trang 153.Cấu trúc chung của một
lệnh
• Trường tôấn hậng
xấc định dữ liê ̣u sễ được cấc thâô tấc tấc đô ̣ng lên
• Cố thể khô ng cố hôâ ̣c cố 1 hôâ ̣c hâi tôấn hậng trông 1 chỉ thị
NOPINC AXADD WORD1,2
Trang 163.Cấu trúc chung của một lệnh
• Trường chú giẩi
để giẩi thích dồng lê ̣nh đố lầm gì
• Bất đầu bầng dấu ;
Trang 174.Dữ liệu chương trình
• Cấc số
• Cấc ký tự
Trang 184.Dữ liệu chương trình
• Cấc số :
– Số nhị phâ n : kết thúc bầng chữ b
– Số thâ ̣p phâ n : kết thúc bầng chữ d hôâ ̣c khô ng cố – Số thâ ̣p lục phâ n : kết thúc bầng chữ h vầ bất đầu bầng chữ số thâ ̣p phân
Trang 194.Dữ liệu chương trình
Trang 204.Dữ liệu chương trình
• Cấc ký tự
phẩi được đâ ̣t trông dấu nhấy đơn ‘ hôâ ̣c dấu nhấy kếp “
• Ví dụ :
“A” = ‘A’ =41h
“HELLO”=‘H’’E’’L’’L’’O’
Trang 214.Dữ liệu chương trình
• Cấc tôấn tử định nghĩâ số liê ̣u
Toán tử giả Biểu diễn
DB định nghĩâ bytê
DW định nghĩâ wôrd
DD định nghĩâ từ kếp
DQ định nghĩâ 4 wôrd(4 từ liê n tiếp)
DT định nghĩâ 10bytê(10bytê liê n
tiếp)
Trang 225.Các biến
• Biến kiểu bytê
• Biến kiểu wôrd
• Cấc mẩng
• Cấc chuỗi ký tự
Trang 23• Giới hận thâ ̣p phâ n : -128 đến 127 (kiểu cố dấu)
0 đến 255 (kiểu khô ng dấu)
Trang 24• Giới hận thâ ̣p phâ n : -32768 đến 32767 (kiểu cố dấu)
0 đến 65535 (kiểu khô ng dấu)
Trang 25;định nghĩâ mẩng 3 bytê cố tê n B_ARRAY
;B_ARRAY được gấn chô bytê đầu tiê n
;B_ARRAY +1 được gấn chô bytê thứ hâi
;B_ARRAY + 2 được gấn chô bytê thứ bâ
Trang 275.Các biến
• Chúng tâ cố thể khởi tậô cấc giấ trị liê n tiếp giống nhâu.Khi đố tâ cố thể sử dụng tôấn tửDUP
• Ví dụ
Mâng1 DB 100Dup(5Ch)Mâng2 DB 3,4,2,10DUP(0)
Trang 28• Ví dụ :
Mẩng_2_chiều DB 10DUP(0)
10DUP(50) 10DUP(100) 10DUP(150)
Trang 295.Các biến
• Cấc chuỗi ký tự :
Cố thể được khởi tậô bầng bẩng mẫ cấc mẫ ASCII
• Phâ n biê ̣t chữ hôâ vầ chữ thường
• Ví dụ
MSG DB ‘HELLO’
Trang 306.Các hằng có tên
• Gấn tê n chô hầng sử dụng tôấn tử EQU
Trang 317.Dịch từ ngôn ngữ bậc cao sang hợp ngữ
• Hẫy viết đôận dịch củâ những dồng lê ̣nh sâu :
A=2*B
B=14-A
A=B-4*A
Trang 40• Chia cho 0
• Thương > 256 (src8)
• Thương > 65536 (src16)
Trang 41• Chia cho 0
• Thương > 256 (src8)
• Thương > 65536 (src16)
Trang 42Nhóm lệnh logic
• AND
• OR
• XOR
• NOT
Trang 43– Dst,Src phải có cùng độ dài và ko đồng thời là 2
ô nhớ,2 thanh ghi đoạn
– Các cờ bị thay đổi : CF,OF,SF,ZF,PF
– Thường dùng để che đi/giữ lại những vị trí cần che đi/giữ lại tương ứng.
Trang 44– Dst,Src phải có cùng độ dài và ko đồng thời là 2
ô nhớ,2 thanh ghi đoạn
– Các cờ bị thay đổi : CF,OF,SF,ZF,PF
– Thường dùng để một vài bit nào đó của toán
hạng lên 1
Trang 45– Dst,Src phải có cùng độ dài và ko đồng thời là 2
ô nhớ,2 thanh ghi đoạn
– Các cờ bị thay đổi : OF,SF,ZF,PF
– Thường dùng để trả về 0 một thanh ghi nào đó.
Trang 46– Dst,Src phải có cùng độ dài và ko đồng thời là 2
ô nhớ,2 thanh ghi đoạn
– Các cờ không bị thay đổi
– Thường dùng đảo bit (lấy bù 1) một thanh ghi nào đó.
Trang 47Nhóm lệnh dịch và quay
Trang 48• Shift Arithimetically/Logic left
• SAL/SHL Dst,CL
• Với SAL, thì msb ko đổi sau khi thực hiện lệnh
• Có ảnh hưởng tới các cờ : ZF,OF,CF,PF và SF(đối với SHL)
0
CF
LÖnh SHL
Trang 50• Giống với SAL/SHL nhưng là dịch phải
Trang 53• Quay trái, quay phải qua cờ nhớ
• Thực hiện giống ROL/ROH nhưng CF có tham gia vào vòng quay
Trang 54Nhóm lệnh so sánh
• CMP
Trang 55– Sau lệnh, toán hạng không thay đổi
– Chỉ thay đổi các cờ : AF,CF,OF,PF,ZF,SF
Trang 56Nhóm lệnh xử lý với chuỗi
• MOVS :MOVSB, MOVSW
• CMPS :CMPSB, CMPSW
• SCAS :SCASB, SCASW
• LODS :LODSB, LODSW
• STOS :STOSB, STOSW
• REP
Trang 62• REP lệnh xử lý chuỗi
STOSB/STOSW lặp lại cho đến khi CX=0
Trang 63Ví dụ
• Chép 80h byte từ địa chỉ
3000h:1000h đến địa chỉ 4800h:C200h
Trang 64Các lệnh điều khiển chương trình
• Nhóm lệnh dịch chuyển thanh ghi cờ
• Lệnh nhảy
• Lệnh vòng lặp
• Lệnh cho chương trình con
Trang 65Nhóm lệnh chuyển cờ hiệu
• LAHF
• SAHF
• PUSHF
• POPF
Trang 66• Load AH from Flag : Chuyển các cờ
SF,ZF,AF,PF và CF vào các bit 7,6,4,2 và O của thanh ghi AH (các bit còn lại không đổi
Trang 67• Store AH to Flag
• Chuyển các bit 7,6,4,2 và 0 của thanh ghi AH vào các cờ SF,ZF,AF,PF và CF
Trang 68PUSHF và POPF
• PUSHF : chuyển thanh ghi cờ vào Stack.
• POPF : lấy dữ liệu từ Stack chuyển vào thanh ghi cờ.
Trang 69Lệnh lặp
Trang 71– Dừng LOOP khi CX=0 hoặc ZF=0
– Các cờ không bị thay đổi
Trang 72– Dừng LOOP khi CX=0 hoặc ZF=1
– Các cờ không bị thay đổi
Trang 73Các lệnh nhảy
• Nhảy không điều kiện
• Nhảy có điều kiện
Trang 74Nhảy không điều kiện
• JMP Label
– JMP short Label (-128đến 127)
– JMP near Label (-32768đến 37767) – JmP reg16
– JMP mem16
– JMP mem32
– JMP far Label
Trang 75Nhảy không điều kiện
• short Label :IP <- IP+offset
• near Label :IP <- địa chỉ
IP <- [mem +1,mem]
• far Label :CS <- PTR segment
IP <- PTR offset
Trang 76Nhảy có điều kiện
• Jxxx Label
• Nếu thỏa đk thì nhảy tương đối
ngược lại sẽ không làm gì cả (qua lệnh kế)
Trang 77Nhảy có điều kiện
• Khi thực hiện so sánh không dấu
Trang 78Nhảy có điều kiện
• Khi thực hiện so sánh các số có dấu
Trang 79Các lệnh cho chương trình con
• CALL
• RET
Trang 80• CALL thủ tục
• Mô tả : Chuyển hoạt động của CTC sang ctc
– Gọi gần : ctc nằm trong cùng một đoạn mã với CTC (CALL near)
– Gọi xa : ctc không nằm trong cùng một đoạn mã với CTC (CALL far)
– Các cờ bị thay đổi : AF,CF,OF,PF,ZF,SF
Trang 81– Địa chỉ lệch của ctc -> IP
– Khi gặp RET thì VXL lấy lại địa chỉ trở về
IP từ Stack
– SP+2->SP
Trang 82– Địa chỉ lệch của ctc -> IP
– Khi gặp RET thì VXL lấy lại địa chỉ trở về IP từ
Stack
– SP+2->SP,lấy lại địa chỉ IP
– SP+2->SP,lấy lại địa chỉ CS
Trang 83Một số lệnh điều khiển khác
Trang 848.Khung của một chương trình
ASM
• Cấu trúc chương trình dịch râ tê ̣p *.EXE
• Cấu trúc chương trình dich râ tê ̣p *.COM
Trang 85• ;khới đầu cho DS
• MOV AX, @data
Trang 86• Khâi bấô quy mô sử dụng bô ̣ nhớ
.MODEL <kiểu kích thước bô ̣ nhớ>
Ví dụ: MODEL SMALL
• Khâi bấô đôận ngâ n xếp
.STACK <kích thước>
Ví dụ: STACK 100
Trang 87• Khâi bấô đôận dữ liê ̣u
.DATA
Khâi bấô cấc biến vầ cấc hầng
• Khâi bấô đôận mẫ
.CODE
Trang 88Kiểu Mô tả
Tiny (hẹp) mã lệnh và dữ liệu gói gọn trong một
đoạn Small (nhỏ) mã lệnh nằm trong 1 đoạn, dữ liệu 1
đoạn Medium
Large (lớn) mã lệnh nằm trong nhiều đoạn, dữ liệu
trong nhiều đoạn, không có mảng nào lớn hơn 64 K
Huge (đồ
sộ)
mã lệnh nằm trong nhiều đoạn, dữ liệu trong nhiều đoạn, các mảng có thể lớn hơn 64 K
Trang 89Thực hiện lệnh trong CT
Quá trình luôn thực hiện như vậy?
Trang 90Quá trình thực hiện là dừng khi
• Ngắt nguồn điện ra khỏi hệ thống
• Gặp lệnh dừng (Shutdown)
• Gặp tình huống không xử lý được
• Gặp lỗi phần cứng
Trang 91CPU tạm dừng chương trình đang thực hiện chuyển sang thực hiện một chương trình
khác,gọi là chương trình con phục vụ ngắt
• Các loại ngắt :
– Ngắt do lỗi thực hiện CT
– Ngắt do lỗi phần cứng
– Ngắt do module I/O phát ra tín hiệu ngắt đến CPU yêu cầu trao đổi dữ liệu
Trang 92Hoạt động của ngắt
Trang 93Xử lý tín hiệu ngắt
Cấm ngắt Cho phép ngắt Ưu tiên ngắt
Bộ VXL bỏ
qua các ngắt
tiếp theo trong
khi đang xử lý
ngắt
Bộ VXL sẽ xử
lý các ngắt tuần tự nếu cùng thứ tự ưu tiên
Các ngắt trong máy tính được định nghĩa mức độ ưu tiên khác nhau.
Trang 94Các loại ngắt
• Ngắt mềm : Được gọi bằng lệnh ở trong CT ngôn ngữ máy.Lệnh đó là INT,nó được sử dụng cùng với stt ngắt.
• Ngắt cứng : Được khởi động bằng linh kiện điện tử trong PC
– Ngắt cứng ngoài : được kích hoạt bởi thiết bị ngoài.
• Ngắt bị cấm
• Ngắt không bị cấm
– Ngắt cứng trong : được kích hoạt bởi các linh kiện bổ trợ nằm trên bảng mạch của PC.
Trang 95Các loại ngắt
• Lê ̣nh Int được sử dụng để gội cấc chương trình ngất củâ DOS vầ BIOS.
• INT Số hiê ̣u ngất
• INT 21h được sử dụng để gội ngất trông DOS
Trang 96INT 21h
Số hiệu hàm Chương trình
Ng̣uyê n tấc củâ ngất 21 : nhâ ̣n dữ liê ̣u trông cấc thânh ghi nầô đố vầ trẩ về kết quẩ
trông cấc thânh ghi khấc
Trang 97INT 21h với hàm 1
• Vầô AH=1
• Râ AL=mẫ ASCII
(=0 nếu mô ̣t ký tự điều khiển hây chức nâ ng được nhấn)
• Gội phục vụ
MOV AH,1 INT 21h
Trang 98INT 21h với hàm 2
• Vầô AH=2
DL=mẫ ASCII củâ ký tự điều khiển hây
ký tự hiển thị
• Râ AL=mẫ ASCII
(=0 nếu mô ̣t ký tự điều khiển hây chức nâ ng được nhấn)
• Gội phục vụ
MOV AH,2 MOV DL,’?’
INT 21h
Trang 99INT 21h với hàm 2
• Nếu DL chứâ mẫ ASCII củâ ký tự điều khiển, hầm nầy sễ thi hầnh chức nâ ng điều khiển đố
• Cấc ký tự điều khiển quân trộng
Mẫ ASCII Ký hiê ̣u Chức nâ ng
7 BEL phất tiếng bíp
8 BS lùi lậi mô ̣t vị trí
A LF về đầu dồng
D CR xuống dồng
Trang 100INT 21h
• Để kết thúc chương trình tâ sử dụng hầm gội ngất 4Ch củâ ngất 21
Trang 101Ví dụ1
• Viết mô ̣t chương trình độc vầô mô ̣t ký tự từ bần phím vầ hiển thị nố ở đầu dồng tiếp thêô
Trang 102INT 21h với hàm 9
• Hiển thị mô ̣i chuỗi
Trang 103Đoạn mở đầu của một chương trình
• Khi CT được nập vầô bô ̣ nhớ, DOS sễ dầnh 256bytê đôận mở đầu CT (PSP_Prôgrâm Sêgmênt Prêfix)
• DOS sễ đưâ địâ chỉ củâ PSP vầô cẩ DS vầ ES trước khi thi hầnh CT
• Vâ ̣y, mở đầu củâ CT phẩi thực hiê ̣n
MOV AX,@DATAMOV DS,AX
Trang 104Ví dụ2
• In chuỗi “HELLO” râ mần hình
Trang 106Ví dụ3
• Viết mô ̣t CT hợp ngữ thực hiê ̣n in hâi chuỗi kýtự trê n hâi dồng mần hình
Trang 107• ;khới đầu cho DS
• MOV AX, @data
Trang 108; Chương trình con nếu có ở đây End Start ; Start: bắt đầu câu lệnh đầu tiên
Khung của chương trình hợp ngữ dịch
thành *.com
Trang 109• 5 bước tạo, dịch và chạy chương trình
hợp ngữ
1 Soạn thảo asm
2 .asm -> obj
3 link obj -> exe
4 .exe -> com (Nếu chương trình hợp ngữ viết
Trang 111• VÝ dô :
• B1 : Sôận thẩô vâ n bẩn chương trình
Cách tạo và chạy một CT hợp ngữ
Trang 112• B2 : Dịch râ tê ̣p OBJ
Cách tạo và chạy một CT hợp ngữ
Trang 113• Nếu cố lỗi thì quây trở lậi bước 1
Cách tạo và chạy một CT hợp ngữ
Trang 114• B3 :Liê n kết cấc tê ̣p OBJ thầnh tê ̣p chương trình
Cách tạo và chạy một CT hợp ngữ
Trang 115• B4:Tê ̣p tin cố đuô i êxê nê n bổ quâ B4
• B5: Chậy tê ̣p chương trình
Vidu_êxê
Cách tạo và chạy một CT hợp ngữ
Trang 116II/Các cấu trúc lập trình
• Cấu trúc tuần tự
• Cấu trúc rễ nhấnh
• Cấu trúc lâ ̣p
Trang 117Các cấu trúc lập trình
• Cấu trúc tuần tự
• Cấu trúc rễ nhấnh
• Cấu trúc lâ ̣p
Trang 118Cấu trúc rẽ nhánh
• Cấc lê ̣nh chuyển điều khiển sử dụng trông cấu trúc nầy :
– NEAR
– JMP
– Jxxx
Trang 119Cấu trúc tuần tự
Trang 120Cấu trúc rẽ nhánh
• IF… THEN…
• IF… THEN… ELSE…
• CASE… OF…
Trang 121Cấu trúc rẽ nhánh
• IF… THEN
• IF điều_kiê ̣n
THEN cô ng_viê ̣c
Trang 122Cấu trúc rẽ nhánh
• IF… THEN
• Ví dụ : Viết mô ̣t đôận chương trình nhâ ̣p mô ̣t kýtự Nếu ký tự đố lầ ‘A’ thì hiển thị tậi đầu dồng tiếp thêô
Trang 123Cấu trúc rẽ nhánh
• IF… THEN… ELSE…
• IF đk THEN
cô ng_viê ̣c_1
ELSE
cô ng_viê ̣c_2ENDIF
Trang 124Cấu trúc rẽ nhánh
• IF… THEN… ELSE…
• Viết mô ̣t đôận chương trình thực hiê ̣n nhâ ̣p vầô từ bần phím mô ̣t ký tự.Nếu ký tự nhâ ̣p cố mẫ ASCII nhổ hơn 1 thì đưâ râ mần hình thô ng bấô “Ký tự nầy đứng trước ‘1’ trông bẩng mẫ”, ngược lậi đưâ râ mần hình thô ng bấô “Ký tự nầy đứng sâu ‘1’ trông bẩng mẫ”
Trang 125Cấu trúc rẽ nhánh
• CASE… OF
• CASE biểu_thức
Giấ_trị_1:CV_1Giấ_trị_2:CV_2
……
Giấ_trị_n:CV_nEND CASE
Trang 126Cấu trúc rẽ nhánh
• CASE… OF
• Viết mô ̣t đôận chương trình nhâ ̣p vầô mô ̣t kýtự.Nếu ký tự đứng trước ‘A’ trông bẩng mẫ
ASCII thì đưâ râ thô ng bấô “Ký tự đứng trước
‘A’”.Nếu ký tự nhâ ̣p vầô lầ ‘A’ thì đưâ râ thô ng bấô “Chính lầ ký tự ‘A’”.Nếu ký tự nhâ ̣p vầô
đứng sâu ‘A’ thì đưâ râ thô ng bấô “Ký tự đứng sâu ‘A’”
Trang 127Cấu trúc rẽ nhánh với điều kiện kép
• Lầ cấu trúc rễ nhấnh trông đố điều kiê ̣n lầ sựkết hợp củâ hâi hây nhiều điều kiê ̣n khấc
– Điều kiê ̣n kết hợp AND
– Điều kiê ̣n kết hợp OR
Trang 128Cấu trúc rẽ nhánh với điều kiện kép
• Viết vầô mô ̣t chương trình nhâ ̣p vầô mô ̣t kýtự.Kiểm trâ xêm ký tự nhâ ̣p vầô cố phẩi lầ chữsố không
• Viết vầô mô ̣t chương trình nhâ ̣p vầô mô ̣t kýtự.Kiểm trâ xêm ký tự nhâ ̣p vầô cố phẩi lầ chữ
‘Y’ hôâ ̣c chữ ‘y’ không
Trang 129Cấu trúc lặp
• FOR… TO… DO…
• WHILE… DO…
• REPEAT… UNTIL…
Trang 130Cấu trúc rẽ lặp
• FOR… TO… DO…
Trang 131Cấu trúc rẽ lặp
• FOR… TO… DO…
• Viết mô ̣t đôận chương trình thực hiê ̣n viê ̣c nhâ ̣p vầô mô ̣t ký tự.Sâu đố chô nố hiển thị 200 lần trê n mần hình
Trang 132Cấu trúc rẽ lặp
• WHILE… DO
Trang 133Cấu trúc rẽ lặp
Trang 134Cấu trúc rẽ lặp
• REPEAT… UNTIL
Trang 135Cấu trúc rẽ lặp