
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ế ị ạ ẩ ỗ ộ ươ ơ ả
Tóm t t lý thuy tắ ế
H p ng (aợ ữ ssembler) là ngôn ng b c th p, giúp cho ng i l p trình không ph i ghi nh mãữ ậ ấ ườ ậ ả ớ
máy (opcode) mà 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ý, có m t b l nh riêng, do đó, có 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 và đ 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 nệh>
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 có đ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” và “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).