Bài giảng Kỹ thuật Vi xử lý - Chương 3: Vi xử lý 8088-Intel - Hồ Viết Việt

Chu kỳ lệnh và Chu kỳ máy
• Chu kỳ lệnh: Tổng thời gian tìm lệnh, giải
mã lệnh và thực hiện 1 lệnh
• Nói chung, Chu kỳ lệnh của các lệnh khác
nhau là khác nhau
• Chu kỳ lệnh bao giờ cũng bằng một số
nguyên lần chu kỳ máy
• Chu kỳ máy bằng nghịch đảo của tần số
hoạt động (tốc độ đồng hồ) của bộ vi xử lý 
pdf 122 trang thamphan 27/12/2022 1640
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật Vi xử lý - Chương 3: Vi xử lý 8088-Intel - Hồ Viết Việt", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_ky_thuat_vi_xu_ly_chuong_3_vi_xu_ly_8088_intel_ho.pdf

Nội dung text: Bài giảng Kỹ thuật Vi xử lý - Chương 3: Vi xử lý 8088-Intel - Hồ Viết Việt

  1. Bay giảng Kỹ thuậtVi xử lý Ngành Điện tử-Viễn thông Đại học Bách khoa Đà Nẵng củaHồ Viết Việt, Khoa ĐTVT Tài liệu tham khảo [1] Kỹ thuậtvi xử lý, Văn Thế Minh, NXB Giáo dục, 1997 [2] Kỹ thuậtvi xử lý và Lập trình Assembly cho hệ vi xử lý, Đỗ Xuân Tiến, NXB Khoa học& kỹ thuật, 2001
  2. Nguyên lý hoạt động của một bộ vi xử lý Lấy - Giải mã - Thực hiện lệnh Tìm và copy các byte lệnh từ bộ nhớ Tạo ra các tín hiệu điều khiển Giải mã lệnh để thực hiện lệnh
  3. 3.1 Kiến trúc và Hoạt động của 8088
  4. Đơn vị thực hiện - EU •Bao gồm CU và ALU •CU :Giải mã lệnh để tạo ra các tín hiệu điều khiển nhằm thực hiện lệnh đã được giải mã •ALU: thực hiện các thao tác khác nhau đối với các toán hạng của lệnh
  5. Xử lý lệnh của các vi xử lý trước 8086/8088 •Một thủ tục đơn giản gồm 3 bước: –Lấy lệnh từ bộ nhớ –Giải mã lệnh –Thực hiện lệnh •Lấy các toán hạng từ bộ nhớ (nếucó) •Lưu trữ kết quả Fetch Decode Execute Fetch Decode Execute Microprocessor 1 1 1 2 2 2 Bus Busy Idle Busy Busy Idle Busy
  6. 3.2 Cấu trúc thanh ghi của 8088 8088 có 14 thanh ghi 16-bit
  7. Cấu trúc thanh ghi 8086/8088 700 7 Accumulator AH AL AX Base BH BL BX Counter CH CL CX Data DH DL DX 15 0 Code Segment CS Data Segment DS Stack Segment SS Extra Segment ES 15 0 Instruction Pointer IP } Stack Pointer SP Base Pointer BP } Source Index SI Destination Index DI }
  8. Các thanh ghi segment 15 0 Code Segment CS Data Segment DS Stack Segment SS Extra Segment ES - Lưu trữ địa chỉ segment của một ô nhớ cần truy cập -Kết hợp với các thanh ghi offset nhất định
  9. Thanh ghi cờ 15 0 x x x x OF DF IF TF SF ZF x AF x PF x CF - Không phải tất cả các bit đều được sử dụng -Mỗi bit được sử dụng được gọi là một cờ -Các cờ đều có tên và có thể được Lập/Xoá riêng lẽ -Bao gồm các cờ trạng thái và các cờ điều khiển
  10. 3.3 Phương pháp quản lý bộ nhớ -Bộ nhớ được xem là một tập hợp các ô nhớ -Mỗi ô nhớ được nhận dạng bằng một Địa chỉ vật lý duy nhất 20-bit - Trong hoạt động truy cập một ô nhớ, Địa chỉ vật lý của nó được tạo ra từ hai giá trị 16-bit: Địa chỉ segment và Địa chỉ Offset - Địa chỉ logic = Địa chỉ segment:Địa chỉ offset
  11. 3.4 Mô tả tập lệnh Assembly của 8086/8088 - Khuôn dạng: Mnemonics Các toán hạng - Nhóm lệnh chuyển số liệu - Nhóm lệnh số học - Nhóm lệnh logic - Nhóm lệnh Rẽ nhánh - Nhóm lệnh thao tác string - Nhóm lệnh hỗn hợp
  12. Data Transfer Instructions - MOV Khuôn dạng: MOV Đích,Nguồn - Tác dụng: (Đích) Å (Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) -Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit củaVXL 2. Một vị trí nhớ (1 hoặc2 ônhớ liên tiếp nhau) 3. Một giá trị cụ thể
  13. Data Transfer Instructions - XCHG Khuôn dạng: XCHG T/h1,T/h2 - Tác dụng: (T/h1) Å (T/h2) - T/h1: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) - T/h2: có thể là: 1. Một thanh ghi 8 hoặc 16 bit củaVXL 2. Một vị trí nhớ (1 hoặc2 ônhớ liên tiếp nhau)
  14. Các mode địa chỉ - Khi thực hiện lệnh, VXL sẽ thực hiện những thao tác nhất định trên số liệu, các số liệu này được gọi chung là các toán hạng. - Các toán hạng trong một câu lệnh có thể là một phần của câu lệnh (ở dạng mã máy), có thể nằm ở một thanh ghi của VXL hoặc ở Bộ nhớ -Cách xác định toán hạng trong các câu lệnh được gọi là các mode (định) địa chỉ
  15. Mode địa chỉ trựctiếp (Direct Addressing Mode)
  16. Mode địa chỉ cơ sở-chỉ số (Based-Indexed Addressing Mode)
  17. Các ví dụ Addressing Instruction Comment Memory Contents Mode MOV AX, BX Move to AX the 16-bit value in BX Register 89 D8 OP MODE MOV AX, DI Move to AX the 16-bit value in DI Register 89 F8 OP MODE MOV AH, AL Move to AL the 8-bit value in AX Register 88 C4 OP MODE MOV AH, 12h Move to AH the 8-bit value 12H Immediate B4 12 OP DATA8 MOV AX, 1234h Move to AX the value 1234h Immediate B8 34 OP DATA16 Move to AX the constant defined as MOV AX, CONST Immediate B8 lsb msb CONST OP DATA16 Move to AX the address or offset of MOV AX, X Immediate B8 lsb msb the variable X OP DATA16 Move to AX the value at memory MOV AX, [1234h] Direct A1 34 12 location 1234h OP DISP16 Move to AX the value in memory MOV AX, [X] Direct A1 lsb msb location DS:X OP DISP16
  18. Các ví dụ Addressing Instruction Comment Memory Contents Mode Move to the memory location Base Plus MOV [BX + DI], AX 89 01 pointed to by DS:X the value in AX Index OP MODE Move word in memory location Base Rel MOV AX, [BX + DI + 1234h] 8B 81 34 12 DS:BX + DI + 1234h to AX register Plus Index OP MODE DISP16 MOV word [BX + DI + Move immediate value 5678h to Base Rel C7 81 34 12 78 56 1234h], 5678h memory location BX + DI + 1234h Plus Index
  19. Anatomy of an instruction Opcode Mode Displacement Data/Immediate • Opcode contains the type of instruction we execute plus two special bits, D and W D W • The mode byte is used only in instructions that use register addressing modes and encodes the source and destination for instructions with two OPCODE operands • D stands for direction and defines the data flow of the instruction MODREG R/M – D=0, data flows from REG to R/M – D=1, data flows from R/M to REG • W stands for the size of data – W=0, byte-sized data – W=1, word (in real mode) or double-word sized (in protected mode)
  20. Registers in the REG and R/M fields Code W=0 (Byte) W=1 (Word) W=1 (DWord) 000 AL AX EAX 001 CL CX ECX 010 DL DX EDX 011 BL BX EBX 100 AH SP ESP 101 CH BP EBP 110 DH SI ESI 111 BH DI EDI
  21. Displacement addressing • If MOD is 00, 01, or 10 R/M has an entirely different meaning MOD FUNCTION R/M Code Function 00 No displacement 000 DS:BX+SI 01 8-bit sign-extended displacement 10 16-bit displacement 001 DS:BX+DI 11 R/M is a register (register addressing mode) 010 SS:BP+SI Examples: 011 SS:BP+DI If MOD=00 and R/M=101 mode is [DI] 100 DS:SI If MOD=01 and R/M=101 mode is 101 DS:DI [DI+33h] 110 SS:BP If MODE=10 and R/M=101 modes is 111 DS:BX [DI+2233h]
  22. Direct Addressing Mode •MOD is always 00 • R/M is always 110 • REG encodes the register to/from we take data as usual • Third byte contains the lower-order bytes of the displacement, fourth byte contains the high order byte of the displacement
  23. Segment MOV instructions • Different opcode 100011 • Segments are selected by setting the REG field Example MOV BX, CS REG Code Segment reg. Opcode 10001100 000 ES MOD=11 (register addressing) 001 CS 010 SS REG=001 (CS) 011 DS R/M=011 (BX) 100 FS 101 GS 8CCB
  24. Mã máy MOD và R/M cùng nhau xác định toán hạng thứ hai
  25. Ví dụ Mã hoá lệnh MOV BL,AL • Opcode đối với MOV là 100010 • Ta mã hoá AL sao cho AL là toán hạng nguồn: – D = 0 (AL là toán hạng nguồn) • W bit = 0 (8-bit) • MOD = 11 (register mode) • REG = 000 (mã của AL) • R/M = 011 (mã củaBL) Kết quả:: 10001000 11000011 = 88 C3
  26. Arithmetic Instructions - ADD Khuôn dạng: ADD Đích,Nguồn - Tác dụng: (Đích) Å (Đích)+(Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) -Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit củaVXL 2. Một vị trí nhớ (1 hoặc2 ônhớ liên tiếp nhau) 3. Một giá trị cụ thể
  27. Các cờ trên thanh ghi cờ • Các bit nhất định trên thanh ghi cờ điều khiển hoạt động hoặc phản ánh trạng thái của vi xử lý –Các cờ điều khiển (TF, IF, DF) •Quyết định cách đáp ứng của vi xử lý trong các tình huống nhất định –Các cở trạng thái (CF, PF, AF, ZF, SF, OF) •Bị ảnh hưởng bởi các phép toán nhất định •Phục vụ cho các lệnh có điều kiện
  28. Các cờ trạng thái •Carry • Zero – carry or borrow at – result is 0 MSB in add or subtract •Sign – last bit shifted out – result is negative • Parity •Overflow – low byte of result has – signed overflow even parity occurred during add or • Auxiliary subtract – carry or borrow at bit 3
  29. Signed Overflow Example 10010110 00110110 + 10100011 + 01100011 00111001 10011001 Carry in = 0, Carry out = 1 Carry in = 1, Carry out = 0 Neg+Neg=Pos Pos+Pos=Neg Signed overflow occurred Signed overflow occurred OF = 1 (set) OF = 1 (set)
  30. Unsigned Overflow • The carry flag is used 10010110 to indicate if an + 11110011 unsigned operation 10001001 overflowed • The processor only Carry out = 1 adds or subtracts - it Unsigned overflow occurred does not care if the CF = 1 (set) data is signed or unsigned!
  31. Arithmetic Instructions - SUB Khuôn dạng: SUB Đích,Nguồn - Tác dụng: (Đích) Å (Đích)-(Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) -Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit củaVXL 2. Một vị trí nhớ (1 hoặc2 ônhớ liên tiếp nhau) 3. Một giá trị cụ thể
  32. Arithmetic Instructions - CMP Khuôn dạng: CMP Đích,Nguồn - Tác dụng: (Đích)-(Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) -Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit củaVXL 2. Một vị trí nhớ (1 hoặc2 ônhớ liên tiếp nhau) 3. Một giá trị cụ thể
  33. Nhóm lệnh Logic •Cần chú ý đến ảnh hưởng của lệnh đối với các cờ trạng thái •Cáclệnh logic th/thường: NOT, AND, OR, XOR NOT A: ~A AND A,B: A &= B OR A,B : A |= B XOR A,B: A ^= B • NOT không ảnh huởng đến các cờ trạng thái. •Các lệnh khác: –CF = 0 –OF = 0 –ZF = 1 nếu Kết quả bằng 0 – SF = 1 nếu MSB của Kết quả = 1 – PF = 1 nếu byte thấp của kết quả có Parity chẳn – AF không xác định
  34. Một số ứng dụng • Bài toán Xoá bit: Xoá một bit nào đó của một toán hạng mà không làm ảnh hưởng đến các bit còn lại của toán hạng đó • Bài toán Kiểm tra bit: Xác định một bit nào đó của một toán hạng là bằng 0 hay 1 (thông qua giá trị củamộtcờ trạng thái) • Bài toán Lập bit: Lập một bit nào đó của một toán hạng mà không làm ảnh hưởng đến các bit còn lại của toán hạng đó
  35. Các lệnh Dịch trái: SHL, SAL CF Register 0
  36. Shift right SAR Register CF
  37. RotateRotate left/rightleft/right ((QuayQuay trtrááii//phphảảii khkhôôngng quaqua carrycarry)) ROL ROR
  38. Lệnh nhảy không điều kiện •JMP nhãn –Nhảy gần: E9 xx xx (3 byte) –Nhảy ngắn: EB xx (2 byte) –Nhảy xa: EA xx xx xx xx (5 byte) • Nhãn: tên do ngườIlập trình tựđặt ra theo qui tắc đặt tên của Assembler và có thể đặt vào trước một câu lệnh bất kỳ trong chương trình cùng với dấu : nhãn: Câu lệnh cần thực hiện • Nhãn sẽ được dịch thành địa chỉ • Khoảng cách nhảy: Khoảng cách đại số (có dấu) từ lệnh nhảy đến lệnh cần thực hiện
  39. Mã máy của lệnh nhảy 1106:0100 EB2A JMP 012C • 012C-0102=002A 1106:0102 EBFC JMP 0100 • 0100-0104=FFFC 1106:0104 E97F00 JMP 0186 • 0186-0106=0080 (too far for short!) • 0186-0107=007F 1106:0107 E9F5FE JMP FFFF • FFFF-010A=FEF5
  40. Các lệnh nhảy có điều kiện •Tất cả các lệnh nhảy có điều kiện phải là nhảy ngắn – khoảng cách nhảy: -128 to +127 bytes •Tổ hợp với lệnh nhảy không điều kiện để có thể vượt qua giới hạn này. •Các lệnh nhảy điều kiện kép: phụ thuộc vào giá trị của nhiều cờ • JB/JNAE • JNL/JGE
  41. Cấu trúc điều kiện mov ax,n cmp ax,7 jz nhan1 lệnh 1 jmp nhan2 nhan1:lệnh 2 nhan2:lệnh 3
  42. Cấu trúc điều kiện - AND char n; int w,x; ;if(n>='A'&&w==x) if (n>='A' && w==x) mov ah,n cmp ah,'A' whatever(); jl nogo mov ax,w cmp ax,x jne no_go ;then-part call whatever nogo:
  43. Lệnh LOOP •LOOP nhan –Giảm CX đi 1 mov cx,9 –Nếu (CX) <> 0 thì JMP nhan. Nếu không nhan: lệnh 1 thì tiếp tục thực hiện lệnh 2 lệnh theo trật tự bình lệnh 3 thường loop nhan
  44. Chương trình con •Chương trình con trong ngôn ngữ Assembly được gọi là Thủ tục (Procedure) •Một thủ tục có thể được thực hiện nhiều lần • Có liên quan đến stack: -lưu giữ Địa chỉ quay về -lưu giữ giá trị của các thanh ghi của vi xử lý
  45. Stack Initialization • The .stack directive hides an array allocation statement that looks like this – The_Stack DB Stack_Size dup (?) • On program load – SS is set to a segment address containing this array (usually The_Stack starts at offset 0) – SP is set to the offset of The_Stack+Stack_Size which is one byte past the end of the stack array • This is the condition for an empty stack
  46. How Does The Stack Work? • The stack grows backwards through memory towards the start of the stack segment Stack Size: 000C SS:0340SS:0340 SP:0008SP:0008 • Push decrements stack pointer Pop increments stack pointer
  47. Ví dụ PUSH Stack Size: 000C 3C 09 A4 40 2C FF A2 43 07 06 4C 2A 09 46 SS:0340SS:0340 SP:0008SP:0008 PUSH AX AX:AX: 01230123 3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46 SS:0340SS:0340 SP:0006SP:0006
  48. Ví dụ POP 3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46 SS:0340SS:0340 SP:0006SP:0006 POP ES 3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46 SS:0340SS:0340 SP:0008SP:0008 ES:ES: 01230123
  49. Thủ tục Tên_Thủ_tục PROC kiểu ;thân của thủ tục RET ;quay về chuơng trình gọi Tên_Thủ_tục ENDP • kiểu là NEAR hoặcFAR –ngầm định là NEAR •Một thủ tục có thể có nhiều lệnh RET
  50. Thủ tụcFar •Gọi thủ tục (FAR) CALL Tên_thủ_tục –lầnlượt push CS và IP vào stack – copy địa chỉ của Tên_thủ_tục vào CS và IP •Trở về từ thủ tục (FAR) RET –pop giá trị từ đỉnh stack lần lượt vào IP và CS
  51. Trở về từ ngắt •IRET • Tác dụng của lênh: – Giá trị ở đỉnh của stack được pop vào IP – Giá trịở đỉnh của stack được pop vào CS – Giá trịởđỉnh của stack được pop vào thanh ghi cờ •Chương trình bị ngắt tiếp tục thực hiện dường như không có chuyện gì xảy ra
  52. Xuất xâu ký tự ra màn hình PC •Dịch vụ 09h của ngắt 21h – DX = Địa chỉ Offset của xâu (trong đoạndữ liệu) –DS = Địa chỉ segment của xâu – Xâu ký tự phải kết thúc bằng ký tự '$' • Để nạp địa chỉ offset của xâu vào DX, có thể: – LEA DX, Tênxâu – MOV DX, OFFSET Tên xâu
  53. Nhóm lệnh thao tác string • Chúng ta hiểu: string là một mảng byte hoặc từ nằm trong bộ nhớ • Các thao tác string: – Sao chép –Tìm kiếm –Lưu trữ – So sánh
  54. Chuyển (Sao chép) •MOVSB, MOVSW – Chuyển 1 byte hoặc 1 word từ vị trí nhớ này sang vị trí nhớ khác – Tác dụng của lệnh: • Sao chép byte/word từ (DS:SI) đến(ES:DI) •Tăng/Giảm SI và DI 1 hoặc 2 giá trị –NếuCX chứa một giá trị khác không: • REP MOVSB hoặc REP MOVSW sẽ tựđộng sao chép (CX) lần và CX sẽ về không
  55. Ví dụ: Tịnh tiến các ô nhớ mov cx, 7 mov di, offset a+9 mov si, offset a+6 std ;lập cờ DF rep movsb SI DI a
  56. Lưu trữ string STOSB, STOSW •Thường được sử dụng • Copy AL hoặc AX có tiền tố REP và số vào một mảng byte lần lặp trong CX hoặc word – Đích (ES:DI) •Tăng hoặc Giảm DI –phụ thuộcDF
  57. Nạp String •LODSB, LODSW –Byte hoặcword tại (DS:SI) được copy vào AL hoặcAX –SI tăng hoặc giảm1 hoặc2 giá trị phụ thuộc DF •Thường được dùng với STOSx trong một vòng lặp để xử lý từng phần tử trong một mảng
  58. Quét String SCASB, SCASW • So sánh AL hoặcAX với byte hoặc word tạI (ES:DI) và tự động tăng hoặc giảm DI •Lệnh này ảnh hưởng đến các cờ trạng thái –Tuỳ theo kết quả so sánh – Dùng trong một vòng lặp REPs • REPZ, REPE, REPNZ, REPNE
  59. So sánh String CMPSB, CMPSW • So sánh byte hoặc word tại (DS:SI) với byte hoặc word tạI (ES:DI), tác động đến các cờ và tăng hoặc giảm SI và DI •Thường dùng để so sánh hai mảng với nhau
  60. Nhóm lệnh hỗn hợp - Các lệnh Lập/Xoá trực tiếp các cờ: STC, CLC STD, CLD STI, CLI -Lệnh NOP (No Operation): Không làm gì!!! -Lệnh NOP thường được dùng trong các vòng lặp tạo trễ (delay)bằng phần mềm - Các lệnh Nhập/Xuất dữ liệu đối với các cổng I/O IN OUT
  61. Lệnh OUT -Nếu Địa chỉ của cổng Nhỏ hơn hoặc bằng FFh: OUT Địa chỉ cổng, Acc - Trong đó: Acc có thể là AL hoặc AX -Xuất dữ liệu từ Acc ra cổng -Nếu Địa chỉ của cổng Lớn hơn FFh: MOV DX, Địa chỉ cổng OUT DX, Acc - Trong đó: Acc có thể là AL hoặcAX -Xuất dữ liệu từ Acc ra cổng