Bài giảng Kỹ thuật Vi xử lý - Hồ Viết Việt
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật Vi xử lý - Hồ Viết Việt", để 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:
bai_giang_ky_thuat_vi_xu_ly_ho_viet_viet.pdf
Nội dung text: Bài giảng Kỹ thuật Vi xử lý - Hồ Viết Việt
- BàiBài gigiảảngng KKỹỹ thuthuậậtt ViVi xxửử lýlý NgànhNgành ĐĐiiệệnn ttửử ViViễễnn thôngthông ĐạĐạii hhọọcc BáchBách khoakhoa ĐĐàà NNẵẵngng ccủủaa HHồồ ViViếếtt ViViệệtt,, KhoaKhoa CNTTCNTT ĐĐTVTTVT TàiTài liliệệuu thamtham khkhảảoo [1][1] KKỹỹ thuthuậậtt vivi xxửử lýlý,, VVăănn ThThếế MinhMinh,, NXBNXB GiáoGiáo ddụụcc,, 19971997 [2][2] KKỹỹ thuthuậậtt vivi xxửử lýlý vàvà LLậậpp trìnhtrình AssemblyAssembly chocho hhệệ vivi xxửử lýlý,, ĐỗĐỗ XuânXuân TiTiếếnn,, NXBNXB KhoaKhoa hhọọcc && kkỹỹ thuthuậậtt,, 20012001
- ChChươươngng 11 CácCác hhệệ ththốốngng ssốố,, mãmã hoáhoá,, linhlinh kikiệệnn ssốố ccơơ bbảảnn 1.11.1 CácCác hhệệ ththốốngng ssốố - Hệ thập phân - Hệ nhị phân - Hệ thập lục phân 1.21.2 CácCác hhệệ ththốốngng mãmã hoáhoá - ASCII - BCD 1.31.3 CácCác linhlinh kikiệệnn đđiiệệnn ttửử ssốố ccơơ bbảảnn - Các cổng logic: AND, OR, XOR,NOT - Các bộ giải mã, Các IC chốt, đêm
- 1.11.1 CácCác hhệệ ththốốngng ssốố HHệệ đếđếmm ththậậpp phânphân (Decimal)(Decimal) CònCòn ggọọii làlà hhệệ đếđếmm ccơơ ssốố mmườườii (Vì có quá ít người có chín ngón tay hoặc mười một ngón chân?) DùngDùng mmườườii kýký hihiệệuu:: 1,2,3,4,5,6,7,8,9,01,2,3,4,5,6,7,8,9,0 VíVí ddụụ:1.1::1.1: BaBa nghìnnghìn ChínChín trtrăămm BBảảyy mmươươii TámTám 39783978 == 3x103x103 ++ 9x109x102 ++ 7x107x101 ++ 8x108x100 == 30003000 ++ 900900 ++ 7070 ++ 88
- 1.11.1 CácCác hhệệ ththốốngng ssốố HHệệ đếđếmm nhnhịị phânphân (Binary)(Binary) CònCòn ggọọii làlà HHệệ đếđếmm ccơơ ssốố haihai SSửử ddụụngng haihai kýký hihiệệuu (bit):(bit): 00 vàvà 11 (Các hệ thống điện tử số chỉ sử dụng hai mức điện áp?) KíchKích ccỡỡ,, LSB,LSB, MSBMSB ccủủaa ssốố nhnhịị phânphân SSốố nhnhịị phânphân khôngkhông ddấấuu (Unsigned)(Unsigned) SSốố nhnhịị phânphân cócó ddấấuu (S(Sốố bùbù haihai))
- SSốố nhnhịị phânphân Mỗi ký hiệu 0 hoặc 1 được gọi là 1 Bit (Binary Digit- Chữ số nhị phân) Kích cỡ của một số nhị phân là số bit của nó MSB (Most Significant Bit): Bit sát trái LSB (Least Significant Bit): Bit sát phải VíVí ddụụ 1.1:1.1: 10101010101010101010101010101010 MSB LSB làlà mmộộtt ssốố nhnhịị phânphân 1616 bitbit
- SSốố nhnhịị phânphân khôngkhông ddấấuu ChChỉỉ bibiểểuu didiễễnn đượđượcc cáccác giágiá trtrịị khôngkhông âmâm (>=(>= 0)0) VVớớii nn bitbit cócó ththểể bibiểểuu didiễễnn cáccác giágiá trtrịị ttừừ 00 đếđếnn 22n –– 11 VíVí ddụụ 1.3:1.3: GiáGiá trtrịị VV ccủủaa ssốố nhnhịị phânphân khôngkhông ddấấuu 11011101 đượđượcc tínhtính:: V(1101)V(1101) == 1x21x23 ++ 1x21x22 ++ 0x20x21 ++ 1x21x20 == 88 ++ 44 ++ 00 ++ 11 == 1313
- SSốố nhnhịị phânphân khôngkhông ddấấuu TTổổngng quátquát:: NNếếuu ssốố nhnhịị phânphân NN nn bit:bit: NN == bb( n-1) bb( n-2) . . bb1 bb0 thìthì giágiá trtrịị VV ccủủaa nónó làlà:: (n-1) (n-2) VV == bb(n -1) xx 22 +b+b (n-2) x2x2 ++ 1 0 ++ bb1 xx 22 ++ bb0 xx 22 CácCác ssốố nhnhịị phânphân khôngkhông ddấấuu 44 bitbit bibiểểuu didiễễnn đượđượcc cáccác giágiá trtrịị ttừừ ?? đếđếnn ??
- 1616 giágiá trtrịị ttừừ 00 đếđếnn 1515 Nhị phân không dấu Giá trị thập phân 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15
- SSốố nhnhịị phânphân khôngkhông ddấấuu DDảảii giágiá tritri ccủủaa cáccác ssốố khôngkhông ddấấuu 88 bitbit làlà [0,255][0,255] (unsigned(unsigned charchar trongtrong C)C) DDảảii giágiá tritri ccủủaa cáccác ssốố khôngkhông ddấấuu 1616 bitbit làlà [0,65535][0,65535] (unsigned(unsigned intint trongtrong C)C)
- ChuyChuyểểnn đổđổii ththậậpp phânphân sangsang nhnhịị phânphân Ví dụ 1.4 Chuyển 25 sang nhị phân không dấu. Dùng phương pháp chia 2 liên tiếp Chia 2 Thương số Dư số 25/2 = 12 1 LSB 12/2 = 6 0 6/2 = 3 0 3/2 = 1 1 1/2 = 0 1 MSB Kết quả là: 11001
- SSốố nhnhịị phânphân cócó ddấấuu BiBiểểuu didiễễnn đượđượcc ccảả cáccác giágiá trtrịị âmâm CònCòn ggọọii làlà SSốố bùbù haihai VVớớii nn bitbit cócó ththểể bibiểểuu didiễễnn cáccác giágiá trtrịị ttừừ –– 22(n-1) đếđếnn 22(n-1) –– 11 VíVí ddụụ 1.3:1.3: GiáGiá trtrịị VV ccủủaa ssốố nhnhịị phânphân cócó ddấấuu 11011101 đượđượcc tínhtính:: V(1101)V(1101) == –– 1x21x23 ++ 1x21x22 ++ 0x20x21 ++ 1x21x20 == –– 88 ++ 44 ++ 00 ++ 11 == –– 33
- SSốố nhnhịị phânphân cócó ddấấuu TTổổngng quátquát:: NNếếuu ssốố nhnhịị phânphân NN nn bit:bit: NN == bb( n-1) bb( n-2) . . bb1 bb0 thìthì giágiá trtrịị VV ccủủaa nónó làlà:: (n-1) (n-2) VV == ––bb(n -1) xx 22 +b+b (n-2) x2x2 ++ 1 0 ++ bb1 xx 22 ++ bb0 xx 22 CácCác ssốố nhnhịị phânphân cócó ddấấuu 44 bitbit bibiểểuu didiễễnn đượđượcc cáccác giágiá trtrịị ttừừ ?? đếđếnn ??
- 1616 giágiá trtrịị ttừừ 88 đếđếnn 77 Nhị phân có dấu Giá trị thập phân 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 - 8 1001 -7 1010 -6 1011 -5 1100 -4 1101 -3 1110 -2 1111 -1
- SSốố nhnhịị phânphân cócó ddấấuu DDảảii giágiá tritri ccủủaa cáccác ssốố cócó ddấấuu 88 bitbit làlà [[ 128,+127]128,+127] (char(char trongtrong C)C) DDảảii giágiá tritri ccủủaa cáccác ssốố cócó ddấấuu 1616 bitbit làlà [[ 32768,+32767]32768,+32767] ((intint trongtrong C)C)
- TìmTìm đốđốii ssốố ((LLấấyy bùbù 2)2) Tổng của một số với đối số củanóbằng 0 Ví dụ 1.5 Đối số của số nhị phân có dấu 10011101? 10011101 Số có dấu (-99) 01100010 Lấy bù 1 + 1 Cộng 1 01100011 Kết quả (+99)
- ChuyChuyểểnn ssốố ththậậpp phânphân sangsang nhnhịị phânphân cócó ddấấuu VVơơíí ssốố ddươươngng::GiGiốốngng nhnhưư chuychuyểểnn ththậậpp phânphân sangsang nhnhịị phânphân khôngkhông ddấấuu rrồồii thêmthêm bitbit 00 vàovào sátsát bênbên tráitrái VíVí ddụụ:: ChuyChuyểểnn 2525 sangsang nhnhịị phânphân cócó ddấấuu:: KKếếtt ququảả:: 001101111011 VVớớii ssốố âmâm:: ChuyChuyểểnn đốđốii ssốố sangsang nhnhịị phânphân cócó ddấấuu rrồồii llấấyy bùbù 22
- ChuyChuyểểnn ssốố ththậậpp phânphân sangsang nhnhịị phânphân cócó ddấấuu VVíí ddụụ 1.61.6 ChuyChuyểểnn –– 2626 sangsang nhnhịị phânphân 1.1. chuychuyểểnn đốđốii ssốố:: +26+26 == 1101011010 2.2. ĐưĐưaa 00 vàovào sátsát tráitrái:: 011010011010 3.3. BBùù 11:: 100101100101 4.4. CCộộngng 1:1: ++ 11 2626 == 100110100110
- SSốố ththậậpp llụụcc phânphân Quen gọi là số Hexa (Hexadecimal) Còn gọi là hệ đếm cơ số mười sáu Sử dụng 16 ký hiệu để biểu diễn: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Mỗi ký hiệu tương ứng với 4-bit Mục đích: Biểu diễn số nhị phân ở dạng ngắn gọn 11110000 = F0 10101010 = AA 01010101 = 55 Nhị phân Thập lục phân
- MMỗỗii kýký hihiệệuu ttươươngng ứứngng vvớớii 44 bitbit HHeexxaa BBiinnaarryy HHeexxaa BBiinnaarryy 00 00000000 88 11000000 11 00000011 99 11000011 22 00001100 AA 11001100 33 00001111 BB 11001111 44 00110000 CC 11110000 55 00110011 DD 11110011 66 00111100 EE 11111100 77 00111111 FF 11111111
- ChuyChuyểểnn đổđổii HexaHexa && nhnhịị phânphân Ví dụ 1.7 Chuyển số hexa 2F8 và ABBA sang nhị phân Thay thế mỗi ký hiệu hexa bằng 4-bit tương ứng với nó 2 F 8 0010 1111 1000 AB BA 1010 1011 1011 1010 Kết quả 2F8h = 001011111000b ABBAh = 1010101110111010b
- ChuyChuyểểnn đổđổii HexaHexa && nhnhịị phânphân Ví dụ 1.8 Chuyển số nhị phân 1100101011111110 sang hexa -Trước hết theo hướng từ LSB về MSB chia số nhị phân đó thành các nhóm 4-bit -Sau đóthay thế mỗi nhóm 4-bit bằng ký hiệu hexa tương ứng với nó 1100 1010 1111 1110 C A F E Kết quả: 1100101011111110b = CAFEh
- 1.21.2 CácCác hhệệ ththốốngng mãmã hoáhoá ASCII:ASCII: AAmericanmerican SStandardtandard CCodeode forfor IInformationnformation IInterchange.nterchange. DùngDùng đểđể bibiểểuu didiễễnn cáccác kýký ttựự (characters):(characters): Gồm ký tự hiển thị được và ký tự điều khiển MMỗỗii kýký ttựự đượđượcc bibiểểuu didiễễnn bbằằngng 88 bitbit ggọọii làlà mãmã ASCIIASCII ccủủaa kýký ttựự đđóó • Các chữ cái in và thường: A Z và a z • Các chữ số thập phân: 0,1, ,9 • Các dấu chấm câu: ; , . : vân vân • Các ký tự đặc biệt: $ & @ / { vân vân • Các ký tự điều khiển: carriage return (CR) , line feed (LF), beep, vân vân
- MãMã ASCIIASCII Với bảng mã được sắp xếp theo trật tự tăng dần của mã ASCII: • Các chữ số thập phân: 0,1, ,9 nằm liên tiếp nhau, chữ số 0 có mã ASCII là 30h • Các chữ cái in:A Z nằm liên tiếp nhau, chữ A có mã ASCII là 41h • Các chữ cái thường: a z nằm liên tiếp nhau, chữ a có mã ASCII là 61h • Mã ASCII của chữ in và chữ thường tương ứng chỉ khác nhau ở bit 5 A: 01000001 B: 01000010 Z: 01011010 a: 01100001 b: 01100010 z: 01111010 • 32 ký tự điều khiển được xếp đầu bảng mã (00h đến 1Fh)
- Bảng mã ASCII
- Bảng mã ASCII
- MãMã BCDBCD BCDBCD ((BBinaryinary CCodedoded DDecimal)ecimal) QuenQuen ggọọii làlà ssốố BCDBCD DùngDùng đểđể mãmã hoáhoá cáccác ssốố ththậậpp phânphân bbằằngng cáccác kýký hihiệệuu nhnhịị phânphân MMỗỗii chchữữ ssốố ththậậpp phânphân đượđượcc bibiểểuu didiễễnn bbằằngng mmộộtt ttổổ hhợợpp 44 bitbit CácCác ttổổ hhợợpp 44 bitbit khôngkhông ssửử ddụụngng ggọọii làlà cáccác ttổổ hhợợpp ccấấmm NhiNhiềềuu linhlinh kikiệệnn đđiiệệnn ttửử ssửử ddụụngng mãmã nàynày (B(Bộộ gigiảảii mãmã BCDBCD LEDLED bbảảyy đđooạạnn 7447)7447)
- BBảảngng mãmã BCDBCD ThThậậpp phânphân BCDBCD ThThậậpp phânphân BCDBCD 00 00000000 88 10001000 11 00010001 99 10011001 22 00100010 10101010 33 00110011 10111011 44 01000100 11001100 55 01010101 11011101 66 01100110 11101110 77 01110111 11111111
- MãMã BCDBCD ĐừĐừngng nhnhầầmm mãmã hoáhoá BCDBCD vvớớii viviệệcc chuychuyểểnn đổđổii ththậậpp phânphân sangsang nhnhịị phânphân:: VíVí ddụụ 1.9:1.9: ChoCho ssốố ththậậpp phânphân 1515 MãMã BCDBCD ccủủaa nónó làlà:: 0001010100010101 SSốố nhnhịị phânphân khôngkhông ddấấuu 88 bitbit ttươươngng ứứngng làlà:: 0000111100001111
- Bit,Bit, Nibble,Nibble, Byte,Byte, WordWord Bit: Một chữ số nhị phân 0 hoặc 1 Nibble: 4-bit (nửa byte) Byte: 8-bit (Còn gọi là Octet) Word (Từ): 16-bit Double Word (Từ kép): 32-bit 10 K = 2 = 1024 Kb (kilôbit) = 1024 bit = 128 byte KB (kilôbyte) = 1024 byte Kbps (Kilobit per second): Kilôbit trên giây 20 M = 2 = 1024 K = 1048576 Mb (Mêgabit) = 1024 Kb = 1048576 bit MB (Mêgabyte) = 1024 KB = 1048576 byte 30 G = 2 = 1024 M = 1048576 K Gb (Gigabit) = 1024 Mb = 1048576 Kb GB (Gigabyte) = 1024 MB = 1048576 KB T = ?
- 1.31.3 CácCác linhlinh kikiệệnn đđiiệệnn ttửử ssốố ccơơ bbảảnn PhânPhân chiachia linhlinh liliệệnn ssốố theotheo mmậậtt độđộ tíchtích hhợợpp:: SSI,SSI, MSI,MSI, LSI,LSI, VLSIVLSI SSI (Small Scale Integration): Vi mạch tích hợp cỡ nhỏ MSI (Medium Scale Integration): Vi mạch tích hợp cỡ trung LSI (Large Scale Integration): Vi mạch tích hợp cỡ lớn VLSI (Very Large Scale Integration):Vi mạch tích hợp cỡ cực lớn SSI:SSI: CácCác ccổổngng logiclogic and,and, or,or, xorxor,, notnot MSI:MSI: CácCác bbộộ gigiảảii mãmã,, CácCác chchốốtt,, đệđệmm LSI,VLSI:LSI,VLSI: CácCác bbộộ vivi xxửử lýlý,, vivi đđiiềềuu khikhiểểnn,, DSPsDSPs
- CCổổngng logiclogic ANDAND A AA BB AA AANNDD BB A AND B 11 11 11 B 11 00 00 Cổng AND có thể có nhiều hơn 2 đầu vào Trên một chip có thể có nhiều cổng 00 11 00 AND 00 00 00
- CCổổngng logiclogic AND:AND: ICIC 74087408
- CCổổngng logiclogic AND:AND: ICIC 74117411
- CCổổngng logiclogic OROR A AA BB AA OORR BB A OR B B 11 11 11 Cổng OR có thể có nhiều hơn 2 đầu vào 11 00 11 Trên một chip có thể có nhiều cổng OR 00 11 11 00 00 00
- CCổổngng logiclogic OR:OR: ICIC 74327432
- CCổổngng logiclogic XORXOR A AA BB AA XXOORR BB A XOR B B 11 11 00 Cổng XOR có thể có nhiều hơn 2 đầu vào 11 00 11 Trên một chip có thể có nhiều cổng XOR 00 11 11 00 00 00
- CCổổngng logiclogic NOTNOT AA NNOOTT AA 11 00 A NOT A 11 00 00 11 00 11
- ĐệĐệmm 33 trtrạạngng tháithái cc zz cc zz 00 HHiiZZ 11 HHiiZZ 11 xx 00 xx
- ChipChip gigiảảii mãmã 7413874138
- ChipChip gigiảảii mãmã 7413874138
- FlipFlip FlopFlop kikiểểuu DD
- FlipFlip FlopFlop kikiểểuu DD
- FlipFlip FlopFlop kikiểểuu DD
- FlipFlip FlopFlop kikiểểuu DD
- ChChốốtt 88 bitbit 7437374373
- ChChốốtt 88 bitbit 7457374573
- ICIC 7424474244
- ICIC 7424474244
- ĐệĐệmm 22 chichiềềuu 7424574245
- ĐệĐệmm 22 chichiềềuu 7424574245
- BàiBài gigiảảngng KKỹỹ thuthuậậtt ViVi xxửử lýlý NgànhNgành ĐĐiiệệnn ttửử ViViễễnn thôngthông ĐạĐạii hhọọcc BáchBách khoakhoa ĐĐàà NNẵẵngng ccủủaa HHồồ ViViếếtt ViViệệtt,, KhoaKhoa CNTTCNTT ĐĐTVTTVT TàiTài liliệệuu thamtham khkhảảoo [1][1] KKỹỹ thuthuậậtt vivi xxửử lýlý,, VVăănn ThThếế MinhMinh,, NXBNXB GiáoGiáo ddụụcc,, 19971997 [2][2] KKỹỹ thuthuậậtt vivi xxửử lýlý vàvà LLậậpp trìnhtrình AssemblyAssembly chocho hhệệ vivi xxửử lýlý,, ĐỗĐỗ XuânXuân TiTiếếnn,, NXBNXB KhoaKhoa hhọọcc && kkỹỹ thuthuậậtt,, 20012001
- ChChươươngng 22 ViVi xxửử lýlý vàvà HHệệ ththốốngng vivi xxửử lýlý 2.12.1 BBộộ vivi xxửử lýlý - Bộ vi xử lý (Microprocessor) là gì? - Các thành phần của bộ vi xử lý - Ứng dụng của bộ vi xử lý 2.22.2 CácCác hhọọ vivi xxửử lýlý - Họ x86 của Intel- Luật Moore - Họ 68x của Motorola 2.32.3 HHệệ ththốốngng vivi xxửử lýlý - Bộ nhớ - Các cổng I/O - Bus hệ thống: D-Bus, A-Bus, C-Bus - Thiết kế hệ thống vi xử lý?
- 2.12.1 BBộộ vivi xxửử lýlý MMộộtt bbộộ vivi xxửử lýlý làlà mmộộtt mmạạchch tíchtích hhợợpp chchứứaa hànghàng ngànngàn,, ththậậmm chíchí hànghàng tritriệệuu transistortransistor (LSI,(LSI, VLSI)VLSI) đượđượcc kkếếtt nnốốii vvớớii nhaunhau CácCác transistortransistor ấấyy cùngcùng nhaunhau làmlàm viviệệcc đểđể llưưuu trtrữữ vàvà xxửử lýlý ddữữ liliệệuu chocho phépphép bbộộ vivi xxửử lýlý cócó ththểể ththựựcc hihiệệnn rrấấtt nhinhiềềuu chchứứcc nnăăngng hhữữuu íchích ChChứứcc nnăăngng ccụụ ththểể ccủủaa mmộộtt bbộộ vivi xxửử lýlý đượđượcc xácxác địđịnhnh bbằằngng phphầầnn mmềềmm ((cócó ththểể llậậpp trìnhtrình đđưượợcc))
- BBộộ vivi xxửử lýlý Bộ vi xử lý đầu tiên của Intel,4004, được giới thiệu vào năm 1971. 4004 chứa 2300 transistor. Bộ vi xử lý Pentium 4 hiện nay chứa 55 triệu transistor. Bộ vi xử lý thường được sử dụng trong các máy vi tính (microcomputer) với vai trò là CPU. Ngoài ra, chúng còn có mặt ở nhiều thiết bị khác.
- CácCác thànhthành phphầầnn ccủủaa bbộộ vivi xxửử lýlý
- ALUALU vàvà ControlControl UnitUnit ALU Thựchiện các phép toán logic (AND, OR, XOR, NOT) và các phép toán số học(cộng, trừ, nhân, chia) Thực hiện việc chuyển dữ liệu Việc thực hiện lệnh thực sự diễn ra ở ALU Control Unit Có trách nhiệm liên quan đến việc tìm và thực hiện các lệnh bằng cách cung cấp các tín hiệu điều khiển và định thời cho ALU và các mạch khác biết phải làm gì và làm khi nào.
- CácCác thanhthanh ghighi (Registers)(Registers) Thanh ghi là nơimàbộ vi xử lý có thể lưutrữđược mộtsố nhị phân (Kích cỡ của thanh ghi tính bằng bit) Bộ vi xử lý dùng các thanh ghi để lưu trữ dữ liệu tạm thời trong quá trình thực hiện chương trình Các thanh ghi có thể được truy cập bằng các câu lệnh ngôn ngữ máy thường được gọi là các thanh ghi người sử dụng có thể nhìn thấy được (có thể truy cập được) Các thanh ghi điều khiển và các thanh ghi trạng thái được CU dùng để điều khiển việc thực hiện chương trình. Đa số các thanh ghi này người sử dụng không thể nhìn thấy được
- 2.22.2 CCácác hhọọ vivi xxửử lýlý HiHiệệnn nay,nay, cócó rrấấtt nhinhiềềuu nhànhà ssảảnn xuxuấấtt rara cáccác chipchip vivi xxửử lýlý:Intel,:Intel, AMD,AMD, Motorola,Motorola, CyrixCyrix ThôngThông ththườườngng,, mmộộtt hhọọ vivi xxửử lýlý làlà cáccác chipchip vivi xxửử lýlý đượđượcc ssảảnn xuxuấấtt bbởởii mmộộtt nhànhà ssảảnn xuxuấấtt nàonào đđóó TrongTrong phphạạmm vivi mmộộtt hhọọ vivi xxửử lýlý,, theotheo ththờờii giangian vàvà theotheo côngcông nghnghệệ chchếế ttạạoo cócó cáccác đờđờii ((ththếế hhệệ)) vivi xxửử lýlý kháckhác nhaunhau phânphân bibiệệtt theotheo ĐộĐộ dàidài TTừừ ccủủaa chúngchúng (bit)(bit) vàvà ttốốcc độđộ (Hz).(Hz). ĐộĐộ dàidài TTừừ (Word(Word Length)Length) ccủủaa mmộộtt chipchip vivi xxửử lýlý làlà kíchkích ccỡỡ ttốốii đđaa ccủủaa cáccác toántoán hhạạngng nhnhịị phânphân màmà nónó cócó ththểể ththựựcc hihiệệnn cáccác phépphép toántoán trêntrên đđóó
- TTốốcc độđộ ccủủaa hhọọ vivi xxửử lýlý x86x86 ccủủaa IntelIntel The Continuing Evolution of Intel Microprocessors CIS105 December 2002 1600 1,400 1400 1200 ) 1000 Z H M 800 Speed ( 600 550 400 400 400 333 200 200 233 200 100 33 0.74 2 8 12 0 1971 1974 1979 1982 1985 1989 1993 1995 1997 1998 1998 1999 1999 2000 Year
- HHọọ vivi xxửử lýlý x86x86 ccủủaa IntelIntel Model Năm sản xuất Số lượng Transistor 4004 1971 2,300 8008 1972 2,500 8080 1974 5,000 8086 1978 29,000 80286 1982 120,000 80386™ processor 1985 275,000 80486™ DX processor 1989 1,180,000 Pentium® processor 1993 3,100,000 Pentium II processor 1997 7,500,000 Pentium III processor 1999 24,000,000 Pentium 4 processor 2000 55,000,000
- HHọọ vivi xxửử lýlý x86x86 ccủủaa IntelIntel 70’s70’s 4004 8008 8080 8086 Introduced 11/15/71 4/1/72 4/1/74 6/8/78 Clock Speeds 108KHz 200KHz 2MHz 5MHz, 8MHz, 10MHz Bus Width 4 bits 8 bits 8 bits 16 bits Number of 2,300 3,500 6,000 29,000 Transistors (10 microns) (10 microns) (6 microns) (3 microns) Addressable Memory 640 bytes 16 KBytes 64 KBytes 1 MB Virtual Memory Brief Description First microcomputer Data/character 10X the performance 10X the performance chip, Arithmetic manipulation of the 8008 of the 8080 manipulation
- HHọọ vivi xxửử lýlý x86x86 ccủủaa IntelIntel 80’s80’s Intel486TM Intel386TM DX Intel386TM SX DX CPU 80286 Microprocessor Microprocessor Microprocessor Introduced 2/1/82 10/17/85 6/16/88 4/10/89 Clock Speeds 6MHz, 8MHz, 10MHz, 16MHz, 20MHz, 16MHz, 20MHz, 25MHz, 33MHz, 12.5MHz 25MHz, 33MHz 25MHz, 33MHz 50MHz Bus Width 16 bits 32 bits 16 bits 32 bits Number of 134,000 275,000 275,000 1.2 million Transistors (1.5 microns) (1 micron) (1 micron) (1 micron) (.8 mic ron with 50MHz) Addressable Memory 16 megabytes 4 gigabytes 16 megabytes 4 gigabytes Virtual Memory 1 gigabyte 64 terabytes 64 terabytes 64 terabytes Brief Description 3-6X the performance First X 86 chip to 16-bit address bus Level 1 cache on chip of the 8086 handle 32-bit data sets enabled low-c ost 32-bit processing
- HHọọ vivi xxửử lýlý x86x86 ccủủaa IntelIntel 90’s90’s Intel486TM SX Pentium® Pentium® Pro Pentium® II Microprocessor Processor Processor Processor Introduced 4/22/91 3/22/93 11/01/95 5/07/97 Clock Speeds 16MHz, 20MHz, 60MHz,66MHz 150MHz, 166MHz, 200MHz, 233MHz, 25MHz, 33MHz 180MHz, 200MHz 266MHz, 300MHz Bus Width 32 bits 64 bits 64 bits 64 bits Number of 1.185 million 3.1 million 5.5 million 7.5 million Transistors (1 micron) (.8 micron) (0.35 micron) (0.35 micron) Addressable Memory 4 gigabytes 4 gigabytes 64 gigabytes 64 gigabytes Virtual Memory 64 terabytes 64 terabytes 64 terabytes 64 terabytes Brief Description Identical in design to Superscalar Dynamic execution Dual independent bus, Intel486TM DX but architecture brought architecture drives dynamic execution, without math 5X the performance of high-performing Intel MMXTM coprocessor the 33-MHz Intel486TM processor technology DX processor
- 2.32.3 HHệệ ththốốngng vivi xxửử lýlý
- LuLuậậtt MooreMoore Dr. Gordon E. Moore, Chairman Emeritus of Intel Corporation, dự đoán rằng Cứ một năm rưỡi thì số lượng transistor được tích hợp trên chip vi xử lý tăng gấp đôi
- 2.32.3 HHệệ ththốốngng vivi xxửử lýlý Address Bus MEMORY I/O Ports Microprocessor Data Bus Control Lines (Control Bus) Sơ đồ khối chức năng của một hệ thống vi xử lý
- HHệệ ththốốngng vivi xxửử lýlý GGồồmm 33 khkhốốii chchứứcc nnăăngng:: ViVi xxửử lýlý,, BBộộ nhnhớớ,, CácCác ccổổngng I/OI/O BBộộ nhnhớớ đượđượcc ththựựcc hihiệệnn bbằằngng cáccác chipchip nhnhớớ bánbán ddẫẫnn ROMROM hohoặặcc RWM,RWM, làlà nnơơii llưưuu trtrữữ chchươươngng trìnhtrình vàvà ddữữ liliệệuu ĐốĐốii vvớớii vivi xxửử lýlý,, bbộộ nhnhớớ làlà mmộộtt ttậậpp hhợợpp cáccác ôô nhnhớớ phânphân bibiệệtt theotheo địđịaa chchỉỉ ccủủaa chúngchúng CácCác ccổổngng I/OI/O đượđượcc ththựựcc hihiệệnn bbằằngng cáccác chipchip MSIMSI hohoặặcc LSI,LSI, làlà phphầầnn mmạạchch giaogiao titiếếpp gigiữữaa vivi xxửử lýlý vvớớii cáccác thithiếếtt bbịị I/O.I/O. BBộộ vivi xxửử lýlý ccũũngng phânphân bibiệệtt cáccác ccổổngng I/OI/O theotheo địđịaa chchỉỉ ccủủaa chúngchúng
- HHệệ ththốốngng vivi xxửử lýlý 33 khkhốốii chchứứcc nnăăngng:: ViVi xxửử lýlý,, BBộộ nhnhớớ,, CácCác ccổổngng I/OI/O ccủủaa mmộộtt hhệệ ththốốngng vivi xxửử lýlý traotrao đổđổii tíntín hihiệệuu vvớớii nhaunhau thôngthông quaqua BusBus hhệệ ththốốngng BusBus hhệệ ththốốngng làlà mmộộtt ttậậpp hhợợpp cáccác đườđườngng truytruyềềnn ddẫẫnn dùngdùng chungchung,, baobao ggồồmm:: BusBus địđịaa chchỉỉ (A(A Bus),Bus), BusBus ddữữ liliệệuu (D(D Bus)Bus) vàvà BusBus đđiiềềuu khikhiểểnn (C(C Bus)Bus) CácCác tíntín hihiệệuu địđịaa chchỉỉ didi chuychuyểểnn trêntrên AA BusBus theotheo hhướướngng ttừừ vivi xxửử lýlý đếđếnn BBộộ nhnhớớ vàvà cáccác ccổổngng I/O.I/O. SSốố llượượngng đườđườngng truytruyềềnn ddẫẫnn ccủủaa AA BusBus ((ggọọii làlà ĐộĐộ rrộộngng ccủủaa AA Bus)Bus) tínhtính bbằằngng bit,bit, phphảảnn ánhánh khkhảả nnăăngng ququảảnn lýlý bbộộ nhnhớớ ccủủaa chipchip vivi xxửử lýlý
- HHệệ ththốốngng vivi xxửử lýlý CácCác tíntín hihiệệuu ddữữ liliệệuu didi chuychuyểểnn trêntrên DD BusBus theotheo ccảả 22 hhướướngng ttừừ vivi xxửử lýlý đếđếnn BBộộ nhnhớớ vàvà cáccác ccổổngng I/OI/O vàvà ngngượượcc llạạii ((mmỗỗii lúclúc mmộộtt hhướướngng).). SSốố llượượngng đườđườngng truytruyềềnn ddẫẫnn ccủủaa DD BusBus ((ggọọii làlà ĐộĐộ rrộộngng ccủủaa DD Bus)Bus) tínhtính bbằằngng bit,bit, phphảảnn ánhánh mmộộtt phphầầnn ttốốcc độđộ traotrao đổđổii ddữữ liliệệuu ccủủaa chipchip vivi xxửử lýlý vvớớII cáccác khkhốốii chchứứcc nnăăngng kháckhác ĐĐaa ssốố cáccác tíntín hihiệệuu trêntrên CC BusBus làlà cáccác tíntín hihiệệuu đđiiềềuu khikhiểểnn riêngriêng llẽẽ,, cócó tíntín hihiệệuu xuxuấấtt phátphát ttừừ vivi xxửử lýlý,, cócó tíntín hihiệệuu đđii vàovào vivi xxửử lýlý ViVi xxửử lýlý ssửử ddụụngng cáccác tíntín hihiệệuu nàynày đểđể đđiiềềuu khikhiểểnn hohoạạtt độđộngng vàvà nhnhậậnn bibiếếtt trtrạạngng tháithái ccủủaa cáccác khkhốốii chchứứcc nnăăngng kháckhác
- ThiThiếếtt kkếế phphầầnn ccứứngng ccủủaa hhệệ ththốốngng vivi xxửử lýlý ThiThiếếtt kkếế bbộộ nhnhớớ chocho hhệệ ththốốngng vivi xxửử lýlý:: GhépGhép nnốốii cáccác chipchip nhnhớớ bánbán ddẫẫnn ssẵẵnn cócó vvớớii busbus hhệệ ththốốngng saosao chocho khikhi bbộộ vivi xxửử lýlý truytruy ccậậpp bbộộ nhnhớớ thìthì khôngkhông xxảảyy rara xungxung độđộtt gigiữữaa cáccác chipchip nhnhớớ vvớớii nhaunhau vàvà khôngkhông xungxung độđộtt vvớớii cáccác chipchip dùngdùng làmlàm ccổổngng I/OI/O TTươươngng ttựự,, ThiThiếếtt kkếế cáccác ccổổngng I/OI/O chocho hhệệ ththốốngng vivi xxửử lýlý:: GhépGhép nnốốii cáccác chipchip MSIMSI hohoặặcc LSILSI ththườườngng dùngdùng làmlàm ccổổngng I/OI/O vvớớii busbus hhệệ ththốốngng saosao chocho khikhi bbộộ vivi xxửử lýlý truytruy ccậậpp cáccác thithiếếtt bbịị I/OI/O thìthì khôngkhông xxảảyy rara xungxung độđộtt gigiữữaa cáccác chipchip đđóó vvớớii nhaunhau vàvà khôngkhông xungxung độđộtt vvớớii cáccác chipchip dùngdùng làmlàm bbộộ nhnhớớ
- ThiThiếếtt kkếế phphầầnn mmềềmm ccủủaa hhệệ ththốốngng vivi xxửử lýlý ViViếếtt chchươươngng trìnhtrình đđiiềềuu khikhiểểnn hohoạạtt độđộngng ccủủaa hhệệ ththốốngng phphầầnn ccứứngng theotheo chchứứcc nnăăngng mongmong mumuốốnn ((ththườườngng dùngdùng ngônngôn ngngữữ AssemblyAssembly ccủủaa chipchip vivi xxửử lýlý dùngdùng trongtrong hhệệ ththốốngng)) DDịịchch chchươươngng trìnhtrình đđãã viviếếtt sangsang ngônngôn ngngữữ máymáy ssửử ddụụngng cáccác chchươươngng trìnhtrình ddịịchch thíchthích hhợợpp NNạạpp chchươươngng trìnhtrình ngônngôn ngngữữ máymáy vàovào bbộộ nhnhớớ ccủủaa hhệệ ththốốngng vivi xxửử lýlý KiKiểểmm tratra hohoạạtt độđộngng ccủủaa hhệệ ththốốngng vàvà ththựựcc hihiệệnn cáccác hihiệệuu chchỉỉnhnh nnếếuu ccầầnn thithiếếtt CóCó ththểể nhnhờờ ssựự trtrợợ giúpgiúp ccủủaa cáccác chchươươngng trìnhtrình mômô phphỏỏngng trêntrên máymáy tínhtính
- 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 CNTT-Đ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
- Chương 3 Vi xử lý 8088-Intel 3.1 Kiến trúc và hoạt động của 8088 - Nguyên lý hoạt động - Sơ đồ khối chức năng 3.2 Cấu trúc thanh ghi của 8088 3.3 Phương pháp quản lý bộ nhớ 3.4 Mô tả tập lệnh Assembly
- 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
- 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ý
- 3.1 Kiến trúc và Hoạt động của 8088
- Đơnvị giao tiếpBus -BIU • Phát các tín hiệu địa chỉ đến bộ nhớ và các cổng I/O thông qua A-Bus • Đọc mã lệnh từ bộ nhớ thông qua D-Bus • Đọc dữ liệu từ bộ nhớ thông qua D-Bus •Ghi dữ liệu vào bộ nhớ thông qua D-Bus • Đọc dữ liệu từ các cổng I thông qua D-Bus •Ghi dữ liệu ra các cổng O thông qua D-Bus
- Đơ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
- Tổ chức của microprocessor CPU Control registers ALU Control General BIU Address purpose Control Data registers Status Registers
- 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
- Cơ chế Pipelining Pipelining Fetch Fetch Fetch Fetch Store Fetch Fetch Load Fetch Bus 1 2 3 4 1 5 6 2 7 Decode Decode Decode Decode Idle Decode Decode Idle Decode Instruction 1 2 3 4 5 6 7 Unit Exec. Exec. Exec. Exec. IdleIdle Exec. Exec. Idle Exec. Execution 1 2 3 4 5 6 7 Unit Memory request Memory request
- 3.2 Cấu trúc thanh ghi của 8088 8088 có 14 thanh ghi 16-bit
- Cấu trúc thanh ghi củahọ x86 General Purpose Special Registers AH AL Accumulator Index Registers AX Instr Pointer IP EAX EIP Stack Pointer SP BH BL Base Flags FLAG ESP BX EFLAG Base Pointer BP EBX EBP CH CL Count Dest Index DI CX Segment Registers EDI ECX CS Code Segment Source Index SI DH DL Data DS ESI DX Data Segment EDX ES Extra Segment SS Stack Segment FS GS
- 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 }
- Các thanh ghi đa năng 700 7 Accumulator AH AL AX Base BH BL BX Counter CH CL CX Data DH DL DX - Có thể truy cập như các thanh ghi 8-bit -Lưu trữ tạm thời dữ liệu để truy cập nhanh hơn và tránh khỏi phải truy cập bộ nhớ - Có công dụng đặc biệt đối với một số câu lệnh
- 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
- Các thanh ghi offset Instruction Pointer IP Stack Pointer SP Base Pointer BP Source Index SI Destination Index DI - Lưu trữ địa chỉ offset của một ô nhớ cần truy cập -Kết hợp với các thanh ghi segment nhất định
- 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
- Flags register AC (Alignment check) (VM) Virtual mode (RF) Resume (NT) Nested task (IOPL) Input/output privilege level (O) Overflow (D) Direction (I) Interrupt (T) Trace (S) Sign (Z) Zero (A) Auxiliary Carry (P) Parity (C) Carry 8086, 8088, 80186 8086, 8088, 80186 80386, 80486DX 80286 80486SX
- 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
- Mối liên hệ giữa ĐCVL và ĐCLG A=Bus 19 0 Địa chỉ vật lý 15 0 15 0 Thanh ghi offset. Thanh ghi Segment 0000
- 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
- Nhóm lệnh chuyển số liệu Data Transfer Instructions -Chuyển số liệu (sao chép số liệu) từ vị trí này sang vị trí khác -Nguồn số liệu không thay đổi - Đich sẽ có giá trị như giá trị của Nguồn -Các lệnh chuyển số liệu không ảnh hưởng đến các cờ trạng thái trên thanh ghi cờ -Một số lệnh tiêu biểu: MOV, XCHG
- 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ể
- Mộtsố lưuý đối vớiMOV - Đích và Nguồn phải có cùng kích cỡ - Đích và Nguồn không thể đồng thời thuộc bộ nhớ -Nếu Đích là một thanh ghi segment của VXL thì Nguồn không thể là một giá trị cụ thể (nói cách khác, không thể nạp giá trị trựctiếp cho một thanh ghi segment bằng lệnh MOV)
- 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)
- Mộtsố lưuý đối vớiXCHG - T/h1 và T/h2 phải có cùng kích cỡ - T/h1 và T/h2 không thể đồng thời thuộc bộ nhớ - T/h1 và T/h2 không thể là các thanh ghi segment
- 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ỉ
- Các mode địa chỉ - Mode địa chỉ thanh ghi: MOV AX,BX - Mode địa chỉ tức thì: MOV AL,55h - Các mode địa chỉ bộ nhớ: Các cách thức xác định địa chỉ vât lý của toán hạng nằm trong bộ nhớ: Mode địa chỉ trực tiếp Các mode địa chỉ gián tiếp
- Mode địa chỉ trựctiếp (Direct Addressing Mode)
- Mode địa chỉ gián tiếp thanh ghi (Register Indirect Addressing Mode)
- Mode địa chỉ cơ sở-chỉ số (Based-Indexed Addressing Mode)
- Nhớ các mode địachỉ bộ nhớ như thế nào? •Tất cả bắt đầu trong bảng sau đây: BX SI BP DI DISP •Lấyra0 hoặc1 phầntử từ mỗicột • (Không lấy2 phầntử từ mộtcột) •Phải lấy ít nhất 1 phần tử từ bảng
- 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
- Các ví dụ Addressing Instruction Comment Memory Contents Mode Move to the memory location MOV [X], AX Direct A3 lsb msb pointed to by DS:X the value in AX OP DATA16 Move to AX the 16-bit value pointed MOV AX, [DI] Indexed 8B 05 to by DS:DI OP MODE Move to address DS:DI the 16-bit MOV [DI], AX Indexed 89 05 value in AX OP MODE Move to AX the 16-bit value pointed Register MOV AX, [BX] 8B 07 to by DS:BX Indirect OP MODE Move to the memory address DS:BX Register MOV [BX], AX 89 07 the 16-bit value stored in AX Indirect OP MODE Move to memory address SS:BP Register MOV [BP], AX 89 46 the 16-bit value in AX Indirect OP MODE Move to AX the value in memory at Register MOV AX, TAB[BX] 8B 87 lsb msb DS:BX + TAB Relative OP MODE DISP16 Move value in AX to memory Register MOV TAB[BX], AX 89 87 lsb msb address DS:BX + TAB Relative OP MODE DISP16 Move to AX the value in memory at Base Plus MOV AX, [BX + DI] 8B 01 DS:BX + DI Index OP MODE
- 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
- Mã máy Mộtlệnh có thể dài từ1 đến6 byte • Byte 1 gồm: – Opcode (6 bit) xác định phép toán cần thực hiện – Bit D xác định toán hạng ở REG của Byte 2 là nguồn hay đích: 1: Đích 0: Nguồn – Bit W xác định kích cỡ của toán hạng là 8 bit hay 16 bit 0: 8 bit 1: 16 bit • Byte 2 gồm:Mode field (MOD), Register field (REG) Register/memory field (R/M field)
- 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)
- AnatomyAnatomy ofof anan instructioninstruction Opcode Mode Displacement Data/Immediate • MOD field specifies the addressing mode D W • 00 – no displacement • 01 – 8-bit displacement, sign extended OPCODE • 10 – 16-bit displacement • 11 – R/M is a register, register addressing mode • If MOD is 00,01, or 10, the R/M field selects one of the memory addressing modes MODREG R/M
- 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
- Example • Consider the instruction 8BECh Code W=0 W=1 W=1 • 1000 1011 1110 1100 binary 000 AL AX EAX 001 CL CX ECX • Opcode 100010 -> MOV 010 DL DX EDX 011 BL BX EBX • D=1 data goes from R/M to REG 100 AH SP ESP 101 CH BP EBP 110 DH SI ESI • W=1 data is word-sized 111 BH DI EDI • MOD=11, register addressing • REG=101 destination, R/M=100 source • MOV BP, SP
- 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]
- Code W=0 W=1 W=1 Example 000 AL AX EAX 001 CL CX ECX 010 DL DX EDX 011 BL BX EBX 100 AH SP ESP • Instruction 8A15h 101 CH BP EBP 110 DH SI ESI • 1000 1010 0001 0101 111 BH DI EDI • Opcode 100010 -> MOV R/M Code Function • D=1, data flows from R/M to REG 000 DS:BX+SI • W=0, 8-bit argument 001 DS:BX+DI • MOD=00 (no displacement) 010 SS:BP+SI 011 SS:BP+DI •REG=010 (DL) 100 DS:SI • REG=101 ([DI] addressing mode) 101 DS:DI • MOV DL, [DI] 110 SS:BP 111 DS:BX
- 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
- Direct Addressing • Example: 8816 00 10 • 1000 1000 0001 0110 0000 0000 0001 0000 Code W=0 W=1 W=1 • Opcode 100010 -> MOV 000 AL AX EAX 001 CL CX ECX 010 DL DX EDX • W=0 (byte-sized data) 011 BL BX EBX 100 AH SP ESP • D=0 data flows from REG 101 CH BP EBP 110 DH SI ESI • MOD 00, REG=010 (DL), R/M=110 111 BH DI EDI • Low-order byte of displacement 00 • High-order byte of displacement 10 • MOV [1000h], DL
- 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
- Mã máy REG xác định thanh ghi cho toán hạng thứ nhất
- Mã máy MOD và R/M cùng nhau xác định toán hạng thứ hai
- Mã máy MOD và R/M cùng nhau xác định toán hạng thứ hai
- 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
- Nhóm lệnh Số học •Bên cạnh tác dụng, cần chú ý đến ảnh hưởng của lệnh đối với các cờ trạng thái •Cáclệnh số học th/thường: ADD, SUB, •Các lệnh số học khác: CMP. NEG, INC, DEC, • Ảnh hưởng đến các cờ trạng thái –CF – OF Phụ thuộc vào quá trình thực hiện phép toán –AF –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
- 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ể
- Ảnh hưởng của ADD –ZF = 1nếu Kết quả bằng 0 – SF = 1 nếuMSBcủa Kết quả = 1 – PF = 1 nếu byte thấp của kết quả có Parity chẳn •CF được lập nếu tràn không dấu (có nhớ từ MSB) •OF được lập nếu tràn có dấu: -Cónhớ từ MSB, Không có nhớ vào MSB -Cónhớ vào MSB, Không có nhớ từ MSB •AF được lập nếu có nhớ từ nibble thấp vào nibble cao (từ bit 3 vào bit 4)
- 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
- Các cờ điều khiển • DF - Direction flag (Cờ hướng) – DF = 1: huớng xuống –DF = 0: hướng lên • IF – Interrupt flag (Cờ ngắt) – IF = 1: cho phép ngắt ngoài –IF = 0: cấm ngắt ngoài (đối với ngắtcheđược) • TF - Trace flag – TF = 1: vi xử lý thực hiện từng lệnh một
- 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
- (Signed) Overflow • Can only occur when adding numbers of the same sign (subtracting with different signs) • Detected when carry into MSB is not equal to carry out of MSB – Easily detected because this implies the result has a different sign than the sign of the operands • Programs can ignore the Flags!
- 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)
- Examples of No Signed Overflow 10010110 10010110 + 01100011 + 11110011 11111001 10001001 Carry in = 0, Carry out = 0 Carry in = 1, Carry out = 1 Neg+Pos=Neg Neg+Neg=Neg No Signed overflow occurred No Signed overflow occurred OF = 0 (clear) OF = 0 (clear)
- 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!
- DEBUG's Register Display -R 000 SP=0010 BP=0000 SI=0000 DI=0000 00F IP=004F NV UP DI PL NZ NA PO NC • The state of the Flags are shown in line 2 • OV/NV: (no)oVerflow DN/UP: direction • EI/DI: En(Dis)abled Interrupts • NG/PL: sign ZR/NZ: (not)Zero • AC/NA: (no)Auxiliary PE/PO: Even/Odd • CY/NC: (no)Carry (set/clear)
- 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ể
- Ảnh hưởng của SUB –ZF = 1nếu Kết quả bằng 0 – SF = 1 nếuMSBcủa Kết quả = 1 – PF = 1 nếubytethấp của kết quả có Parity chẳn •CF được lập nếu tràn không dấu (có mượn vào MSB) •OF được lập nếu tràn có dấu: -Có mượn từ MSB, Không có mượn từ MSB -Có mượn từ MSB, Không có mượn vào MSB •AF được lập nếu có mượn từ nibble cao vào nibble thấp(từ bit 4 vào bit 3)
- 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ể
- Arithmetic Instructions – INC, DEC, NEG •INC T/h • Trong đó: T/h có thể là các thanh ghi hoặc vị trí nhớ • Tác dụng: (T/h) Å (T/h)+1 • DEC T/h • Trong đó: T/h có thể là các thanh ghi hoặc vị trí nhớ • Tác dụng: (T/h) Å (T/h)-1 •Lưu ý: Các lệnh INC và DEC không ảnh hưởng đến cờ CF •Lệnh NEG T/h: Đảo dấu của T/h (Lấybù2) • Lệnh NEG sẽ lập cờ OF nếu giá trị của T/h là giá trị âm nhất trong dải giá trị của các số có dấu tương ứng
- 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
- Một số ví dụ AL 1100 1010 AL 0011 0101 NOT AL BL 0110 1101 AL 0011 0101 OR AL, BL AL 0111 1101 AL 0011 0101 BL 0110 1101 AL 0011 0101 AND AL, BL BL 0000 1111 AL 0010 0101 OR AL, BL AL 0011 1111 AL 0011 0101 BL 0000 1111 AL 0011 0101 AND AL, BL BL 0110 1101 AL 0000 0101 XOR AL, BL AL 0101 1000
- 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 đó
- Nhóm lệnh logic •Các lệnh logic khác: Lệnh TEST, Các lệnh dịch (Shift) và Các lệnh quay (Rotate) •Lệnh TEST chỉ khác lệnh AND là không giữ lại kết quả của phép toán •Các lệnh dịch và Các lệnh quay đều có hai khuôn dạng: Khuôn dạng 1: Mnemonic Toán hạng,1 Khuôn dạng 2: Mnưmonic Toán hạng,CL • Tác dụng của một câu lệnh theo khuôn dang 2 giống như tác dụng liên tiếp của N câu lệnh tương ứng theo khuôn dạng 1, với N là giá trị của thanh ghi CL
- Các lệnh Dịch trái: SHL, SAL CF Register 0
- ShiftShift rightright SHRSHR Register CF 0
- Shift right SAR Register CF
- Rotate through Carry L/R (Quay trái/phải thông qua carry) RCL RCR
- RotateRotate left/rightleft/right ((QuayQuay trtrááii//phphảảii khôngkhông quaqua carrycarry)) ROL ROR
- Nhóm lệnh rẽ nhánh • Làm thay đổi trật tự thực hiện lệnh bình thường của vi xử lý • Lệnh nhảy không điều kiện: JMP • Các lệnh nhảy có điều kiện: Jxxx • Lệnh lặp: LOOP và các biến thể của nó • Các lệnh có liên quan đến Chương trình con: -CALL (gọi chương trình con) - RET (trở về chương trình gọi) • Các lệnh có liên quan đến Chương trình con phục vụ ngắt -INT (gọi chương trình con phụcvụ ngắt-Gọi ngắt) - IRET (quay về chương trình gọi ngắt)
- 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
- Cơ chế thực hiện lệnh nhảy •Cáclệnh nhảyngắnvàgầnchỉ làm thay đổi giá trị của thanh ghi IP –Lệnh nhảyngắncộng khoảng cách nhảy 8-bit có dấu vào giá trị hiệnthời củaIP –Lệnh nhảygầncộng khoảng cách nhảy 16-bit có dấu vào giá trị hiệnthời củaIP •Lệnh nhảyxalàmthayđổi cả CS và IP – Gán cho CS và IP các giá trị mới
- 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
- Các lệnh nhảy có điều kiện • Jxxx nhãn –Cógần 40 menmonic khác nhau •Các lệnh nhảy điều kiện đơn: phụ thuộc vào giá trị của 1 cờ. • JNZ/JNE - Nhảy nếu cờ ZF = 0, nghĩa là kết quả của phép toán trước đó khác không •JC -Nhảy nếu CF = 1, nghĩa là câu lệnh trước đó lập cờ carry • JZ/JE •JNC
- 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
- ứng dụng của các lệnh nhảy có điều kiện •Kết hợp vớiJMP để xây dựng các cấu trúc lập trình cơ bản: -Cấu trúc điều kiện -Cấu trúc lặp •Các lệnh nhảy thường theo sau các lệnh làm thay đổi giá trị của các cờ trạng thái: –CMP – TEST
- 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
- Cấu trúc lặp mov ax,n nhan1: cmp ax,0 jz nhan2 lệnhi sub ax,2 jmp nhan1 nhan2: lệnhk
- 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:
- Cấu trúc điều kiện-OR char n,k; unsigned int w; ;if(n k || w<=10) mov ah,n cmp ah,k whatever(); jne then_ cmp w,10 ja end_if then_: call whatever end_if:
- 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
- LOOPZ/E và LOOPNZ/E •Các biến thể của •Lưu ý: LOOP giảm LOOP CX nhưng không ảnh •Giátrị của cờ ZF có huởng đến các cờ thể làm kết thúc sớm • LOOPZ == LOOPE vòng lặp • Loop while ZF/equal • LOOPNZ==LOOPNE && CX!=0 •Cáclệnh trong vòng • Loop while (NZ/ not lặpcóthể tác động đến equal) && CX!=0 cờ ZF (CMP ?)
- 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ý
- Stack ? •Cấutrúcdữ liệuLIFO ở RWM - PUSH : ghi dữ liệu vào stack, -POP: đọc dữ liệu từ stack • (SS:SP) trỏ đến đỉnh của stack • (SS:BP) truy cập stack ngẫu nhiên (không theo LIFO)
- 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
- Initial Stack Configuration .stack 12 ;Reserve space for the stack • Loader determines actual segment address for the start of the stack – This is an empty stack Stack Size: 000C SS:0340SS:0340 SP:000CSP:000C
- 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
- PUSH • PUSH nguồn – Push nguồn vào stack • PUSHF – Push thanh ghi cờ vào stack •Lệnh PUSH trước hết sẽ giảm SP đi2 rồi lưu giá trị của nguồn vào vị trị nhớ được trỏ bởi (SS:SP)
- 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
- POP •POP đích – Pop dữ liệu từ đỉnh stack vào đich •POPF – Pop dữ liệu từ đỉnh stack vào thanh ghi cờ •Lệnh POP trướchết copy dữ liệu đượctrỏ bởi (SS:SP) đến đích rồi tăng SP lên 2
- 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
- Tràn stack! Stack Size: 000C SS:0340SS:0340 SP:FFFESP:FFFE • Stack Overflow • Stack Underflow Stack Size: 000C SS:0340SS:0340 SP:000DSP:000D
- 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
- Lệnh CALL và RET •Gọi một thủ tục (NEAR) CALL Tên_Thủ_tục – push IP vào stack – copy địa chỉ của Tên_Thủ_tục vào IP •Trở về từ một thủ tục(NEAR) RET –pop giátrịởđỉnh stack vào IP
- 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
- Gọi ngắt •Gọi ngắt là một lời gọi thủ tục đặc biêt –FAR – Thanh ghi cờ phải được bảo toàn •INT Số ngắt – Thanh ghi cờđược push, TF và IF bị xoá – CS và rồI IP được push – Địachỉ củamộtchương trình con phụcvụ ngắt (Vector ngắt) tương ứng vớiSố ngắt được copy vào CS và IP
- 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
- Xuất ký tự ra màn hình PC •Ngắt21h –Ngắt này hỗ trợ rất nhiều dịch vụ trên PC –Nhận dạng dịch vụ bằng số dịch vụ (số hàm). Số dịch vụ cần được nạp voà thanh ghi AH –Tuỳ theo từng dịch vụ, có thể cần thêm một số đối số khác được nạp vào các thanh ghi xác định • AH = 2, DL = Mã ASCII của ký tự cần xuất – Ký tự được hiển thị tại vị trí hiện thờI của con trỏ
- 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
- Nhập 1 ký tự từ bàn phím PC •Dịch vụ 01h của ngắt 21h • Khi NSD gõ một ký tự từ bàn phím: –Ký tự sẽ hiện trên màn hình –AL sẽ chứa mã ASCII của ký tự đó •AL=0 nếu ký tự được nhập là ký tự điều khiển
- 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
- Các đặc điểm •Nguồn: (DS:SI), Đích: (ES:DI) – DS, ES chứa Địa chỉ Segment của string –SI, DI chứa Địa chỉ Offset của string •Cờ hướng DF (0 = Up, 1 = Down) –DF = 0 -Tăng địa chỉ (trái qua phải) –DF = 1 -Giảm địa chỉ (phảIqua trái)
- 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ặc2 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
- Ví dụ:Sao chép mảng ; Sao chép 10 byte từ mảng a sang mảng b, giả sử (DS) = (ES) mov cx, 10 mov di, offset b mov si, offset a cld ;xoá cờ DF rep movsb
- 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
- Ví dụ pattern db "!@#*" db 96 dup (?) mov cx,96 mov si, offset pattern mov di, offset pattern+4 cld rep movsb DI SI ! @ # * a
- 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
- Ví dụ: arr dw 200 dup (?) mov ax,50A0h mov di,offset arr mov cx,200 DI cld AX 50 A0 rep stosw A0 50 A0 50 arr
- 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
- Ví dụ: mov di, offset b mov si, offset a mov cx,30 cld lp: lodsb and al,0DFh stosb loop lp
- 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
- Ví dụ arr db 'abcdefghijklmnopqrstuvwxyz' mov di, offset arr mov cx,26 cld mov al,target repne scasb jne nomatch
- 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
- Ví dụ mov si, offset str1 mov di, offset str2 cld mov cx, 12 repe cmpsb jl str1smaller jg str2smaller ;the strings are equal - so far ;if sizes different, shorter string is less
- 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
- Lệnh IN -Nếu Địa chỉ của cổng Nhỏ hơn hoặc bằng FFh: IN Acc, Địa chỉ cổng - Trong đó: Acc có thể là AL hoặc AX -Nhập dữ liệu từ cổng vào Acc -Nếu Địa chỉ của cổng Lớn hơn FFh: MOV DX, Địa chỉ cổng IN Acc, DX - Trong đó: Acc có thể là AL hoặcAX -Nhập dữ liệu từ cổng vào Acc
- 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
- Tóm tắt chương - Tính tương thích về Cấu trúc thanh ghi của các vi xử lý họ x86 - Tính tương thích về Tập lệnh của các vi xử lý họ x86
- Bài gi ng K thu t Vi x lý Ngành i n t -Vi n thông i h c Bách khoa à N ng c a H Vi t Vi t, Khoa TVT Tài li u tham kh o [1] K thu t vi x lý, V n Th Minh, NXB Giáo d c, 1997 [2] K thu t vi 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
- Chương 5 Thiết kế các cổng I/O 5.1 I/O ư c phân vùng nh và I/O tách bi t - I/O ư c phân vùng nh (Memory Mapped I/O) - I/O tách bi t (Isolated I/O) 5.2 Các chip MSI dùng làm c ng I/O -C ng ra -C ng vào 5.3 Chip 8255 - chân, S kh i ch c n ng - Các mode ho t ng - Gi i mã a ch -L p trình cho 8255
- 5.1 C n phân bi t 2 ki u thi t k • I/O ư c phân vùng nh (Memory mapped I/O): - 1 c ng ư c xem nh ư m t ô nh - 1 c ng có a ch 20-bit - ư c truy c p khi IO/M = 0 - không c n m ch gi i mã a ch riêng • I/O tách bi t (isolated I/O) - 1 c ng ư c xem úng là 1 c ng - 1 c ng có a ch 16-bit, 12-bit, 8-bit - ư c truy c p khi IO/M = 1 - c n m ch gi i mã a ch I/O riêng
- 5.2 Các chip MSI ư ng dùng làm c ng I/O • 74LS373 • 74LS374 • 74LS244 • 74LS245 • Khi s ư ng c ng ít và c nh • Cách m c m ch s quy t nh cho chip là c ng ra hay c ng vào và a ch c a nó
- S d ng 74LS245 làm c ng ra A19 A18 : A0 D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR 5V IOR IOW : mov al, 55 mov dx, F000 out dx, al A A A A A A A A A A A A A A A AIOW 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 : 5 4 3 2 1 0
- S d ng 74LS373 làm c ng ra A19 A18 : A0 D7 D0 Q0 D6 D1 Q1 D5 D2 Q2 D4 D3 Q3 D3 D4 Q4 D2 D5 74LS373 Q5 8088 D1 D6 Q6 Minimum D0 D7 Q7 Mode LE OE IOR IOW : mov al, 55 mov dx, F000 A A A A A A A A A A A A A A A AIOW out dx, al 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 :
- S d ng 74LS245 làm c ng vào A19 5V A18 : A0 D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR IOR IOW : mov dx, F000 in al, dx : A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0
- C ng ra
- C ng vào
- 5.3 Chip LSI ư ng dùng làm c ng I/O • PPI 8255 • Khi s ư ng c ng I/O nhi u và không c nh • Cách m c m ch s quy t nh a ch cho các c ng còn vai trò c a c ng s ư c quy t nh b i ph n m m
- 8255 PPI
- S kh i ch c n ng c a 8255
- Các mode làm vi c • Mode 0 - PA, PB, PCH (CU) và PCL (CL) - Có th là Input ho c Output - Vi c Nh p ho c Xu t d li u là c l p • Mode 1 - PA, PB - Có th là Input ho c Output - Vi c Nh p ho c Xu t d li u là ph thu c vào m t s bít c a PC (các tín hi u handshaking ) • Mode 2 - PA - PA v a là Input v a là Output - Vi c Nh p/Xu t d li u v i PA là ph thu c vào m t s bít c a PC (các tín hi u handshaking )
- Nhóm làm vi c • Nhóm A: PA và PCH • Nhóm B: PB và PCL • nh c u hình làm vi c cho 1 chip 8255: G i 1 T u khi n nh c u hình n thanh ghi i u khi n c a chip ó •L p/xoá m t bit c a PC: G i 1 T u khi n L p/Xoá bit n thanh ghi i u khi n c a chip ó
- T i u khi n nh c u hình làm vi c cho m t chip 8255
- T i u khi n l p/xoá bit cho m t chip 8255
- The 8255 Programmable Peripheral Interface • Intel has developed several peripheral controller chips designed to support the 80x86 processor family. The intent is to provide a complete I/O interface in one chip. • 8255 PPI provides three 8 bit input ports in one 40 pin package making it more economical than 74LS373 and 74LS244 • The chip interfaces directly to the data bus of the processor, allowing its functions to be programmed; that is in one application a port may appear as an output, but in another, by reprogramming it as an input. This is in contrast with the 74LS373 and 74LS244 which are hard wired and fixed. 8255 Pins • PA0 - PA7: input, output, or bidirectional port • PB0 - PB7: input or output • PC0 - PC7: This 8 bit port can be all input or output. It can also be split into two parts, CU (PC4 - PC7) and CL (PC0 - PC3). Each can be used for input and output. • RD or WR – IOR and IOW of the system are connected to these two pins • RESET • A0, A1, and CS – CS selects the entire chip whereas A0 and A1 select the specific port (A, B, or C) or Control Register.
- Gi i mã a ch cho 8255
- Mode 0 - Simple input/output • Simple I/O mode: any of the ports A, B, CL, and CU can be programmed as input or output. • Example: Configure port A as input, B as output, and all the bits of port C as output assuming a base address of 50h • Control word should be 1001 0000b = 90h MOV AL, 90h OUT 53h,AL IN AL, 50h OUT 51h, AL OUT 52h, AL Mode 1: I/O with Handshaking Capability • Handshaking refers to the process of communicating back and forth between two intelligent devices • Example. Process of communicating with a printer – a byte of data is presented to the data bus of the printer – the printer is informed of the presence of a byte of data to be printed by activating its strobe signal – whenever the printer receives the data it informs the sender by activating an output signal called ACK – the ACK signal initiates the process of providing another byte of data to the printer • 8255 in mode 1 is equipped with resources to handle handshaking signals
- Mode 1 Strobed Output Signals • OBFa (output buffer full for port A) – indicates that the CPU has written a byte of data into port A – must be connected to the STROBE of the receiving equipment • ACKa (acknowledge for port A) – through ACK, 8255 knows that data at port A has been picked up by the receiving device – 8255 then makes OBFa high to indicate that the data is old now. OBFa will not go low until the CPU writes a new byte of data to port A. • INTRa (interrupt request for port A) – it is the rising edge of ACK that activates INTRa by making it high. INTRa is used to get the attention of the microprocessor. – it is important that INTRa is high only if INTEa, OBFa, ACKa are all high – it is reset to zero when the CPU writes a byte to port A
- Mode 1 Input Ports with Handshaking Signals • STB – When an external peripheral device provides a byte of data to an input port, it informs the 8255 through the STB pin. STB is of limited duration. • IBF (Input Buffer Full) – In response to STB, the 8255 latches into its internal register the data present at PA0-PA7 or PB0-PB7. – Through IBF it indicates that it has latched the data but it has not been read by the CPU yet. – To get the attention of the CPU, it IBF activates INTR • INTR – Falling edge of RD makes INTR low – The RD signal from the CPU is of limited duration and when it goes high the 8255 in turn makes IBF inactive by setting it low. – IBF in this way lets the peripheral know that the byte of data was latched by the 8255 and read into the CPU as well.
- L p trình cho 8255
- L i gi i
- L p trình cho 8255 BA
- L i gi i
- T o chu i xung b ng ph n m m