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

Bài giảng Assembler: Bài 3 - GV.ThS. Phạm Nguyên Văn

Chia sẻ: Minh Minh | Ngày: | Loại File: PDF | Số trang:36

84
lượt xem
9
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Assembler: Bài 3 do GV. ThS. Phạm Nguyên Văn trình bày, gồm các nội dung về mô hình bộ nhớ, toán tử và biểu thức, các toán tử type và size, lệnh enum của borland tasm và lệnh jmp và loop. Chúc bạn học tốt.

Chủ đề:
Lưu

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

  1. GV: Ths. Phạm Nguyên Văn
  2.  Lệnh .model lựa chọn mô hình bộ nhớ.  Tiny: Mã và DL phối hợp < 64K.  Small: Mã
  3.  Biểu thức là tổ hợp các toán tử và toán hạng được trình biên dịch chuyển thành một giá trị đơn lẻ. 3
  4.  1000h * 50h ; = 50000h  -4 + 2 ; = -6  count + 2 ; số đếm là 1 hằng  31 MOD 6 ; = 1 6 / 4 ;=1  ‘2’ – 30h ; = 2(do giá trị của ‘2’ = 32h) 4
  5. Toán tử Cấp Mô tả () 1 Dấu ngoặc đơn +,- 2 Dương và Âm (đơn tử) *, /, mod 3 nhân, chia, lấy phần dư +,- 4 Cộng, trừ 5
  6.  OFFSET trả về vị trí của 1 nhãn và biến từ đầu phân đoạn của nó. Toán hạng đích phải là 1 thanh ghi 16bit:  VD: mov bx, offset count ; BX trỏ đến count  offset có thể được chuyển đến 1 thanh ghi chỉ mục hoặc cơ số. Trong ví dụ sau, bList mặc định nằm tại offset 0000: 6
  7.  .data  bList db 10h, 20h, 30h, 40h  wList dw 1000h, 2000h, 3000h  .code  mov di, offset bList ; dl = 0000  mov bx, offset bList + 1 ; bx = 0001  mov si, offset wList+2 ; si = 0006 7
  8.  Toán tử SEG trả về phần phân đoạn của 1 nhãn hoặc địa chỉ của biến. Thường được dùng khi biến nằm trong 1 phân đoạn khác với phân đoạn hiện do DS trỏ đến  VD: đẩy [push] giá trị hiện thời của DS lên stack, ấn định DS theo phân đoạn chứa array, và sau đó phục hồi DS theo giá trị ban đầu của nó 8
  9.  push ds ; lưu DS  mov ax,seg array ; ấn định ds theo phân đoạn của mảng  mov ds, ax  mov bx, offset array ; tìm độ dịch vị mảng  … ;xử lý mảng  pop ds ; phục hồi ds 9
  10.  PTR: chạy đè lên kích cỡ ngầm định của một toán hạng.  Phát biểu rõ kích cỡ của toán hạng.  Phải được kết hợp với các kiểu dữ liệu chuẩn: BYTE, SBYTE, WORD, DWORD, SDWORD, FWORD, QWORD, TBYTE.  VD:  mov al,byte ptr count  mov ax, word ptr newVal  mov eax,dword ptr listPointer 10
  11.  Do kích cỡ của toán hạng không được rõ ràng xét theo ngữ cảnh 1 lệnh. VD:  inc [bx] ; toán hạng gián tiếp  báo lỗi do không biết bx chứa byte hay word  inc byte ptr [bx]: xác định rõ kích cỡ của toán hạng là byte  Có thể chạy đè kích cỡ ngầm định của toán hạng. 11
  12.  Vd: ta có từ kép 32bit, muốn nạp từ cao vào DX, từ thấp vào AX:  .data  val32 dd ?  .code  mov ax, val32 ; có từ thấp (error)  mov dx, val32+2 ; có từ cao (error)  Sửa lại:  mov ax, word ptr val32 ; AX = 1234h  mov dx, word ptr val32+2 ; DX = 5678h 12
  13.  LABEL: chèn 1 nhãn và gán cho nó 1 thuộc tính kích cỡ, mà không phân bổ bộ nhớ.  VD: khai báo 1 nhãn trước khi val32 gọi val16, và gán thuộc tính word:  .data  val16 label word  val32 dd 12345678h  .code  mov ax,val16  mov dx,val32 13
  14.  EVEN và EVENDATA: căn thẳng hàng lệnh kế tiếp trong đoạn mã theo offset 16bit đều.  Vd: 1 lệnh NOP 1-byte (90h) được chèn vào mã đã biên dịch nơi even xuất hiện. Lệnh tiếp theo nằm tại 0006:  0000 mov ax,@data  0003 mov ds, ax  0005 even ; byte chứa 90h được chèn ở đây  0006 mov bx, offset array 14
  15.  Tương tự với evendata, chèn 1 byte rỗng (0) vào trước array:  0000 .data  0000 str1 db 3 dup(‘X’)  0003 evendata  0004 array dw 10 dup(0FFFFh) 15
  16.  Toán tử SHORT:  thường sử dụng với JMP khi thực hiện nhảy ngắn khoảng
  17.  .data  var1 db 20h  var2 dw 1000h  var3 dd ?  var4 db 10,20,30,40,50  msg db ‘File not found’,0  .code  L1: mov ax,type var1 ;ax = 0001  mov ax,type var2 ;ax = 0002  mov ax,type var3 ;ax = 0004  mov ax,type var4 ;ax = 0001  mov ax,type msg ;ax = 0001  mov ax,type L1 ;ax = FFFF 17
  18.  Toán tử length: đếm số lượng các thành phần riêng lẻ trong 1 biến được định nghĩa bằng dup.  Nếu không dùng dup, length = 1.  Nếu dùng dup lồng ghép, chỉ toán tử phía ngoài mới được đếm. 18
  19.  .data  val1 dw 1000h  val2 db 10,20,30  array dw 32 dup(0)  array2 dw 5 dup(3 dup(0))  message db ‘File not found’,0  .code  mov ax,length val1 ; = 1  mov ax,length val2 ; = 1  mov ax,length array; = 32  mov ax,length array2 ;=5  mov ax,length message ;=1 19
  20.  Toán tử SIZE: = length * type của 1 biến.  intArray dw 32 dup(0) ; SIZE = 64 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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