Bài th c hành s 1
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ế ươ ơ
m t t lý thuy t ế
H p ng (a ssembler) ngôn ng b c th p, giúp cho ng i l p trình không ph i ghi nh ườ
máy (opcode) 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ý, m t b l nh riêng, do đó, 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 đ 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 “Hello !”ươ
.model small
.stack 100h
.data
s DB “Hello !$” ; khai báo xâu kí t c n in
.code
mov AX,@data ; l y đ a ch data segment ghi vào DS
mov DS,AX ; Vì model small, đây cũng là đ a ch
; segment c a xâu s
; xu t chu i
mov DX, OFFSET s ; l y đ a ch offset ghi vào DX
mov AH , 9
int 21h ; g i hàm 9, ng t 21h đ in
mov AH, 4Ch ; Thoát kh i ch ng trình ươ
int 21h
end
L u ý:ư
- M i ch ng trình đ u ph i đ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(?))
D ch, liên k t, ch y và ch n l i ch ng trình t d u nh c DOS ế ươ
C n có các file: tasm.exe (d ch), tlink.exe (liên k t), td.exe (ch n l i). Các b c nh sau: ế ướ ư
B1. Thi t lếp đ ng d n ườ
path = %path%; ng d n đ n th m c ch a các file k trên> ườ ế ư
B2. Biên d ch t file .ASM sang file .OBJ
Tasm <tên file ch ng trình>.ASMươ
B3. Biên d ch t file .OBJ sang file .EXE
Tlink <tên file>.OBJ
B4: ch y ch ng trình: ươ
<tên file>.EXE
B5: ch n l i (n u c n thi t) ế ế
Td <tên file>.EXE
Đ t đ ng hóa, ta có th t o file .BAT ch a các l nh trên.
Ví d :
T o file RunASM.bat trong cùng th m c v i t p tin .ASM v i n i dung nh sau : ư ư
tasm %1
tlink %1
%1
(%1 là l y tham s th nh t trong command line)
Sau đó đ biên d ch, liên k t và th c thi ch ng trình hello.ASM ta ch c n gõ : ế ươ
RunASM hello
Công c EditPlus
Đây là công c so n th o văn b n ti n d ng, cho phép t đ ng đ i màu ch theo cú pháp.
Ngoài ra còn có th thi t đ t phím t t đ g i các ti n ích khác. Đ dùng cho so n th o ế
ch ng trình assembler, c n copy file đ nh nghĩa cú pháp vào th m c cài đ t và đăng kí sươ ư
d ng nó cho nh ng file có tên m r ng “.asm”.
B0. C u hình Edit Plus: xem trong file h ng d nướ
B1. Biên d ch file .ASM : nh n Ctrl + 1 s biên d ch file đang so n th o thành .OBJ
B2. Liên k t : nh n Ctrl + 2 s biên d ch file .OBJ thành .EXEế
B3. Ch y ch ng trình : nh n Ctrl + 3 s ch y ch ng trình .EXE ươ ươ
B4. Ch n l i ch ng trình : nh n Ctrl + 4 s debug ch ng trình .EXE ươ ươ
L u ý: ư
- Đ tránh phi n ph c khi làm vi c v i Turbo Assembler, tránh đ t tên th m c có ch a ư
kho ng tr ng.
- Tr c khi nh n Ctrl + 1 l n đ u tiên, nh l u ch ng trình v i tên c n thi t.ướ ư ươ ế
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 tham kh o
1. Nguy n Minh Tu n, Giáo trình h p ng - Ch ng 1, ĐHKHTN, 2002 ươ
2. Randal Hyde, The art of assembly language programming – Chapter 1.
3. Norton Guide
4. Dan Rollins, TechHelp v.6.0
Bài t p
B à i 1. Vi t CT nh p vào 1 ký t , xu t ra ký t đóế
V í d :
Moi ban nhap 1 ky tu: b
Ky tu v a nh p: b
B à i 2. Vi t ch ng trình xu t ra màn hình ế ươ m t s dòng.
V í d :
De chay duoc 1 CT hop ngu ban can thuc hien cac buoc sau:
Dich file ASM thanh file OBJ
Lien ket file OBJ thanh file EXE
Chay file EXE
B ài 3. Vi t CT nh p vào 1 ký t , xu t ra ký t li n tr c và li n sau.ế ướ
V í d :
Moi ban nhap 1 ky tu: b
Ky tu lien truoc: a
Ky tu lien sau: c
Bài 4. Vi t CT nh p vào 1 ký t th ng. In ra ký t Hoaế ườ
V í d :
Moi ban nhap 1 ky tu: b
Ky tu Hoa: B
Bài 5. Vi t CT nh p vào 1 ký t hoa. In ra ký t th ngế ườ
Ví d :
Moi ban nhap 1 ky tu: B
Ky tu th ng: bườ
Bài 6. Vi t ch ng trình nh p vào 2 s nguyên d ng x1, x2 (1 ế ươ ươ x2 < x1 < 9). Xu t ra k t qu ế
các phép tính: x1-1, x1 +2, x1+x2, x1-x2
Ví d :
x1 = 5
x2 = 3
x1 – 1 = 4
x1 + 1 = 6
x1 + x2 = 8
x1 – x2 = 7
M r ng
1. T tìm hi u xem hàm nào trong ng t 21h dùng đ nh p m t xâu kí t ? Ngoài ng t 21h,
còn ng t nào có th dùng đ nh p xu t t bàn phím ? (dùng NortonGuide ho c TechHelp).
2. Vi t ch ng trình nh p tên và in ra màn hình câu “Hello ” + tên đã nh pế ươ .
3. Tìm hi u xem t i sao không có l nh MOV x1, x2 (x1,x2 là hai bi n trong b nh ) ế
4. Hai l nh “INC AX”“ADD AX, 1” khác nhau ch nào ?
H ng d nướ
Bài 1. Đ nh p 1 m t ký t s d ng hàm 1 c a ng t 21h, đ xu t, s d ng hàm 2.
Ví d :
mov AH,1
int 21h ; k t qu trong ALế
mov DL,AL ; kí t c n xu t trong DL
mov AH,2
int 21h
Bài 2. C p kí t xu ng dòng là 10,13. Có th khai báo nhi u xâu kí t ho c chung m t xâu.
Ví d :
Msg3 DB 10,13,9,“1. Dich file ASM thanh file OBJ.$”
Msg4 DB 10,13,9,“2. Lien ket file OBJ thanh file EXE.$”
Ho c
Msg34 DB 10,13,9,“1. Dich file ASM thanh file OBJ.”
DB 10,13,9,“2. Lien ket file OBJ thanh file EXE.$”
Bài 3, 4. Kí t hoa và kí t th ng c a cùng m t ch cái ti ng Anh cách nhau 20h. Do đó, đ ườ ế
chuy n đ i ch hoa thành ch th ng và ng c l i, ch c n dùng l nh ADD, SUB. ườ ượ
Bài 5. Đ chuy n đ i các kí t ‘0’ – ‘9’ thành s 0 – 9 ch c n th c hi n phép tr đi 48 (mã c a
‘0’). Sau khi th c hi n phép tính, chuy n đ i thành kí t và in ra màn hình (có th dùng bi u di n
Hex).