YOMEDIA
Bài giảng Asssembler: Bài 4 - GV. Phạm Nguyên Văn
Chia sẻ: Minh Minh
| Ngày:
| Loại File: PDF
| Số trang:39
111
lượt xem
6
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Bài giảng Asssembler: Bài 4 trình bày các nội dung về định địa chỉ gián tiếp, toán hạng gián tiếp, giá trị ngầm phân đoạn, chạy đè phân đoạn ngầm định, toán hạng cơ sở - chỉ mục, dung thư viện kết nối, các thủ tục và ngắt,...Mời bạn đọc cùng tham khảo.
AMBIENT/
Chủ đề:
Nội dung Text: Bài giảng Asssembler: Bài 4 - GV. Phạm Nguyên Văn
- Giảng viên: Phạm Nguyên Văn
- • 1. Toán hạng gián tiếp: là thanh ghi chứa địa chỉ
của dữ liệu trong bộ nhớ, còn gọi là biến trỏ.
• Với biến DL chỉ chứa 1 thành phần, biến trỏ ít có
giá trị.
• với một mảng, biens trỏ có thể được gia số để trỏ
đến từng thành phần tiếp theo.
• Trong các thanh ghi 16bit, SI, DI, BX và BP có thể
được dùng trong các toán hạng gián tiếp.
2
- VD:
.data
aString db “ABCDEFG”
.code
mov bx,offset aString ; bx = 0200
add bx,5 ; bx = 0205
mov dl,[bx] ; dl = F
3
- • Giá trị ngầm định phân đoạn: địa chỉ được tạo bởi
1 toán hạng gián tiếp sẽ được mặc định là từ DS,
ngoại trừ BP hoặc EBP là 1 phần của toán hạng
gián tiếp.
• VD: giả sử phân đoạn ngăn xếp và phân đoạn dữ
liệu nằm tại các vị trí khác nhau:
• mov si, bp ; si và bp bằng nhau
• mov dl,[si] ; tìm trong phân đoạn dữ liệu
• mov dl,[bp] ; tìm trong phân đoạn ngăn xếp
4
- Chạy đè phân đoạn ngầm định: khi phải sử dụng
tính năng định địa chỉ gián tiếp để truy cập dữ liệu
trong 1 phân đoạn khác ngoài DS:
mov al,cs:[si] ; do dich vi tu CS
mov eax,es:[edi] ; do dich vi tu ES
mov bx,fs:[edx] ; do dich vi tu FS
mov dl,ss:[di] ; do dich vi tu SS
mov ax,gs:[ecx] ; do dich vi tu GS
5
- Tương tự, nếu sử dụng BP hoặc EBP để truy cập
dữ liệu do DS, CS, hoặc ES trỏ đến, ta cần phải
chạy đè phân đoạn:
mov dl,ds:[bp] ; do dich vi tu DS
mov al,es:[ebp]; do dich vi tu ES
mov dl,cs[bp] ; do dich vi tu CS
mov al,fs:[ebp]; do dich vi tu FS
6
- VD: cộng các số nguyên 8bit
7
- Cộng số nguyên 16bit:
8
- Hiển thị một chuỗi:
9
- • Tính tổng 1 mảng nguyên:
– .data
– intarray dw 100h,200h,300h,400h
– COUNT = ($ - intarray)/2
– .code
• mov ax,0
• mov di,offset intarray
• mov cx,COUNT
– L1:
• add ax,[di] ; cong 1 so nguyen
• add di,2 ; tro den so nguyen ke tiep
• loop L1 ; lap cho den khi cx = 0
10
- Toánhạng cơ sở và chỉ mục chủ yếu như nhau. Sự
khác biệt là: bx và bp là thanh ghi cơ sở, si và di là
thanh ghi chỉ mục.
Thanh ghi được cộng với 1 địa Thanh ghi được cộng với 1
chỉ hằng
Mov dx,array[bx] Mov ax,[bx+ROWVAL]
Mov dx,[di+array] Mov dx,[bp+4]
Mov dx,[array+si] Mov dx,2[si]
11
- Có thể cộng giá trị của thanh ghi chỉ mục và thanh
ghi cơ sở để tạo ra địa chỉ offset của bộ nhớ.
Không thể tổ hợp 2 thanh ghi cơ sở hoặc 2 thanh
ghi chỉ mục
12
- • Thư viện kết nối thông thường có dạng .lib, chứa nhiều hàm
nhập xuất chuẩn.
• Sử dụng EXTRN để định danh các tên tồn tại bên ngoài tập
tin hiện hành:
– extrn name:type
– trong đó:
• name: tên của thủ tục hoặc nhãn
• type: thuộc tính kích cỡ
• VD:
– extrn Writeint:proc
– extrn true:abs, false:abs
• Để kết nối đến file thư viện, dùng lệnh liên kết:
– ml /Fl irvine.lib filename.asm
– hoặc includelib irvine.lib
– hoặc include irvine.inc
13
- Ngắt:các chương trình trong BIOS và DOS hỗ trợ
các ứng dụng liên quan đến I/O console, đĩa, máy
in cũng như điều khiển bộ tính giờ, phân bổ bộ
nhớ.
14
- PUSH: giảm số SP và chép giá trị vào ngăn xếp tại
vị trí SP trỏ đến.
VD:
push ax ; day vao thanh ghi 16bit
push eax ; day vao thanh ghi 32bit
push memval ; day vao toan hang bo nho 16bit
push 1000h ; day vao 1 gia tri, chi co tac dung
trong 80286 tro len
15
- POP: chép nội dung của stack vào thanh ghi hoặc
biến và tăng SP. Không dùng CS và IP làm toán
hạng.
VD:
pop cx
pop memval
pop edx
16
- • Sử dụng stack: nhiều khi phải sử dụng lại 1 thanh ghi. VD:
một lệnh gọi DOS (int 21h) hiển thị 1 chuỗi. DX, và AX
được mặc định các giá trị quan trong phải được phục hồi sau
khi thông báo.
• .data
• message db “This is a message.$”
• .code
• push ax ; luu ax
• push dx ; luu dx
• mov ah,9 ; hien thi chuoi
• mov dx,offset message ; dx tro den chuoi
• int 21h
• pop dx ; phuc hoi dx
• pop ax ; phuc hoi ax
17
- PUSHF: đẩy thanh ghi Flags vào ngăn xếp để bảo
toàn nó trong trường hợp nó bị thay đổi.
POPF: phục hồi trạng thái ban đầu của các Flag.
VD:
pushf ; luu các cờ
call display_sub ; goi 1 chuong trinh con
popf ; phuc hoi các cờ
18
- • PROC và ENDP đánh dấu đầu và cuối 1 thủ tục con.
• Để gọi 1 thủ tục, sử dụng lệnh CALL.
• vd:
– .code
– main proc
• mov ax,@data
• mov ds,ax
• call MySub
• mov ax,4c00h
• int 21h
– main endp
– MySub proc
• …
• ret
– MySub endp
19
- • Gọi thủ tục lồng: chương trình con có thể gọi các
chương trình con khác.
• Thủ tục NEAR: khi lệnh call và chương trình con
nó gọi nằm trong cùng đoạn mã, ta gọi đó là lệnh
gọi gần (near). Khi gọi, lệnh call lưu giá trị IP vào
ngăn xếp, load offset của chương trình con vào IP.
• Thủ tục FARR: khi chương trình gọi và chương
trình con nằm trong các phân đoạn khác nhau.
Lệnh call lưu IP và CS vào ngăn xếp, load offset
phân đoạn của chương trình con vào CS và offset
của nó vào IP.
20
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
ERROR:connection to 10.20.1.98:9315 failed (errno=111, msg=Connection refused)
ERROR:connection to 10.20.1.98:9315 failed (errno=111, msg=Connection refused)
Đang xử lý...