LAP TRINH HE THONG
description
Transcript of LAP TRINH HE THONG
![Page 1: LAP TRINH HE THONG](https://reader035.fdocument.pub/reader035/viewer/2022071709/55cf8f12550346703b989d7b/html5/thumbnails/1.jpg)
Luôn luôn lắng nghe, lâu lâu mới hiểu Phạm Thái Bình_1117959
1 | P a g e L ậ p T r ì n h A s s e m b l y
0. Khai báo biến và hằng:
Bien db ?
Hang EQU <gia trị>
1. Hoán chuyển dữ liệu:
XCHG Đích, Nguồn ; Đích ↔ Nguồn
Nguồn, đích: Reg, Mem.
2. Nhóm tính toán số học
• Cú pháp:
ADD đích, nguồn ; đích ← đích + nguồn
SUB đích, nguồn ; đích ← đích - nguồn
Nguồn : Reg, Mem, Immed.
Đích : Reg, Mem.
• Cú pháp:
INC đích ; đích ← đích + 1
DEC đích ; đích ← đích - 1
Đích : Reg, Mem.
• Khác nhau không giữa 2 lệnh sau:
DEC AL
SUB AL,1
DEC không ảnh hưởng CF; SUB thì có.
3.Nhân - Chia
MUL nguồn ; NHÂN
Nguồn: Reg, Mem
• Nhân 8 bít khi nguồn là 8 bit: AX AL * nguồn
• Nhân 16 bít khi nguồn là 16 bit: DX:AX AX *
nguồn
DIV nguồn ; CHIA
Nguồn: Reg, Mem
• Chia 8 bit khi nguồn là 8 bit: AL AX / nguồn;
AH AX % nguồn
• Chia 16 bit khi nguồn là 16 bit: AX DX:AX /
nguồn;
DX DX:AX % nguồn.
4. Nhóm logic
AND đích, nguồn ; đích đích ∧ nguồn
OR đích, nguồn ; đích đích ∨ nguồn
XOR đích, nguồn ; đích đích ⊕ nguồn
TEST đích, nguồn ; Cờ đích ∧ nguồn
NOT đích ; đích đích
NEG đích ; bù 2
5.ghi dịch
SHL đích, 1 ; dịch toán hạng đích sang trái 1 bit.
SHL đích, CL ; dịch sang trái CL bít
SHR đích, 1 ; dịch trái toán hạng đích 1 bit.
SAL đích, 1 ; dịch toán hạng đích sang trái 1 bit.
SAR đích, 1 ; dịch toán hạng đích sang phải 1 bit.
ROL đích, 1; quay vòng TH đích sang trái 1 bit
ROR đích, 1 ; Quay vòng sang phải 1 bít
RCL đích, 1 ; quay vòng qua cờ sang trái
RCR đích, 1 ; quay vòng qua cờ sang phải.
Đích: Reg, Mem
6.Lệnh MOV
- Lệnh MOV không ảnh
hưởng đến các cờ.
- Không thể chuyển trực tiếp
dữ liệu giữa hai ô nhớ mà phải
thông qua một thanh ghi
MOV AX,mem1
MOV mem2,AX
- Không thể chuyển giá trị trực tiếp vào thanh ghi
đoạn
MOV AX,1010h
MOV DS,AX
- Không thể chuyển trực tiếp giữa 2 thanh ghi đoạn
- Không thể dùng thanh ghi CS làm toán hạng đích
7. Các ngắt thường dùng (21h của DOS)
• Hàm 01h: Đợi đọc 1 ký tự từ bàn phím lưu vào
AL
• Hàm 02h: Hiển thị 1 ký tự trong DL lên màn
hình
• Hàm 07h: Giống hàm 1, không hiển thị lại ký tự
• Hàm 08h: Giống hàm 7
• Hàm 09h: Hiển thị 1 chuỗi ký tự, DS:DX địa chỉ
chuỗi
• Hàm 0Ah: Đọc 1 chuỗi vào vùng đệm bộ nhớ
• Hàm 4ch: Kết thúc chương trình trở về Dos
8. Truy xuất tập tin
Trình tự truy xuất
1. Mở hay Tạo tập tin mới
2. Truy xuất nội dung
(Đọc hay Ghi)
3. Xử lý nội dung (Nếu cần)
4. Đóng tập tin
Các hàm phục vụ tập tin:
• Hàm 3Ch: Tạo tập tin mới
• Hàm 3Dh: Mở tập tin trên đĩa
Tenfile DB ‘C:\ASM\DATA.TXT’,0
• Hàm 3Fh: Đọc nội dung tập tin vào bộ nhớ
• Hàm 40h: Ghi dữ liệu trong bộ nhớ vào tập tin
• Hàm 3Eh: Đóng file
• Hàm 41h: Xóa tập tin trên đĩa
• Hàm 42h: Thay đổi con trỏ tập tin
9. Nhảy không điều kiện: luôn luôn
nhảy
• Cú pháp: JMP <Đích> ; IP Đích
; đích: Immed16, Reg16, Mem16
JMP SHORT <Đích> ; Nhảy ngắn
JMP NEAR <Đích> ; Nhảy gần
JMP FAR <Đích> ; Nhảy xa
![Page 2: LAP TRINH HE THONG](https://reader035.fdocument.pub/reader035/viewer/2022071709/55cf8f12550346703b989d7b/html5/thumbnails/2.jpg)
Luôn luôn lắng nghe, lâu lâu mới hiểu Phạm Thái Bình_1117959
2 | P a g e L ậ p T r ì n h A s s e m b l y
10. Lệnh so sánh:
CMP Trái, Phải
; Cờ Trái – Phải
Trái > Phải : C=Z=0
Trái < Phải: C=1, Z=0
Trái = Phải: C=0, Z=1
11. Nhảy có điều kiện:
Jxx <Đích>
; đích: immed16, Reg16, Mem16
Trong đó:
B,L: <
A,G: >
E,Z: =
C: có nhớ
S: có dấu
O: có tràn
Vd: JCXZ ; nhảy nếu CX =0
12. Vòng Lập:
* LOOP for
MOV CX, n ; n là số lần lặp
nhan:
Các lệnh cần lặp lại
LOOP nhan
Ví dụ: in ra màn hình các ký tự từ A đến Z
MOV DL, ‘A’ ; DL ← ‘A’
MOV CX, 26 ; A→Z: 26 ký tự
inkytu: MOV AH, 02h
INT 21h
INC DL ; DL tăng lên 1 để có ký tự kế
LOOP inkytu
*LOOPZ/LOOPE do...while
Tự động giảm CX một đơn
vị, nếu
CX ≠ 0 và ZF = 1 thì nhảy đến
Đích để thực hiện lệnh.
Ngược lại, nếu CX = 0 hay ZF
= 0 thì không nhảy, khi đó
lệnh viết sau lệnh nhảy được
thực hiện.
Cấu trúc vòng lặp do … while
viết bằng LOOPZ:
MOV CX, n
nhan: <Các lệnh cần lập>
LOOPZ nhan
*LOOPNZ/LOOPNE
Tự động giảm CX một đơn vị,
nếu CX ≠ 0 và ZF = 0 thì nhảy
đến Đích để thực hiện lệnh.
Ngược lại, nếu CX = 0 hay ZF
= 1 thì không nhảy, khi đó
lệnh viết sau lệnh nhảy được
thực hiện
Cấu trúc vòng lặp do … while
viết bằng LOOPNZ:
MOV CX, n
nhan: <Các lệnh cần lập>
LOOPNZ nhan
![Page 3: LAP TRINH HE THONG](https://reader035.fdocument.pub/reader035/viewer/2022071709/55cf8f12550346703b989d7b/html5/thumbnails/3.jpg)
Luôn luôn lắng nghe, lâu lâu mới hiểu Phạm Thái Bình_1117959
3 | P a g e L ậ p T r ì n h A s s e m b l y
MỘT SỐ BÀI TẬP :
Bài 1: Nhập vào 1 ký tự thường. In ra màn hình
chuỗi ký tự từ ký tự vừa nhập đến z.
comment *
coder: Pham Thai Binh
***********************
data segment
string1 db 'hay nhap 1 ky tu thuong: $'
string2 db 10,13,'chuoi ky tu den z la: $'
kytu db ?
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov ah,09h
lea dx,string1
int 21h
mov ah,07h
int 21h
mov kytu,al
mov dl,kytu
mov ah,02h
int 21h
mov ah,09h
lea dx,string2
int 21h
mov dl,kytu
nhan:
mov ah,02h
int 21h
mov [si],dl
mov dl,20h
mov ah,02h
int 21h
mov dl,[si]
inc dl
cmp dl,'z'
jna nhan
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
end start
Bài 2: Chương trình :
Nhập ký tự c,C in ra “Good afternoon!”
Nhập ký tự t,T in ra “'Good evening!”
Nhập ký tự s,S in ra “Good morning!”
comment *
coder: Pham Thai Binh
***********************
Nhập vào t,T in ra “Good evening!”
Nhập vào s,S in ra “ Good morning!”
data segment
string1 db 'Hay nhap vao 1 trong cac ky tu: c, C, s,
S, t, T: $'
strings db 10,13,'Good morning!$'
stringt db 10,13,'Good Afternoon!$'
stringc db 10,13,'Good everning!$'
nhap db 10,13,'Ky tu vua nhap khong thoa man yeu
cau!$'
hoi db 10,13,'Ban co muon tiep tuc khong? (y/n): $'
lai db 10,13,'Ban phai nhap y or n $'
xuongdong db 10,13, '$'
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov ah,09h
lea dx,string1
int 21h
mov ah,01h
int 21h
cmp al,'c'
je chieu
cmp al,'C'
je chieu
cmp al,'s'
je sang
cmp al,'S'
je sang
cmp al,'t'
je trua
cmp al,'T'
je trua
mov ah,09h
lea dx,nhap
int 21h
jmp tiep
sang:
mov ah,09h
![Page 4: LAP TRINH HE THONG](https://reader035.fdocument.pub/reader035/viewer/2022071709/55cf8f12550346703b989d7b/html5/thumbnails/4.jpg)
Luôn luôn lắng nghe, lâu lâu mới hiểu Phạm Thái Bình_1117959
4 | P a g e L ậ p T r ì n h A s s e m b l y
lea dx,strings
int 21h
jmp tiep
trua:
mov ah,09h
lea dx,stringt
int 21h
jmp tiep
chieu:
mov ah,09h
lea dx,stringc
int 21h
jmp tiep
tiep:
mov ah,09h
lea dx,hoi
int 21h
mov ah,01h
int 21h
cmp al,'n'
je exit
cmp al,'y'
mov ah,09h
lea dx,xuongdong
int 21h
je start
je hoilai
hoilai:
mov ah,09h
lea dx,lai
int 21h
jmp tiep
exit:
mov ah,4ch
int 21h
code ends
end start
Bài 3: Đổi ký tự hoa vừa nhập thành ký tự Hoa
comment *
coder: Pham Thai Binh
***********************
data segment
string1 db 'Hay nhap vao 1 ky tu thuong: $'
string2 db 10,13,'In hoa ky tu vua nhap: $'
inhoa db ?
data ends
code segment
assume cs:code, ds:data
begin:
mov ax,data
mov ds,ax
mov ah,09h
lea dx,string1
int 21h
mov ah,01h
int 21h
mov inhoa,al
mov ah,09h
lea dx,string2
int 21h
sub inhoa,20h
mov dl,inhoa
mov ah,02h
int 21h
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
end begin
Bài 4: Nhận diện ký tự vừa nhập là hoa hay
thường
comment *
coder: Pham Thai Binh
***********************
data segment
string1 db 'Hay nhap vao 1 ky tu: $'
string2 db 10,13,'Ky tu HOA$'
string3 db 10,13,'Ky tu thuong$'
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov ah,09h
lea dx,string1
int 21h
mov ah,01h
int 21h
cmp al,'Z'
ja thongbao
mov ah,09h
lea dx,string2
int 21h
jmp exit
thongbao:
mov ah,09h
lea dx,string3
int 21h
exit:
![Page 5: LAP TRINH HE THONG](https://reader035.fdocument.pub/reader035/viewer/2022071709/55cf8f12550346703b989d7b/html5/thumbnails/5.jpg)
Luôn luôn lắng nghe, lâu lâu mới hiểu Phạm Thái Bình_1117959
5 | P a g e L ậ p T r ì n h A s s e m b l y
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
end start
Bài 5: Nhập ký tự .. hiện ký tự trc và sau nó
comment *
coder: Pham Thai Binh
***********************
data segment
string1 db 'Hay nhap vao 1 ky tu: $'
string2 db 10,13,'Ky tu truoc no la: $'
string3 db 10,13,'Ky tu sau no la: $'
kt db ?
data ends
code segment
assume cs:code, ds:data
begin:
mov ax,data
mov ds,ax
mov ah,09h
lea dx,string1
int 21h
mov ah,01h
int 21h
mov kt,al
mov ah,09h
lea dx,string2
int 21h
mov dl,kt
sub dl,1
mov ah,02h
int 21h
mov ah,09h
lea dx,string3
int 21h
mov dl,kt
add dl,1
mov ah,02h
int 21h
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
end begin
Bài 6: Đề thi học kỳ 1 (2013-2014):
Viết 1 chương trình:
Hiển thị họ tên và mã số sinh viên. Sau đó, cho
nhập vào 1 chuỗi bất kỳ (tối đa 30 ký tự) , đỗi
tât cả các ký tự trong chuỗi vừa nhập từ chữ hoa
sang chữ thường và in ra chuỗi thường.
comment *
coder: Pham Thai Binh
***********************
data segment
string1 db 'Ho va Ten: Pham Thai Binh $'
string2 db 10,13,'MSSV: 1117959 $'
string3 db 10,13,'Hay nhap vao 1 chuoi bat ky: $'
string4 db 10,13,'Chuoi sau khi xu ly la: $'
xuongdong db 10,13,'$'
max db 30
len db ?
nhap db 31 dup('$')
data ends
code segment
assume cs:code,ds:data
begin:
mov ax,data
mov ds,ax
mov ah,09h
lea dx,string1
int 21h
mov ah,09h
lea dx,string2
int 21h
mov ah,09h
lea dx,string3
int 21h
mov ah,0ah
lea dx,max
int 21h
mov di,0
start:
cmp nhap[di],' '
jz exit
cmp nhap[di],'Z'
jbe thuong
jmp exit
thuong:
add nhap[di],32
exit:
inc di
mov ax,di
cmp len,al
jne start
mov ah,09h
lea dx,string4
int 21h
mov ah,09h
![Page 6: LAP TRINH HE THONG](https://reader035.fdocument.pub/reader035/viewer/2022071709/55cf8f12550346703b989d7b/html5/thumbnails/6.jpg)
Luôn luôn lắng nghe, lâu lâu mới hiểu Phạm Thái Bình_1117959
6 | P a g e L ậ p T r ì n h A s s e m b l y
lea dx,nhap
int 21h
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
end begin
Bài 7: Nhập vào một tên, hiển thị lời chào tên
vừa nhập
comment *
coder: Pham Thai Binh
***********************
data segment
string1 db 'Hay nhap ten ban vao: $'
string2 db 10,13,'Xin chao ban: $'
nhapten db 30,?,31 dup('$')
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ah,09h
lea dx,string1
int 21h
mov ah,0ah
lea dx,nhapten
int 21h
mov ah,09h
lea dx,string2
int 21h
mov ah,09h
lea dx,nhapten+2
int 21h
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
end start
Bài 8: Phân biệt kí tự nhập vào là kí tự Hoa,
thường ,chữ số hay kí tự đặc biệt.
comment *
coder: Pham Thai Binh
***********************
dseg segment
msg1 db 'Nhap vao 1 ky tu: $'
msg2 db 10,13,"Loai cua ky tu vua nhap la: $"
tb1 db " ky tu dac biet $"
tb2 db " chu cai thuong $"
tb3 db " chu cai in hoa $"
tb4 db " chu so $"
kytu db ?
dseg end
cseg segment
assume cs: cseg, ds: dseg
start:
mov ax, dseg
mov ds, ax
mov ah, 09h
lea dx, msg1
int 21h
mov ah, 01h
int 21h
mov kytu, al
mov ah, 09h
lea dx, msg2
int 21h
cmp kytu, 30h
jb dacbiet
cmp kytu, 39h
jb chuso
cmp kytu, 41h
jb dacbiet
cmp kytu, 5Bh
jb chuhoa
cmp kytu, 61h
jb dacbiet
cmp kytu, 7Bh
jb chuthuong
jmp dacbiet
dacbiet:mov ah, 09h
lea dx, tb1
int 21h
jmp exit
chuthuong: mov ah, 09h
lea dx, tb2
int 21h
jmp exit
chuhoa: mov ah, 09h
lea dx, tb3
int 21h
jmp exit
chuso: mov ah, 09h
![Page 7: LAP TRINH HE THONG](https://reader035.fdocument.pub/reader035/viewer/2022071709/55cf8f12550346703b989d7b/html5/thumbnails/7.jpg)
Luôn luôn lắng nghe, lâu lâu mới hiểu Phạm Thái Bình_1117959
7 | P a g e L ậ p T r ì n h A s s e m b l y
lea dx, tb4
int 21h
jmp exit
exit: mov ax, 4ch
int 21h
cseg ends
end start
Bài 9: In chuỗi kí tự từ A đến Z.
comment *
coder: Pham Thai Binh
***********************
code segment
assume cs:code
start:
mov ax,data
mov ds,ax
mov dl,'A'
mov cx,26
inkytu:
mov ah,02h
int 21h
inc dl
loop inkytu
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
end start