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

Bộ thanh ghi trong 8086

Chia sẻ: Le Van Xuyen | Ngày: | Loại File: PDF | Số trang:10

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

Các thanh ghi trong bộ vi xử lý 8086 là các thanh ghi 16 bit và chia thành các nhóm như sau: - Các thanh ghi công d ng chung AX (accumulator), BX (base), CX (counter), DX (data): có th ư c truy xu t c l p như 2 thanh ghi 8 bit : AH và AL, BH và BL, CH và CL, DH và DL.

Chủ đề:
Lưu

Nội dung Text: Bộ thanh ghi trong 8086

  1. B thanh ghi trong 8086 Các thanh ghi trong b vi x lí 8086 u là các thanh ghi 16 bit và ư c chia thành các nhóm như sau: - Các thanh ghi công d ng chung AX (accumulator), BX (base), CX (counter), DX (data): có th ư c truy xu t c l p như 2 thanh ghi 8 bit : AH và AL, BH và BL, CH và CL, DH và DL. - Các thanh ghi con tr và ch m c (xem chi ti t các ph n sau) SP (Stack Pointer), BP (Base Pointer): con tr dùng khi làm vi c v i stack SI (Source Index), DI (Destination Index): ch s m ng khi x lí m ng (chu i) - Các thanh ghi phân o n CS (Code Segment), DS (Data Segment), ES (Extra data Segment), SS (Stack Segment): tương ng lưu a ch phân o n mã l nh, phân o n d li u, phân o n d li u b sung, phân o n ngăn x p. a ch phân o n này s ư c k t h p v i a ch offset truy xu t ô nh . (xem chi ti t các ph n sau) - Các thanh ghi con tr l nh và tr ng thái IP (Intruction Pointer): thanh ghi ch a a ch offset c a l nh k ti p c n th c hi n. Thanh ghi này không th ư c truy xu t tr c ti p. FLAGS: thanh ghi c tr ng thái, dùng ch a các bit mô t tr ng thái c a l nh v a ư c th c hi n, ho c ch a các bit i u khi n c n thi t l p trư c khi g i l nh. Bao g m các bit c sau ây: (xem chi ti t các ph n sau) CF (Carry Flag): b t khi phép tính v a th c hi n có s d ng bit nh PF (Parrity Flag): b t khi k t qu c a phép tính v a th c hi n có ch n bit 1 AF (Auxilary Flag): b t khi phép tính v a th c hi n có s d ng bit nh ph ZF (Zero Flag): b t khi k t qu c a phép tính v a th c hi n là 0 SF (Sign Flag): b t khi k t qu c a phép tính v a th c hi n có bit d u b t c h y t ng bư c TF (Trace Flag): b t chuy n sang ch IF (Interrupt Flag): b t cho phép các ng t x y ra DF (Direction Flag): b t ch n ch gi m ch s t ng khi làm vi c v i m ng OF (Overflow Flag): b t khi phép tính v a th c hi n gây ra tràn s 1
  2. C u trúc mã l nh – Các ki u nh v d li u C u trúc mã l nh (Instruction format) trong 8086 M t l nh (instruction) mà b vi x lí có th hi u ư c thư ng r t ơn gi n. Ví d như di chuy n d li u t m t ô nh vào thanh ghi, c ng thanh ghi th hai vào thanh ghi th nh t,… Trong 8086 m i l nh thư ng tác ng n 0,1 ho c 2 i tư ng (operand, t m g i là toán h ng). Toán h ng có th là m t thanh ghi, m t h ng s ho c m t ô nh . Thông thư ng, m t l nh (instruction) có c u trúc như sau: Hình 1. C u trúc mã l nh Trư ng Prefix dùng thay i thanh ghi phân o n m c nh ho c ch nh s l p l i c a l nh trong thao tác x lí chu i. Trư ng Opcode là mã c a thao tác, cho bi t l nh này làm gì. Bit D (direction) cho bi t hư ng tác ng c a l nh. Bit W (width) cho bi t kích thư c c a toán h ng. Hai trư ng REG và R/M mô t hai toán h ng ch u tác ng c a l nh. Trư ng REG ch a mã s c a m t thanh ghi. Trư ng R/M có th là mã s c a m t thanh ghi (trư ng h p toán h ng là thanh ghi) ho c là mô t cách tính a ch c a m t ô nh trong b nh (trư ng h p toán h ng là ô nh ). Trư ng MOD cho bi t trư ng R/M mô t thanh ghi hay ô nh , cũng như cho bi t có trư ng Displacement phía sau hay không. Trư ng Displacement ư c s d ng khi toán h ng là ô nh . Trư ng này ư c s d ng k t hơp v i các thông tin lưu trong trư ng R/M tính a ch c a toán h ng. Trư ng Immediate ư c s d ng khi toán h ng là m t h ng s . Không ph i l nh nào cũng có các trư ng ư c miêu t trên. Chi ti t v các trư ng như sau: REG W=1 W=0 Segment 000 AX AL ES D = 1 REG là ích n 001 CX CL CS D = 0 REG là ngu n 010 DX DL SS 011 BX BL DS W = 1 Toán h ng là word 100 SP AH W = 0 Toán h ng là byte 101 BP CH 110 SI DH 111 DI BH B ng 1 Mã trư ng REG và các bit D, W 2
  3. MOD Ý nghĩa c a R/M và Displacement 00 N u R/M = 110 thì EA = disp-high _ disp-low N u R/M ≠ 110 thì ph n displacement không có. DISP = disp-low, s ư c signed extended 01 10 DISP = disp-high _ disp-low 11 R/M mô t thanh ghi B ng 2. Mã trư ng MOD R/M Cách tính a ch (Effective Address) 000 EA = BX + SI + DISP 001 EA = BX + DI + DISP 010 EA = BP + SI + DISP 011 EA = BP + DI + DISP 100 EA = SI + DISP 101 EA = DI + DISP EA = BP + DISP (tr trư ng h p MOD = 00, xem 110 trên) 111 EA = BX + DISP B ng 3. Mã trư ng R/M Ví d : L nh chép n i dung thanh ghi DX vào CX có mã 8BCAh, l nh chép n i dung thanh ghi CX vào DX có mã 8BD1h. Hình 2. Mã l nh MOV gi a hai thanh ghi Ví d : L nh chép n i dung bi n var (có a ch DS:1234h) vào thanh ghi CX có mã 8B0E1234h. (Xem Hình 3). L nh chép ngư c l i có mã 890E1234h. Hai mã này ch khác nhau bit D. Trư ng h p th nh t, D = 1 vì thanh ghi CX là ích n. Trư ng h p th hai, D = 0 vì thanh ghi CX là ngu n. Trong c hai trư ng h p, a ch (EA) c a ô nh (bi n var) ư c l y tr c ti p t 2 bytes c a vùng Displacement (MOD = 00 và R/M = 110, xem b ng phía trên). Hai byte disp-high và disp-low c a vùng Displacement ch a offset c a bi n var trong phân o n d li u. 3
  4. Hình 3. Mã l nh MOV gi a thanh ghi và b nh M t s l nh có c u trúc c bi t, ví d , ghép chung trư ng opcode v i trư ng reg, nh m giúp rút ng n dài l nh. Ví d : l nh gán AX b ng 4567h có mã B84567h. a) C u trúc chung b) Ví d : MOV AX, 4567h Hình 4. Mã l nh MOV gi a Accumulator và h ng s Khi toán h ng là m t thanh ghi phân o n, ch c n 2 bit ch nh m t trong b n thanh ghi phân o n. Nghĩa là trư ng REG luôn có d ng 0xx. Bit xx ư c nh nghĩa như trong B ng 1. Ví d , l nh chép n i dung thanh ghi AX vào thanh ghi phân o n DS có mã là 8ED8h. Hình 5. Mã l nh MOV gi a thanh ghi thư ng và thanh ghi phân o n Khi có ch nh thanh ghi phân o n dùng truy xu t b nh khác v i thanh ghi phân o n m c nh thì trong mã l nh xu t hi n thêm Prefix. Ví d : l nh chép n i dung ô nh ES:2345h vào thanh ghi DS có mã 268E1E2345h, trong ó 26h là prefix. Hình 6. Mã l nh MOV gi a thanh ghi phân o n và ô nh , có s d ng segment override prefix 4
  5. Stack và ng d ng trong vi c g i chương trình con, g i ng t Khái ni m stack Stack là m t vùng b nh mà ó, ngoài vi c truy xu t tr c ti p các ô nh b ng a ch , ngư i ta nh nghĩa thêm hai thao tác là PUSH (b vào) và POP (l y ra). Stack thư ng ư c dùng làm nơi lưu tr t m th i các giá tr trung gian ho c dùng trong vi c g i chương trình con. N u ch s d ng hai thao tác PUSH & POP truy xu t d li u trong stack thì stack gi ng như m t cái thùng ng tài li u. Nh ng gì b vào sau s n m trên nh ng gì b vào trư c, do ó khi l y ra thì bao gi cũng ph i l y cái b vào sau cùng. Ngư i ta g i c u trúc như v y là LIFO (last in first out). ghi l i a ch offset nơi b d li u vào sau cùng, ngư i ta dùng thanh ghi SP, còn a ch segment thì ư c lưu trong thanh ghi SS. Ví d : (Xem Hình 7, Hình 8) Thao tác PUSH AX bao g m: gi m SP i 2, ưa giá tr c a AX vào ô nh có a ch SS:SP. Thao tác POP AX bao g m: ưa giá tr t ô nh có a ch SS:SP vào AX, tăng SP lên 2. Như th , stack ư c s d ng (còn g i là “n ra”) theo chi u gi m c a a ch , khác v i các vùng nh thông thư ng ư c s d ng theo chi u tăng c a a ch . N u không khai báo phân o n stack, theo m c nh, o n stack và code s chung nhau, và khi chương trình b t u th c hi n, SP ư c kh i ng giá tr 0. Vì v y, thao tác PUSH xx l n u tiên s t giá tr xx t i a ch SS:FFFEh (vì 0 – 2 = FFFEh), thao tác PUSH yy li n ti p theo s t giá tr yy t i a ch SS:FFFCh. (Xem Hình 9) N u có khai báo phân o n stack, ví d : “.stack 200h”, o n stack s ư c c p phát riêng, và khi chương trình b t u th c hi n, SP ư c kh i ng giá tr 200h. Vì v y, thao tác ln u tiên s t giá tr xx t i a ch SS:01FEh, thao tác PUSH xx PUSH yy li n ti p theo s t giá tr yy t i a ch SS:01FCh. (Xem Hình 10) a) AX có giá tr 3412h, trư c thao tác PUSH AX b) Sau thao tác PUSH AX Hình 7. Th c hi n PUSH AX a) Trư c thao tác POP AX b) Sau thao tác POP AX, thanh ghi AX có giá tr A020h Hình 8. Th c hi n POP AX 5
  6. a) Trư c khi th c hi n PUSH b) Sau khi th c hi n PUSH Hình 9. Trư ng h p không khai báo stack segment a) Trư c khi th c hi n PUSH b) Sau khi th c hi n PUSH Hình 10. Trư ng h p có khai báo stack segment 6
  7. Chương trình con Chương trình con là m t nhóm các l nh th c hi n m t công vi c nh t nh, có th c n ư c làm l p i l p l i nhi u l n nhi u th i i m khác nhau. M i khi c n th c hi n công vi c ó, ngư i ta nói r ng c n ph i “g i chương trình con” tương ng. N u nhìn m t chương trình máy tính như là m t dãy liên ti p các l nh, thì vi c “g i m t chương trình con” ch là vi c thay i tr t t th c hi n l nh, hay nói khác i là thay vì th c hi n l nh ti p theo li n sau l nh v a th c hi n, CPU “nh y” n m t ch khác th c hi n các l nh ó, sau ó quay l i ch cũ và th c hi n ti p các l nh ang b d . Như v y, g i m t chương trình con, ta c n hai thao tác là CALL (g i) và RET (tr v ). ây chính là hai l nh thu c nhóm các l nh chuy n i u khi n. L nh CALL dùng trong chương trình chính g i m t chương trình con, l nh RET dùng cu i chương trình con quay tr v chương trình chính. Thao tác CALL: lưu tr (PUSH) a ch c a l nh ti p ngay sau l nh CALL (nơi c n s d ng stack • quay l i) • ghi vào thanh ghi con tr l nh IP a ch c a l nh u tiên c a chương trình con. Thao tác RET l y (POP) giá tr t stack và ghi vào thanh ghi con tr l nh IP, làm cho l nh ti p theo ư c th c hi n chính là l nh ngay sau l nh CALL. Như ã bi t, a ch có th là a ch g n ho c a ch xa. N u chương trình con và chương trình chính n m cùng m t segment thì l nh CALL ch c n PUSH vào stack 2 byte ( a ch g n). Trong trư ng h p chương trình con và chương trình chính n m hai segment khác nhau l nh CALL ph i PUSH 4 byte vào stack ( a ch xa). Tương ng, l nh RET s l y ra 2 ho c 4 byte tùy trư ng h p. Xem ví d o n chương trình và mã l nh tương ng như sau: Code segment .stack 200h .code 0000h ... ... MOV AX,’a’ 0005h B8 00 61 h 0008h E8 00 3A h CALL ToUpper MOV BX,AX 000Bh 8B D8 h MOV AX,’z’ 000Dh B8 00 7A h 0010h E8 00 32 h CALL ToUpper 0013h 8B C8 h MOV CX,AX ... ... 0037h B8 4C 00 h MOV AX,4C00h 003A CD 21 h INT 21h ... ... ... ... ToUpper: 0045h 2D 00 20 h SUB AX,20h 0048h C3 h RET ... ... Hình 11. Ví d s d ng CALL 7
  8. Trong ví d , hàm (chương trình con) ToUpper ư c g i 2 l n. (Lưu ý r ng nhãn ToUpper không t o ra mã l nh nên không chi m ch trong code segment). L n th nh t khi th c hi n l nh CALL a ch CS:0008h (Xem Hình 12) T i th i i m trư c khi th c hi n l nh CALL này, thanh ghi IP có giá tr 0008h, còn • thanh ghi SP có giá tr 0200h (tr xu ng áy stack). Khi l nh CALL ư c n p t b nh vào CPU th c hi n, thanh ghi IP ư c t • ng tăng lên m t lư ng b ng kích thư c mã l nh CALL, do ó s có giá tr 000Bh và tr n l nh ti p theo là l nh MOV. Khi l nh CALL ư c th c hi n, giá tr c a thanh ghi IP (chính là a ch c a l nh • MOV) ư c push vào stack (SP gi m xu ng còn 01FEh), sau ó thanh ghi IP ư c c ng thêm m t lư ng b ng displacement lưu trong mã c a l nh CALL (003Ah). K t qu là IP có giá tr 0045h (=000Bh+003Ah), chính là a ch c a ToUpper. L nh ti p theo ư c n p vào CPU th c hi n s là l nh SUB a ch 0045h. • Sau ó, l nh RET ư c th c hi n, làm cho giá tr trong stack ư c POP ra thanh ghi • n l nh MOV, còn SP tăng lên 0200h. IP. K t qu là IP có giá tr 000Bh, tr a ch 000Bh ư c th c hi n. Ti p theo, l nh MOV • a) Trư c CALL b) Sau CALL c) Sau RET Hình 12. Quá trình g i chương trình con Stack Stack Stack segment segment segment . . . 01FCh 01FCh 01FCh 01FDh 01FDh 01FDh 01FEh 01FEh 13h 01FEh 13h 01FFh 01FFh 00h 01FFh 00h 0200h 0200h 0200h IP 0010h IP 0045h IP 0013h SP 0200h SP 01FEh SP 0020h a) Trư c CALL b) Sau CALL c) Sau RET Hình 13. G i l n 2 8
  9. L n th 2, hàm ToUpper ư c g i t i a ch 0010h, quá trình di n ra tương t . (Xem Hình 13). Lưu ý r ng hai l i g i CALL ToUpper ư c d ch thành 2 mã l nh khác nhau (E8003Ah và E80032h), b i vì hai l i g i n m hai v trí khác nhau, có displacement khác nhau. Nhưng vì sao c n dùng stack lưu a ch tr v ? Nguyên nhân là do các l i g i có th l ng nhau, nghĩa là trong chương trình con này có th xu t hi n l i g i chương trình con khác, ho c là g i chính nó. Khi ó, thao tác RET u tiên c n l y a ch tr v ư c c t b i CALL sau cùng. i u này phù h p v i nguyên t c LIFO c a stack. (Xem Hình 14) Code segment .stack 200h 0000h .code ... ... 0005h B8 00 56 h MOV AX,’V’ 0008h E8 00 3E h CALL Upcase 000Bh 8B D8 h MOV BX,AX 000Dh B8 00 6E h MOV AX,’n’ 0010h E8 00 36 h CALL Upcase 0013h 8B C8 h MOV CX,AX ... ... 0037h B8 4C 00 h MOV AX,4C00h 003A CD 21 h INT 21h ... ... ... ... ToUpper: SUB AX,20h 0045h 2D 00 20 h RET 0048h C3 h Upcase: CMP AX,’a’ 0049h 3D 00 61 h JB Notaz 004Ch 72 08 h CMP AX,’z’ 004Eh 3D 00 7A h 0051h 77 03 h JA Notaz 0053h E8 FF EF h CALL ToUpper Notaz: 0056h C3 h RET ... Hình 14. CALL l ng nhau a ch tr v vào stack di n ra như sau. Xem Hình 15. Quá trình PUSH và POP các 9
  10. Stack Stack Stack Stack Stack segment segment segment segment segment . . . . . SP 01FCh 01FCh 01FCh 56h 01FCh 56h 01FCh 56h 01FDh 01FDh 01FDh 00h 01FDh 00h 01FDh 00h SP SP 01FEh 01FEh 0Bh 01FEh 0Bh 01FEh 0Bh 01FEh 0Bh 01FFh 01FFh 00h 01FFh 00h 01FFh 00h 01FFh 00h SP SP 0200h 0200h 0200h 0200h 0200h IP 0008h IP 0049h IP 0045h IP 0056h IP 000Bh SP 0200h SP 01FEh SP 01FCh SP 01FEh SP 0200h a) Trư c b) Sau c) Sau d) Sau e) Sau CALL Upcase CALL Upcase CALL ToUpper RET c a ToUpper RET c a Upcase Hình 15. S thay i c a stack khi CALL l ng nhau Interrupt (ng t) Ng t là m t cơ ch cho phép CPU nh n bi t v nh ng s ki n x y ra bên ngoài (hardware interrupt, ng t c ng) cũng như bên trong CPU (software interrupt, ng t m m) và có m t áp ng thích h p. Ng t c ng ư c dùng tránh vi c CPU ph i ch i nh ng thi t b ngo i vi khác có t c x lí ch m hơn. Trong th i gian các thi t b này còn ang x lí, thì CPU có th làm nh ng công vi c khác. Sau khi hoàn thành công vi c c a mình, thi t b s ch ng gây ra m t s thay i tín hi u trên m t dây d n nh m m c ích báo cho CPU bi t v tình tr ng c a mình. Khi CPU nh n ư c s thay i tín hi u này (xem như m t s ki n), CPU s ngưng công vi c hi n t i th c hi n m t o n chương trình con (interrupt handler, trình x lí ng t) làm nh ng thao tác c n thi t ( áp ng), sau ó quay tr l i ti p t c công vi c. Ng t m m ư c dùng khi chương trình ch ng g i m t o n chương trình con h th ng (interrupt handler, trình x lí ng t). Các chương trình con h th ng là m t ph n c a h i u hành ho c c a BIOS. Vi c g i này th c hi n không ph i b ng l nh CALL mà b ng l nh INT. Có th xem như l nh INT ã t o ra m t s ki n òi h i áp ng c a CPU. Như v y, c hai lo i ng t c ng và ng t m m u có liên quan n vi c g i m t chương trình con khi có m t s ki n x y ra, ch khác nhau cách hình thành s ki n này. i v i ng t c ng, m t tín hi u trên ph n c ng thay i gây ra s ki n. i v i ng t m m, l nh INT gây ra s ki n. a ch b t u c a các chương trình con (trình x lí ng t) này ư c lưu trong m t b ng, g i là b ng vector ng t (interrupt vector table). M i ng t có m t s hi u phân bi t. V i m i s hi u ng t, trong b ng lưu gi n l nh u tiên c a trình x lí ng t tương ng. a ch xa tr Nhưng không gi ng như vi c g i chương trình con b ng CALL thông thư ng, ây giá tr c a 3 thanh ghi ư c PUSH vào stack. u tiên là thanh ghi c , sau ó là CS và cu i cùng là IP. Ti p theo, d a vào s hi u c a ng t ( ư c cung c p b i ph n c ng ho c b i i s c a l nh INT), a ch xa c a trình x lí ng t ư c l y t b ng vector ng t và t vào CS, IP. có th tr v chương trình chính, cu i trình x lí ng t có l nh IRET. L nh này theo th t ngư c l i, POP giá tr t stack vào IP, CS và thanh ghi c . Ngoài ra, còn m t lo i ng t n a, ó là ng t n i b bên trong CPU (internal interrupt), x y ra khi có m t l i c bi t, ví d , th c hi n phép chia cho 0, ho c th c hi n m t mã l nh không t n t i. Cơ ch g i và tr v t ng t hoàn toàn gi ng như hai lo i trên. M t s ng t có th b che, nghĩa là không cho phép chúng x y ra, b ng cách thay i m t s bit trong m t thanh ghi i u khi n. Các ng t như v y g i là maskable. Các ng t không cho phép che g i là non-maskable. 10
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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