Bài giảng Cấu trúc máy tính và lập trình Assembly-Toán tử -Toán hạng-Các phép định địa chỉ -Tập lệnh

ppt 40 trang phuongnguyen 4331
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc máy tính và lập trình Assembly-Toán tử -Toán hạng-Các phép định địa chỉ -Tập lệnh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_cau_truc_may_tinh_va_lap_trinh_assembly_toan_tu_to.ppt

Nội dung text: Bài giảng Cấu trúc máy tính và lập trình Assembly-Toán tử -Toán hạng-Các phép định địa chỉ -Tập lệnh

  1. Chương 6 : Tốn tử – Tốn hạng - các phép định địa chỉ – Tập lệnh Mục tiêu Hiểu cách dùng tốn tử trong ASM. Nắm được tập lệnh của CPU 8086/8088. Biết cách định địa chỉ thơng qua tốn hạng. Biết vận dụng các kỹ năng trên vào vấn đề cần giải quyết và hiện thực thành chương trình. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 1
  2. Tốn tử Điểm quan trọng phân biệt giữa tốn tử và lệnh là : Tốn tử điều khiển sự tính tốn các trị hằng xác định lúc dịch. Lệnh điều khiển sự tính tốn các trị khơng xác định được cho đến khi CT thực hiện. Ex : tốn tử + điều khiển phép cộng khi dịch. Lệnh cộng ADD điều khiển phép cộng khi chương trình thực hiện. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 2
  3. Tốn tử số học Toán tử Cú pháp Công dụng + + expression Dương - - expression Aâm * exp1*exp2 Nhân / exp1/exp2 Chia MOD exp1 mod exp2 Phần dư + exp1 + exp2 Cộng - exp1 - exp2 Trừ SHL exp shl n Dịch exp sang trái n bit SHR exp shr n Dịch exp sang phải n bit 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 3
  4. Tốn tử logic Not Not expression And Exp1 and exp2 Or Exp1 or exp2 Xor Exp1 xor exp2 Ex : MOV AH , 8 OR 4 AND 2 MOV AL, NOT (20 XOR 0011100B) 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 4
  5. Tốn Tử Quan Hệ So sánh 2 biểu thức và cho trị là true (-1) nếu điều kiện của tốn tử thỏa, ngược lại là false. EQ Exp1 EQ exp2 True nếu Exp1 = exp2 NE Exp1 NE exp2 True nếu Exp1 exp2 GE Exp1 GE exp2 True nếu Exp1 >= exp2 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 5
  6. ĐỘ ƯU TIÊN TỐN TỬ TOÁN TỬ MÔ TẢ ( ) Dấu ngoặc Độ ưu tiên + , - Dấu dương , âm giảm dần * / MOD Nhân , chia, Modulus + , - Cộng, trừ 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 6
  7. Tốn tử SEG Cú pháp : SEG expression Cho địa chỉ đoạn của biểu thức expression. Expression cĩ thể là biến | nhãn | tên segment hay tốn hạng bộ nhớ khác. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 7
  8. Tốn tử OFFSET Cú pháp : OFFSET expression Cho địa chỉ OFFSET của biểu thức expression. Expression cĩ thể là biến | nhãn | tên segment hay tốn hạng trực tiếp bộ nhớ khác. Ex : nạp địa chỉ segment và offset của biến table vào DS :AX TABLE DB ? MOV AX, SEG TABLE MOV DS, AX MOV DX, OFFSET Table 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 8
  9. TỐN TỬ $ Cho địa chỉ của OFFSET của phát biểu chứa tốn tử $. Thường được dùng để tính chiều dài chuổi. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 9
  10. TỐN TỬ PTR Cú pháp : type PTR expression Cho phép thay đổi dạng của expression nếu expr là 1 biến | tốn hạng bộ nhớ thì type cĩ thể là byte , word hay dword. Nếu expr là 1 nhãn thì type cĩ thể là near hay far. Ex : mov ax, word ptr var1 ; var1 là toán hạng kiểu Word mov bl , byte ptr var2 ; var2 là toán hạng kiểu byte 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 10
  11. Tốn hạng (Operand) Các tốn hạng chỉ ra nơi chứa dữ liệu cho 1 lệnh , chỉ thị. Hầu hết các lệnh Assembly đều cĩ đối số là 1 hoặc 2 tốn hạng Cĩ 1 số lệnh chỉ cĩ 1 tốn hạng như RET, CLC. Với các lệnh 2 tốn hạng thì tốn hạng thứ 2 là tốn hạng nguồn (source) – chứa dữ liệu hoặc địa chỉ của dữ liệu. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 11
  12. Tốn hạng (Operand) Tốn hạng đích giữ kết quả (nếu cĩ yêu cầu) sau khi thi hành lệnh. Tốn hạng đích cĩ thể là thanh ghi hay Bộ nhớ. Tốn hạng nguồn cĩ thể là thanh ghi, bộ nhớ hay 1 giá trị tức thời . Tốn hạng số tức thời cĩ thể là số trong các hệ đếm khác nhau và được viết theo qui định sau : Số hệ 2 : xxxxxxxxB (x là bit nhị phân) Số hệ 10 : xxxxxD hay xxxxx (x là 1 số hệ 10) Số hệ 16 : xxxxH và bắt đầu bằng số (x là 1 số hệ 16) 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 12
  13. Cơ chế định vị địa chỉ Cách xác định dữ liệu trong lệnh được gọi là cơ chế định vị địa chỉ (addressing mode) ➔ chỉ ra nơi cất dữ liệu Cơ chế này chia làm 3 loại : định vị bằng thanh ghi, bằng giá trị tức thời và bằng bộ nhớ. MOV AL, BL ; định vị bằng thanh ghi INC BX ; định vị bằng thanh ghi Tốn hạng là Reg Lệnh sẽ được thực hiện nhanh hơn 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 13
  14. ĐỊNH VỊ TỨC THỜI Tốn hạng tức thời là dữ liệu 8 bit hay 16 bit nằm ngay trong câu lệnh. Dữ liệu xử lý được lưu ngay trong lệnh Ex : MOV CL, 61h ; tốn hạng tức thời Mã máy của lệnh trên là B161h Lệnh sẽ được thực hiện nhanh vì dữ liệu được lấy cùng với lệnh. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 14
  15. ĐỊNH VỊ THANH GHI Giá trị của tốn hạng được truy xuất nằm ngay trong thanh ghi của CPU. Ex : MOV AX,BX ; chuyển nội dung của thanh ghi BX vào thanh ghi AX 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 15
  16. ĐỊNH VỊ BỘ NHỚ Định vị gián tiếp thanh ghi : địa chỉ tốn hạng khơng chứa trực tiếp trong lệnh mà gián tiếp thơng qua một thanh ghi. Ex : SUB DX, [BX] ; Lấy dữ liệu từ vùng nhớ Khác với lệnh SUB DX, BX Trong chế độ này, địa chỉ Offset của ơ nhớ chứa nộI dung của tốn hạng nằm trong các thanh ghi BX,BP,SI,DI. Địa chỉ segment ngầm định chứa trong DS nếu dùng BX,SI,DI Địa chỉ segment ngầm định chứa trong ES nếu dùng BP 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 16
  17. Định vị gián tiếp thanh ghi : EX1 : MOV AX, [SI] Nạp nội dung của ơ nhớ mà địa chỉ Offset lưu trong SI và địa chỉ đoạn lưu trong DS vào AX. EX2 : MOV AX, [BP] Nạp nội dung của ơ nhớ mà địa chỉ Offset lưu trong BP và địa chỉ đoạn lưu trong ES vào AX. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 17
  18. ĐỊNH VỊ TRỰC TIẾP Địa chỉ Offset của ơ nhớ chứa dữ liệu tốn hạng nằm trực tiếp trong câu lệnh cịn địa chỉ segment ngầm định chứa trong DS. Ex : MOV BX, [1234] Nạp nộI dung ơ nhớ cĩ địa chỉ DS:1234 ➔ BX 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 18
  19. ĐỊNH VỊ CƠ SỞ Địa chỉ Offset của tốn hạng được tính là tổng của nộI dung thanh ghi BX hoặc BP và 1 độ dịch. Độ dịch là 1 số nguyên âm hoặc dương. Địa chỉ đọan là đoạn hiện tại. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 19
  20. ĐỊA CHỈ HIỆU DỤNG Tốn hạng bộ nhớ dùng trong tập lệnh vi xử lý 86 sử dụng phương pháp định địa chỉ tổng hợp được gọi là địa chỉ hiệu dụng. Địa chỉ hiệu dụng là tổ hợp của 3 nhĩm sau đặt trong dấu [ ]. Nhĩm thanh ghi chỉ số : SI , DI Nhĩm thanh ghi nền : BX, BP Địa chỉ trực tiếp : số 16 bit Các thanh ghi trong cùng 1 nhĩm khơng được xuất hiện trong cùng 1 địa chỉ hiệu dụng. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 20
  21. ĐỊA CHỈ HIỆU DỤNG Một số thí dụ Địa chỉ hiệu dụng hợp lệ : [1000h] [SI], [DI] , [BX] , [BP] [SI+BX], [SI+BP] , [DI+BX] , [DI+BP] , [SI+1000h], [DI+100h] [SI] [BX] [1000h], [SI+BP+1000h] , [DI+BX][1000h], [DI+1000h]+[BP] Địa chỉ hiệu dụng khơng hợp lệ : [70000], [AX] , [SI+DI+1000h], [BX] [BP] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 21
  22. ĐỊA CHỈ HIỆU DỤNG (tt) Địa chỉ hiệu dụng chính là phần offset của địa chỉ luận lý bộ nhớ. Segment của địa chỉ hiệu dụng được mặc định như sau : nếu khơng sử dụng BP trong địa chỉ hiệu dụng thì mặc định theo DS. nếu cĩ sử dụng BP trong địa chỉ hiệu dụng thì mặc định theo ES. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 22
  23. Địa chỉ hiệu dụng (tt) Qui ước Để thuận tiện trong vấn đề giải thích lệnh, ta qui ước sau : Dữ liệu 8 bit bộ nhớ : [ địa chỉ ] Dữ liệu 16 bit bộ nhớ : [ địa chỉ +1, địa chỉ ] Để xác định rõ hoạt động của bộ nhớ , ta phải dùng thêm tốn tử PTR như sau : 8 bit : BYTE PTR [1000H] 16 bit : WORD PTR [1000H] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 23
  24. Ex : Tính tổng 1 array cĩ 5 phần tử Cách thực hiện : MOV BX, OFFSET LIST Lấy địa chỉ của List vào BX MOV AX, 0 MOV AL, [BX] Dựa vào BX để xác định các phần tử của array. ADD AL , [BX+1] ADD AL , [BX+2] Khi tính tổng xong, đưa tổng vào ADD AL , [BX+3] biến SUM. ADD AL , [BX+4] MOV SUM , AX LIST DB 10h, 20h, 40h, 2h, 5h SUM DW 0 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 24
  25. CHẠY CT này bằng DEBUG Ex : Tính tổng 1 array cĩ 5 phần tử -A 100 MOV BX, 0120 MOV AX, 0 MOV AL, [BX] ADD AL , [BX+1] ADD AL , [BX+2] ADD AL , [BX+3] ADD AL , [BX+4] MOV [0125], AX -A 120 DB 10, 20, 40, 2, 5 DW 0 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 25
  26. Tập lệnh Lệnh MOV : Ý nghĩa : copy giá trị từ tốn hạng nguồn → tốn hạng đích Cú pháp : MOV dest , source Yêu cầu : Dest và source cùng kiểu Dạng lệnh : MOV reg , reg MOV mem , reg MOV reg, mem MOV reg16, segreg MOV segreg, reg16 MOV reg, immed MOV mem, immed MOV mem16, segreg MOV segreg, mem16 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 26
  27. Minh hoạ lệnh MOV MOV AX, CX MOV DL, BH MOV [SI+1000h], BP ; [SI+1000h, SI+1001h] BP MOV DX, [1000h] ; DX [1000h, 1001h] MOV DI, 12h MOV AL, 12h MOV BYTE PTR [1000h], 12h MOV WORD PTR [2000h] , 1200h MOV [BX] , DS MOV SS, [2000h] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 27
  28. Chú ý Lệnh MOV khơng làm ảnh hưởng đến cờ. Khơng thể chuyển dữ liệu trực tiếp giữa 2 tốn hạng bộ nhớ với nhau, muốn chuyển phải dùng thanh ghi trung gian. Khơng thể chuyển 1 giá trị tức thời vào thanh ghi đoạn, muốn chuyển phải dùng thanh ghi trung gian. Khơng thể chuyển trực tiếp giữa 2 thanh ghi đoạn 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 28
  29. Minh họa lệnh MOV Ex1 : Cho table là 1 mảng gồm 10 phần tử dạng byte Table DB 3,5,6,9,10, 29,30,46,45,90 Truy xuất phần tử đầu , phần tử thứ 2 và thứ 5 của mảng: MOV AL, TABLE hay MOV AL, TABLE[0] MOV AL, TABLE+1 hay MOV AL, TABLE[1] MOV AL, TABLE+4 hay MOV AL, TABLE[4] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 29
  30. Minh họa lệnh MOV Ex2 : MOV AX, DS : [100h] ; chép nội dung 16 bit tại địa chỉ 100h trong đoạn chỉ bởi DS vào Reg AX. Ex3 : MOV AX, [100h] ; chuyển NỘI DUNG Ơ NHỚ 100h vào Reg AX. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 30
  31. Áp dụng Viết chương trình chuyển nội dung vùng nhớ bắt đầu tại địa chỉ 700h sang vùng nhớ cĩ địa chỉ bắt đầu là 1000h. Biết chiều mỗi vùng nhớ là 9 bytes và dữ liệu đang khảo sát trong đoạn được chỉ bởi DS. Cho vùng nhớ MEM cĩ chiều dài 9 bytes gồm các ký tự ‘abcdefghi’ trong đoạn chỉ bởi DS. Viết chương trình đảo ngược vùng nhớ MEM. 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 31
  32. Lệnh LEA (Load Effective Address) Cú pháp : LEA REG | MEM ý nghĩa : nạp địa chỉ Offset vào thanh ghi để khởi động Reg. Ex : MOV DX, OFFSET MES Tương đương với LEA DX, MES Ex : LEA BX, [1000h] ; BX 1000h LEA SI, [DI][BX][2000h] ; SI DI + BX + 2000h 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 32
  33. Lệnh XCHG (XCHANGE) Cú pháp : XCHG DEST , SOURCE ý nghĩa : hốn chuyển nội dung 2 Reg, Reg và ơ nhớ Yêu cầu : 2 tốn hạng phải cùng kiểu 2 tốn hạng khơng thể là 2 biến bộ nhớ. Muốn hốn đổi trị của 2 biến phải dùng Reg trung gian. Ex : XCHG AH, BL MOV VAR1, VAR2 ; khơng hợp lệ, phải dùng Reg tạm 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 33
  34. Lệnh PUSH Cú pháp : PUSH REG16 PUSH MEM16 PUSH SEGREG Đẩy tốn hạng nguồn 16 bit vào STACK Ex : PUSH DI ; [SS :SP+1, SS :SP] DI Ex : PUSH CS ; [SS :SP+1, SS :SP] CS 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 34
  35. Lệnh POP Cú pháp : POP REG16 POP MEM16 POP SEGREG Lấy dữ liệu từ đỉnh STACK vào tốn hạng địch. Ex : POP AX ; AX [SS :SP+1, SS :SP] Ex : POP [BX+1] ; [BX+2, BX+1] [SS :SP+1, SS :SP] 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 35
  36. Lệnh IN Cú pháp : IN ACCUM, IMMED8 IN ACCUM, DX nhập dữ liệu từ cổng xuất nhập vào thanh ghi tích luỹ AL hay AX. Trường hợp AX sẽ nhập byte thấp trước, byte cao sau. Ex : IN AL ,61h IN AX, 40h Dạng lệnh cĩ Reg DX dùng Để cho cổng cĩ địa chỉ 16 bit Ex : MOV DX, 378H IN AL, DX 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 36
  37. SUMMARY Dùng DEBUG để hợp dịch và chạy chương trình sau : Chép 3 số nguyên kiểu Word ở địa chỉ 0120h vào địa chỉ 0130h. Cho biết giá trị của AX sau khi các lệnh sau được thực thi : MOV AX, ARRAY1 INC AX ADD AH, 1 SUB AX, ARRAY1 ARRAY1 DW 10h, 20h 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 37
  38. SUMMARY Giả sử biến VAL1 ở địa chỉ offset 0120h và PTR1 ở địa chỉ 0122h. Cho biết giá trị của các thanh ghi AX, BX khi mỗi lệnh sau được thực thi : .CODE MOV AX, @DATA MOV DS, AX MOV AX, 0 MOV AL, BYTE PTR VAL1 ; AX = ? MOV BX, PTR1 ; BX = ? XCHG AX, BX ; BX = ? SUB AL,2 ; AX = ? MOV AX, PTR2 ; AX = ? .DATA VAL1 DW 3Ah PTR1 DW VAL1 PTR2 DW PTR1 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 38
  39. Cho biết giá trị của các thanh ghi ở bên phải, khi mỗi lệnh của đoạn chương trình sau được thực thi. Giả sử FIRST ở offset 0H MOV AL, BYTE PTR FIRST+1 ; AL = MOV BX, WORD PTR SECOND+2 ; BX = MOV DX, OFFSET FIRST + 2 ; DX = MOV AX, 4C00H INT 21H . FIRST DW 1234h SECOND DW 16385 THIRD DB 10,20,30,40 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 39
  40. Bài tập Lập trình Bài 1 : Viết chương trình nhập 1 ký tự. Hiển thị ký tự đứng trước và ký tự đứng sau ký tự đã nhập theo thứ tự mã ASCII. Kết quả cĩ dạng : Nhập một ký tự : B Ký tự đứng trước : A Ký tự đứng sau : C Bài 2 : Viết chương trình nhập 2 ký tự và hiển thị ký tự thứ 3 cĩ mã ASCII là tổng của mã 2 ký tự đã nhập. Kết quả cĩ dạng : 5/23/2021 Chuong 7 Cac phep dinh vi dia chi 40