intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

109
lượt xem
5
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.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Asssembler: Bài 4 - GV. Phạm Nguyên Văn

  1. Giảng viên: Phạm Nguyên Văn
  2. • 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
  3.  VD:  .data  aString db “ABCDEFG”  .code  mov bx,offset aString ; bx = 0200  add bx,5 ; bx = 0205  mov dl,[bx] ; dl = F 3
  4. • 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
  5.  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
  6.  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
  7.  VD: cộng các số nguyên 8bit 7
  8.  Cộng số nguyên 16bit: 8
  9.  Hiển thị một chuỗi: 9
  10. • 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
  11.  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
  12.  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
  13. • 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
  14.  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
  15.  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
  16.  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
  17. • 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
  18.  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
  19. • 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
  20. • 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2