Title: B
1Bà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?ngc?a H? Vi?t Vi?t,
Khoa CNTT-ÐTVT
- Tài li?u tham kh?o
- 1 K? thu?t vi x? lý, Van 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
2Chuong 1
- 1.1 Các h? th?ng s?
- - H? th?p phân
- - H? nh? phân
- - H? th?p l?c phân
- 1.2 Các h? th?ng mã hoá
- - ASCII
- - BCD
- 1.3 Các linh ki?n di?n t? s? co b?n
- - Các c?ng logic AND, OR, XOR,NOT
- - Các b? gi?i mã
31.1 Các h? th?ng s?
- H? d?m th?p phân (Decimal)
- Còn g?i là h? d?m co s? mu?i(Vì có quá ít ngu?i
có chín ngón tay ho?c mu?i m?t ngón chân?) - Dùng mu?i ký hi?u 1,2,3,4,5,6,7,8,9,0
- Ví d?1.1 Ba nghìn Chín tram B?y muoi Tám
3978 3x103 9x102 7x101 8x100 - 3000 900 70 8
41.1 Các h? th?ng s?
- H? d?m nh? phân (Binary)
- Còn g?i là H? d?m co s? hai
- S? d?ng hai ký hi?u (bit) 0 và 1(Các h? th?ng
di?n t? s? ch? s? d?ng hai m?c di?n áp?) - Kích c?, LSB, MSB c?a s? nh? phân
- S? nh? phân không d?u (Unsigned)
- S? nh? phân có d?u (S? bù hai)
5S? nh? phân
- M?i ký hi?u 0 ho?c 1 du?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í d? 1.1 1010101010101010
- là m?t s? nh? phân 16-bit
MSB
LSB
6S? nh? phân không d?u
- Ch? bi?u di?n du?c các giá tr? không âm (gt 0)
- V?i n-bit có th? bi?u di?n các giá tr? t? 0 d?n
2n 1 - Ví d? 1.3 Giá tr? V c?a s? nh? phân không d?u
1101 du?c tính V(1101) 1x23 1x22 0x21
1x20 - 8 4 0 1 13
7S? nh? phân không d?u
- T?ng quát N?u s? nh? phân N n-bit
- N b( n-1) b( n-2) . b1 b0thì giá tr? V
c?a nó là V b(n -1) x 2(n-1)b (n-2) x2
(n-2) b1 x 21 b0 x 20 - Các s? nh? phân không d?u 4-bit bi?u di?n du?c
các giá tr? t? ? d?n ?
816 giá tr? t? 0 d?n 15
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
9S? nh? phân không d?u
- D?i giá tri c?a các s? không d?u 8-bit là 0,255
(unsigned char trong C) - D?i giá tri c?a các s? không d?u 16-bit là
0,65535 (unsigned int trong C)
10Chuy?n d?i th?p phân sang nh? phân
- Ví d? 1.4
- Chuy?n 25 sang nh? phân không d?u. Dùng
phuong pháp chia 2 liên ti?p - Chia 2 Thuong s? Du 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
11S? nh? phân có d?u
- Bi?u di?n du?c c? các giá tr? âm
- Còn g?i là S? bù hai
- V?i n-bit có th? bi?u di?n các giá tr? t?
2(n-1) d?n 2(n-1) 1 - Ví d? 1.3 Giá tr? V c?a s? nh? phân có d?u 1101
du?c tính V(1101) 1x23 1x22 0x21
1x20 - 8 4 0 1 3
12S? nh? phân có d?u
- T?ng quát N?u s? nh? phân N n-bit
- N b( n-1) b( n-2) . b1 b0thì giá tr? V
c?a nó là V b(n -1) x 2(n-1)b (n-2) x2
(n-2) b1 x 21 b0 x 20 - Các s? nh? phân có d?u 4-bit bi?u di?n du?c các
giá tr? t? ? d?n ?
1316 giá tr? t? - 8 d?n 7
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
14S? nh? phân có d?u
- D?i giá tri c?a các s? có d?u 8-bit là
-128,127 (char trong C) - D?i giá tri c?a các s? có d?u 16-bit là
-32768,32767 (int trong C)
15Tìm d?i s? (L?y bù 2)
- T?ng c?a m?t s? v?i d?i s? c?a nó 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)
16Chuy?n s? th?p phân sang nh? phân có d?u
- Voí s? duongGi?ng nhu chuy?n th?p phân sang nh?
phân không d?u r?i thêm bit 0 vào sát bên trái - Ví d? Chuy?n 25 sang nh? phân có d?uK?t qu?
011011 - V?i s? âm Chuy?n d?i s? sang nh? phân có d?u r?i
l?y bù 2
17Chuy?n s? th?p phân sang nh? phân có d?u
- Ví d? 1.6 Chuy?n 26 sang nh? phân
- 1. chuy?n d?i s? 26 11010
- 2. Ðua 0 vào sát trái 011010
- 3. Bù 1 100101
- 4. C?ng 1 1
- -------------
- -26 100110
18S? th?p l?c phân
- Quen g?i là s? Hexa (Hexadecimal)
- Còn g?i là h? d?m co s? mu?i sáu
- S? d?ng 16 ký hi?u d? bi?u di?n0,1,2,3,4,5,6,7,8
,9,A,B,C,D,E,F - M?i ký hi?u tuong ?ng v?i 4-bit
- M?c dí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
19M?i ký hi?u tuong ?ng v?i 4-bit
Hexa Binary Hexa Binary
0 0000 8 1000
1 0001 9 1001
2 0010 A 1010
3 0011 B 1011
4 0100 C 1100
5 0101 D 1101
6 0110 E 1110
7 0111 F 1111
20Chuy?n d?i Hexa nh? phâ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 tuong ?ng
v?i nó - 2 F 8
- 0010 1111 1000 A
B B A - 1010 1011 1011 1010
- K?t qu? 2F8h 001011111000b ABBAh
1010101110111010b
21Chuy?n d?i Hexa nh? phân
- Ví d? 1.8
- Chuy?n s? nh? phân 1100101011111110 sang hexa
- - Tru?c h?t theo hu?ng t? LSB v? MSB chia s?
nh? phân dó thành các nhóm 4-bit - - Sau dó thay th? m?i nhóm 4-bit b?ng ký hi?u
hexa tuong ?ng v?i nó -
- 1100 1010 1111
1110 C A F
E -
- K?t qu? 1100101011111110b CAFEh
221.2 Các h? th?ng mã hoá
- ASCII American Standard Code for Information
Interchange. - Dùng d? bi?u di?n các ký t? (characters) G?m ký
t? hi?n th? du?c và ký t? di?u khi?n - M?i ký t? du?c bi?u di?n b?ng 8-bit g?i là mã
ASCII c?a ký t? dó - Các ch? cái in và thu?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? d?c bi?t _at_ / vân vân
- Các ký t? di?u khi?n carriage return (CR) , line
feed (LF), beep, vân vân
23Mã ASCII
- V?i b?ng mã du?c s?p x?p theo tr?t t? tang 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 inA..Z n?m liên ti?p nhau, ch? A có
mã ASCII là 41h - Các ch? cái thu?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? thu?ng tuong ?ng ch?
khác nhau ? bit 5A 01000001 B 01000010 Z
01011010a 01100001 b 01100010 z 01111010 - 32 ký t? di?u khi?n du?c x?p d?u b?ng mã (00h d?n
1Fh)
24B?ng mã ASCII
25B?ng mã ASCII
26Mã BCD
- BCD (Binary Coded Decimal)
- Quen g?i là s? BCD
- Dùng d? mã hoá các s? th?p phân b?ng các ký hi?u
nh? phân - M?i ch? s? th?p phân du?c bi?u di?n b?ng m?t t?
h?p 4-bit - Các t? h?p 4-bit không s? d?ng g?i là các t? h?p
c?m - Nhi?u linh ki?n di?n t? s? d?ng mã này (B? gi?i
mã BCD-LED b?y do?n 7447)
27B?ng mã BCD
Th?p phân BCD Th?p phân BCD
0 0000 8 1000
1 0001 9 1001
2 0010 1010
3 0011 1011
4 0100 1100
5 0101 1101
6 0110 1110
7 0111 1111
28Mã BCD
- Ð?ng nh?m mã hoá BCD v?i vi?c chuy?n d?i th?p
phân sang nh? phânVí d? 1.9 Cho s? th?p phân
15Mã BCD c?a nó là 00010101S? nh? phân
không d?u - 8-bit tuong ?ng là 00001111
29Bit, Nibble, Byte, Word
- 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
- K 210 1024Kb (kilôbit) 1024 bit 128
byteKB (kilôbyte) 1024 byteKbps (Kilobit per
second) Kilôbit trên giây - M 220 1024 K 1048576Mb (Mêgabit) 1024
Kb 1048576 bitMB (Mêgabyte) 1024 KB
1048576 byte - G 230 1024 M 1048576 KGb (Gigabit) 1024
Mb 1048576 KbGB (Gigabyte) 1024 MB
1048576 KB - T ?
301.3 Các linh ki?n di?n t? s? co b?n
- Phân chia linh li?n s? theo m?t d? tích h?p SSI,
MSI, LSI, VLSISSI (Small Scale Integration) Vi
m?ch tích h?p c? nh?MSI (Medium Scale
Integration) Vi m?ch tích h?p c? trungLSI
(Large Scale Integration) Vi m?ch tích h?p c?
l?nVLSI (Very Large Scale Integration)Vi m?ch
tích h?p c? c?c l?n - SSI Các c?ng logic and, or, xor, not
- MSI Các b? gi?i mã, Các ch?t, d?m
- LSI,VLSI Các b? vi x? lý, vi di?u khi?n, DSPs
31C?ng logic AND
A B A AND B
1 1 1
1 0 0
0 1 0
0 0 0
C?ng AND có th? có nhi?u hon 2 d?u vào Trên m?t
chip có th? có nhi?u c?ng AND
32C?ng logic AND IC 7408
33C?ng logic AND IC 7411
34C?ng logic OR
A B A OR B
1 1 1
1 0 1
0 1 1
0 0 0
C?ng OR có th? có nhi?u hon 2 d?u vào Trên m?t
chip có th? có nhi?u c?ng OR
35C?ng logic OR IC 7432
36C?ng logic XOR
A B A XOR B
1 1 0
1 0 1
0 1 1
0 0 0
C?ng XOR có th? có nhi?u hon 2 d?u vào Trên m?t
chip có th? có nhi?u c?ng XOR
37C?ng logic NOT
A NOT A
1 0
1 0
0 1
0 1
38Ð?m 3 tr?ng thái
c z
0 HiZ
1 x
c z
1 HiZ
0 x
39Chip gi?i mã 74138
40Chip gi?i mã 74138
41Flip Flop ki?u D
42Flip Flop ki?u D
43Flip Flop ki?u D
44Flip Flop ki?u D
45Ch?t 8-bit 74373
46Ch?t 8-bit 74573
47IC 74244
48IC 74244
49Ð?m 2 chi?u 74245
50Ð?m 2 chi?u 74245
51What is a microprocessor?
- Intels first microprocessor, the 4004, was
introduced in 1971. It contained 2300
transistors. Todays Pentium 4 processor, by
contrast, contains 55 million transistors. - One of the most common tasks microprocessors
perform is to serve as the brains inside
personal computers, but they deliver
intelligence to countless other devices as
well. - For example, they may give your telephone
speed-dial and re-dial options, automatically
turn down your homes thermostat at night and
make your car safer and more energy efficient.
521971
- In 1971, Intels first microprocessor was the
4004. This breakthrough invention powered the
Busicom calculator and paved the way for
embedding intelligence in inanimate objects as
well as the personal computer.
531978
- In 1978, a pivotal sale to IBM's new personal
computer division made the Intel 8088 the brains
of IBM's new hit product--the IBM PC. - The 8088's success launched Intel into the ranks
of the Fortune 500 companies, and Fortune
magazine named the company one of the "Business
Triumphs of the Seventies."
541982
- Then, in 1982, the 286, also known as the 80286,
became the first Intel processor that could run
all the software written for its predecessor. - This software compatibility remains a cornerstone
of Intel's family of microprocessors. Within 6
years of its release, there were an estimated 15
million 286-based PCs around the world.
551989
- In 1989, the move to a 486 processor allowed the
shift from a command-level computer to
point-and-click computing. - The Intel 486 processor was the first to offer a
built-in math coprocessor, which speeds up
computing because it offloads complex math
functions from the central processor.
561993
- In 1993, the jump to the Pentium processor
allowed computers to more easily incorporate
"real world" data such as speech, sound,
handwriting and photographic images.
571997
- In 1997, the 7.5 million-transistor Pentium II
processor incorporated Intel MMX technology,
which is designed specifically to process video,
audio and graphics data efficiently. - With this processor, PC users could
- capture, edit and share digital photos with
friends and family via the Internet, - edit and add text, music or between-scene
transitions to home movies, and, - with a video phone, send video over standard
phone lines and the Internet.
581998
- In 1998, the Pentium II XeonTM processor was
designed to meet the performance requirements of
mid-range and higher servers and workstations. - The Pentium II Xeon processors featured technical
innovations specifically designed for
workstations and servers that utilized demanding
business applications such as Internet services,
corporate data warehousing, digital content
creation, and electronic and mechanical design
automations.
591999
- In 1999, the Intel Celeron processor was designed
for the value PC market segment. It provided
consumers great performance at an exceptional
value, and it delivered excellent performance for
uses such as gaming and educational software.
601999
- Also in 1999, the Pentium III processor was
released and featured 70 new instructions that
dramatically enhanced the performance of advanced
imaging, 3-D, streaming audio, and video and
speech recognition applications. - It was designed to significantly enhance Internet
experiences, allowing users to do such things as
browse through realistic online museums and
stores and download high-quality video.
612000
- In 2000, users of the newly released Pentium 4
processor could create professional-quality
movies, deliver TV-like video via the Internet,
communicate with real-time video and voice,
render 3D graphics in real time, quickly encode
music for MP3 players, and simultaneously run
several multimedia applications while still
connected to the Internet. - As a comparison, Intel's first microprocessor,
the 4004, ran at 108 kilohertz, compared to the
Pentium 4 processor's initial speed of 1.5
gigahertz. If automobile speed had increased
similarly over the same period, you could now
drive from San Francisco to New York in about 13
seconds.
62History of Intel Microprocessor
63- Bách Khoa Online hutonline.net
- Tìm ki?m download ebook bookilook.com
64Bà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?ngc?a H? Vi?t Vi?t,
Khoa CNTT-ÐTVT
- Tài li?u tham kh?o
- 1 K? thu?t vi x? lý, Van 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
65Chuong 2 Vi x? lý và H? th?ng vi x? lý
- 2.1 B? vi x? 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.2 Các h? vi x? lý
- - H? x86 c?a Intel- Lu?t Moore
- - H? 68x c?a Motorola
- 2.3 H? th?ng vi x? 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ý?
662.1 B? vi x? lý
- M?t b? vi x? lý là m?t m?ch tích h?p ch?a hàng
ngàn, th?m chí hàng tri?u transistor (LSI, VLSI)
du?c k?t n?i v?i nhau - Các transistor ?y cùng nhau làm vi?c d? luu tr?
và x? lý d? li?u cho phép b? vi x? lý có th? th?c
hi?n r?t nhi?u ch?c nang h?u ích - Ch?c nang c? th? c?a m?t b? vi x? lý du?c xác
d?nh b?ng ph?n m?m (có th? l?p trình du?c)
67B? vi x? lý
- B? vi x? lý d?u tiên c?a Intel,4004, du?c gi?i
thi?u vào nam 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ý thu?ng du?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.
68Các thành ph?n c?a b? vi x? lý
69ALU và Control Unit
- ALU
- Th?c hi?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 d?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
di?u khi?n và d?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.
70Các thanh ghi (Registers)
- Thanh ghi là noi mà b? vi x? lý có th? luu tr?
du?c m?t s? 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 d? luu tr? d? li?u
t?m th?i trong quá trình th?c hi?n chuong trình - Các thanh ghi có th? du?c truy c?p b?ng các câu
l?nh ngôn ng? máy thu?ng du?c g?i là các thanh
ghi ngu?i s? d?ng có th? nhìn th?y du?c (có th?
truy c?p du?c) - Các thanh ghi di?u khi?n và các thanh ghi tr?ng
thái du?c CU dùng d? di?u khi?n vi?c th?c hi?n
chuong trình. Ða s? các thanh ghi này ngu?i s?
d?ng không th? nhìn th?y du?c
712.2 Các h? vi x? lý
- Hi?n nay, có r?t nhi?u nhà s?n xu?t ra các chip
vi x? lýIntel, AMD, Motorola, Cyrix - Thông thu?ng, m?t h? vi x? lý là các chip vi x?
lý du?c s?n xu?t b?i m?t nhà s?n xu?t nào dó. - Trong ph?m vi m?t h? vi x? lý, theo th?i gian và
theo công ngh? ch? t?o có các d?i (th? h?) vi x?
lý khác nhau phân bi?t theo Ð? dài T? c?a chúng
(bit) và t?c d? (Hz). - Ð? dài T? (Word Length) c?a m?t chip vi x? lý là
kích c? t?i da c?a các toán h?ng nh? phân mà nó
có th? th?c hi?n các phép toán trên dó.
72T?c d? c?a h? vi x? lý x86 c?a Intel
73H? vi x? lý x86 c?a Intel
- Model Nam s?n xu?t S? lu?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
74H? vi x? lý x86 c?a Intel 70s
75H? vi x? lý x86 c?a Intel 80s
76H? vi x? lý x86 c?a Intel 90s
77(No Transcript)
782.3 H? th?ng vi x? lý
79Lu?t Moore
Dr. Gordon E. Moore, Chairman Emeritus of Intel
Corporation, d? doán r?ng C? m?t nam ru?i thì s?
lu?ng transistor du?c tích h?p trên chip vi x? lý
tang g?p dôi
802.3 H? th?ng vi x? lý
So d? kh?i ch?c nang c?a m?t h? th?ng vi x? lý
81H? th?ng vi x? lý
- G?m 3 kh?i ch?c nang Vi x? lý, B? nh?, Các c?ng
I/O - B? nh? du?c th?c hi?n b?ng các chip nh? bán d?n
ROM ho?c RWM, là noi luu tr? chuong trình và d?
li?u. Ð?i v?i vi x? lý, b? nh? là m?t t?p h?p các
ô nh? phân bi?t theo d?a ch? c?a chúng. - Các c?ng I/O du?c th?c hi?n b?ng các chip MSI
ho?c LSI, là ph?n m?ch giao ti?p gi?a vi x? lý
v?i các thi?t b? I/O. B? vi x? lý cung phân bi?t
các c?ng I/O theo d?a ch? c?a chúng.
82H? th?ng vi x? lý
- 3 kh?i ch?c nang Vi x? lý, B? nh?, Các c?ng I/O
c?a m?t h? th?ng vi x? lý trao d?i tín hi?u v?i
nhau thông qua Bus h? th?ng. - Bus h? th?ng là m?t t?p h?p các du?ng truy?n d?n
dùng chung, bao g?m Bus d?a ch? (A-Bus), Bus d?
li?u (D-Bus) và Bus di?u khi?n (C-Bus) - Các tín hi?u d?a ch? di chuy?n trên A-Bus theo
hu?ng t? vi x? lý d?n B? nh? và các c?ng I/O. S?
lu?ng du?ng truy?n d?n c?a A-Bus (g?i là Ð? r?ng
c?a A-Bus) tính b?ng bit, ph?n ánh kh? nang qu?n
lý b? nh? c?a chip vi x? lý.
83H? th?ng vi x? lý
- Các tín hi?u d? li?u di chuy?n trên D-Bus theo c?
2 hu?ng t? vi x? lý d?n B? nh? và các c?ng I/O và
ngu?c l?i (m?i lúc m?t hu?ng). S? lu?ng du?ng
truy?n d?n c?a D-Bus (g?i là Ð? r?ng c?a D-Bus)
tính b?ng bit, ph?n ánh m?t ph?n t?c d? trao d?i
d? li?u c?a chip vi x? lý v?I các kh?i ch?c nang
khác. - Ða s? các tín hi?u trên C-Bus là các tín hi?u
di?u khi?n riêng l?, có tín hi?u xu?t phát t? vi
x? lý, có tín hi?u di vào vi x? lý. Vi x? lý s?
d?ng các tín hi?u này d? di?u khi?n ho?t d?ng và
nh?n bi?t tr?ng thái c?a các kh?i ch?c nang khác.
84Thi?t k? ph?n c?ng c?a h? th?ng vi x? lý
- Thi?t k? b? nh? cho h? th?ng vi x? lý Ghép n?i
các chip nh? bán d?n s?n có v?i bus h? th?ng sao
cho khi b? vi x? lý truy c?p b? nh? thì không x?y
ra xung d?t gi?a các chip nh? v?i nhau và không
xung d?t v?i các chip dùng làm c?ng I/O - Tuong t?, Thi?t k? các c?ng I/O cho h? th?ng vi
x? lý Ghép n?i các chip MSI ho?c LSI thu?ng dùng
làm c?ng I/O v?i bus h? th?ng sao cho khi b? vi
x? lý truy c?p các thi?t b? I/O thì không x?y ra
xung d?t gi?a các chip dó v?i nhau và không xung
d?t v?i các chip dùng làm b? nh?
85Thi?t k? ph?n m?m c?a h? th?ng vi x? lý
- Vi?t chuong trình di?u khi?n ho?t d?ng c?a h?
th?ng ph?n c?ng theo ch?c nang mong mu?n (thu?ng
dùng ngôn ng? Assembly c?a chip vi x? lý dùng
trong h? th?ng) - D?ch chuong trình dã vi?t sang ngôn ng? máy s?
d?ng các chuong trình d?ch thích h?p - N?p chuong trình ngôn ng? máy vào b? nh? c?a h?
th?ng vi x? lý - Ki?m tra ho?t d?ng c?a h? th?ng và th?c hi?n các
hi?u ch?nh n?u c?n thi?t - Có th? nh? s? tr? giúp c?a các chuong trình mô
ph?ng trên máy tính
86- Bách Khoa Online hutonline.net
- Tìm ki?m download ebook bookilook.com
87Bay gi?ng K? thu?t Vi x? lý Ngành Ði?n t?-Vi?n
thôngÐ?i h?c Bách khoa Ðà N?ngc?a H? Vi?t Vi?t,
Khoa CNTT-ÐTVT
- Tài li?u tham kh?o
- 1 K? thu?t vi x? lý, Van 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
88Chuong 3 Vi x? lý 8088-Intel
- 3.1 Ki?n trúc và ho?t d?ng c?a 8088- Nguyên lý
ho?t d?ng- So d? kh?i ch?c nang - 3.2 C?u trúc thanh ghi c?a 8088
- 3.3 Phuong pháp qu?n lý b? nh?
- 3.4 Mô t? t?p l?nh Assembly
89L?y - Gi?i mã - Th?c hi?n l?nh
Nguyên lý ho?t d?ng c?a m?t b? vi x? lý
Tìm và copy các byte l?nh t? b? nh?
Gi?i mã l?nh
T?o ra các tín hi?u di?u khi?n d? th?c hi?n l?nh
90Chu 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? cung b?ng m?t s? nguyên l?n
chu k? máy - Chu k? máy b?ng ngh?ch d?o c?a t?n s? ho?t d?ng
(t?c d? d?ng h?) c?a b? vi x? lý
913.1 Ki?n trúc và Ho?t d?ng c?a 8088
92Ðon v? giao ti?p Bus - BIU
- Phát các tín hi?u d?a ch? d?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
93Ðon v? th?c hi?n - EU
- Bao g?m CU và ALU
- CU Gi?i mã l?nh d? t?o ra các tín hi?u di?u
khi?n nh?m th?c hi?n l?nh dã du?c gi?i mã - ALU th?c hi?n các thao tác khác nhau d?i v?i các
toán h?ng c?a l?nh
94T? ch?c c?a microprocessor
95X? lý l?nh c?a các vi x? lý tru?c 8086/8088
- M?t th? t?c don gi?n g?m 3 bu?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?u có)
- Luu tr? k?t qu?
Microprocessor
...
Fetch 1
Decode 1
Execute 1
Fetch 2
Decode 2
Execute 2
Bus
Busy
Idle
Busy
...
Busy
Idle
Busy
96Co ch? Pipelining
973.2 C?u trúc thanh ghi c?a 8088
8088 có 14 thanh ghi 16-bit
98C?u trúc thanh ghi c?a h? x86
General Purpose
Special Registers
AH
AL
Index Registers
Accumulator
AX
Instr Pointer
IP
EAX
EIP
Stack Pointer
SP
BH
BL
Flags
Base
FLAG
ESP
BX
EFLAG
Base Pointer
BP
EBX
EBP
CH
CL
Count
Segment Registers
Dest Index
DI
CX
EDI
ECX
Code Segment
CS
Source Index
SI
DH
DL
Data
Data Segment
DS
ESI
DX
EDX
Extra Segment
ES
Stack Segment
SS
FS
GS
99C?u trúc thanh ghi 8086/8088
0
7
0
7
AL BL CL DL
AH BH CH DH
Accumulator
AX BX CX DX
Base
Counter
Data
0
15
Instruction Pointer
Stack Pointer
Base Pointer
Source Index
Destination Index
100Các thanh ghi da nang
0
7
0
7
AL BL CL DL
AX BX CX DX
AH BH CH DH
Accumulator
Base
Counter
Data
- Có th? truy c?p nhu các thanh ghi 8-bit
- Luu tr? t?m th?i d? li?u d? truy c?p nhanh hon
- và tránh kh?i ph?i truy c?p b? nh?
- - Có công d?ng d?c bi?t d?i v?i m?t s? câu l?nh
101Các thanh ghi segment
- Luu tr? d?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 d?nh
102Các thanh ghi offset
Instruction Pointer
Stack Pointer
Base Pointer
Source Index
Destination Index
- Luu tr? d?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 d?nh
103Thanh ghi c?
0
15
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 d?u du?c s? d?ng -
M?i bit du?c s? d?ng du?c g?i là m?t c? - Các c?
d?u có tên và có th? du?c L?p/Xoá riêng l? - Bao
g?m các c? tr?ng thái và các c? di?u khi?n
104Flags 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
80386, 80486DX
80286
80486SX
1053.3 Phuong pháp qu?n lý b? nh?
- B? nh? du?c xem là m?t t?p h?p các ô nh? - M?i
ô nh? du?c nh?n d?ng b?ng m?t Ð?a ch? v?t lý duy
nh?t 20-bit - Trong ho?t d?ng truy c?p m?t ô nh?,
Ð?a ch? v?t lý c?a nó du?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
106M?i liên h? gi?a ÐCVL và ÐCLG
ABus
0
19
Ð?a ch? v?t lý
0
0
15
15
0000
Thanh ghi offset.
Thanh ghi Segment
1073.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
108Nhó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 d?i
- Ðich s? có giá tr? nhu giá tr? c?a Ngu?n
- Các l?nh chuy?n s? li?u không ?nh hu?ng d?n các
c? tr?ng thái trên thanh ghi c? - M?t s? l?nh tiêu bi?u MOV, XCHG
109Data Transfer Instructions - MOVKhuô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à
- M?t thanh ghi 8 ho?c 16 bit c?a VXL
- M?t v? trí nh? (1 ho?c 2 ô nh? liên ti?p nhau)
- 3. M?t giá tr? c? th?
110M?t s? luu ý d?i v?i MOV
- Ðích và Ngu?n ph?i có cùng kích c?
- Ðích và Ngu?n không th? d?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?c ti?p cho m?t
thanh ghi segment b?ng l?nh MOV)
111Data Transfer Instructions - XCHGKhuô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à
- M?t thanh ghi 8 ho?c 16 bit c?a VXL
- M?t v? trí nh? (1 ho?c 2 ô nh? liên ti?p nhau)
112M?t s? luu ý d?i v?i XCHG
- T/h1 và T/h2 ph?i có cùng kích c?
- T/h1 và T/h2 không th? d?ng th?i thu?c b? nh?
- T/h1 và T/h2 không th? là các thanh ghi segment
113Các mode d?a ch?
- Khi th?c hi?n l?nh, VXL s? th?c hi?n nh?ng thao
tác nh?t d?nh trên s? li?u, các s? li?u này du?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 d?nh toán h?ng trong các câu l?nh du?c
g?i là các mode (d?nh) d?a ch?
114Các mode d?a ch?
- Mode d?a ch? thanh ghi MOV AX,BX
- Mode d?a ch? t?c thì MOV AL,55h
- Các mode d?a ch? b? nh? Các cách th?c xác d?nh
d?a ch? vât lý c?a toán h?ng n?m trong b?
nh? Mode d?a ch? tr?c ti?p Các mode d?a ch?
gián ti?p
115Mode d?a ch? tr?c ti?p (Direct Addressing Mode)
116Mode d?a ch? gián ti?p thanh ghi(Register
Indirect Addressing Mode)
117Mode d?a ch? co s?-ch? s?(Based-Indexed
Addressing Mode)
118Nh? các mode d?a ch? b? nh? nhu th? nào?
- T?t c? b?t d?u trong b?ng sau dây
- L?y ra 0 ho?c 1 ph?n t? t? m?i c?t
- (Không l?y 2 ph?n t? t? m?t c?t)
- Ph?i l?y ít nh?t 1 ph?n t? t? b?ng
119Các ví d?
120Các ví d?
121Các ví d?
122Mã máy
M?t l?nh có th? dài t?1 d?n 6 byte Byte 1
g?m Opcode (6 bit) xác d?nh phép toán c?n
th?c hi?n Bit D xác d?nh toán h?ng ? REG c?a
Byte 2 là ngu?n hay dích 1 Ðích 0 Ngu?n
Bit W xác d?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?mMode
field (MOD), Register field (REG) Register/memory
field (R/M field)
123Anatomy of an instruction
- Opcode contains the type of instruction we
execute plus two special bits, D and W - The mode byte is used only in instructions that
use register addressing modes and encodes the
source and destination for instructions with two
operands - D stands for direction and defines the data flow
of the instruction - D0, data flows from REG to R/M
- D1, data flows from R/M to REG
- W stands for the size of data
- W0, byte-sized data
- W1, word (in real mode) or double-word sized (in
protected mode)
124Anatomy of an instruction
- MOD field specifies the addressing mode
- 00 no displacement
- 01 8-bit displacement, sign extended
- 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
OPCODE
MOD
R/M
REG
125 Registers in the REG and R/M fields
Code
W0 (Byte)
W1 (Word)
W1 (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
126Example
- Consider the instruction 8BECh
- 1000 1011 1110 1100 binary
- Opcode 100010 -gt MOV
- D1 data goes from R/M to REG
- W1 data is word-sized
- MOD11, register addressing
- REG101 destination, R/M100 source
- MOV BP, SP
Code
W0
W1
W1
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
127Displacement 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
DSBXSI
01
8-bit sign-extended displacement
001
DSBXDI
10
16-bit displacement
11
R/M is a register (register addressing mode)
010
SSBPSI
Examples If MOD00 and R/M101 mode is DI If
MOD01 and R/M101 mode is DI33h If MODE10
and R/M101 modes is DI2233h
011
SSBPDI
100
DSSI
101
DSDI
110
SSBP
111
DSBX
128Example
- Instruction 8A15h
- 1000 1010 0001 0101
- Opcode 100010 -gt MOV
- D1, data flows from R/M to REG
- W0, 8-bit argument
- MOD00 (no displacement)
- REG010 (DL)
- REG101 (DI addressing mode)
- MOV DL, DI
129Direct 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
130Direct Addressing
- Example 8816 00 10
- 1000 1000 0001 0110 0000 0000 0001 0000
- Opcode 100010 -gt MOV
- W0 (byte-sized data)
- D0 data flows from REG
- MOD 00, REG010 (DL), R/M110
- Low-order byte of displacement 00
- High-order byte of displacement 10
- MOV 1000h, DL
131Segment MOV instructions
- Different opcode 100011
- Segments are selected by setting the REG field
Example MOV BX, CS Opcode 10001100 MOD11
(register addressing) REG001 (CS) R/M011
(BX) 8CCB
132Mã máy
REG xác d?nh thanh ghi cho toán h?ng th? nh?t
133Mã máy
MOD và R/M cùng nhau xác d?nh toán h?ng th? hai
134Mã máy
MOD và R/M cùng nhau xác d?nh toán h?ng th? hai
135Ví d?
Mã hoá l?nh MOV BL,AL Opcode d?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?a BL) K?t qu?
10001000 11000011 88 C3
136Nhóm l?nh S? h?c
- Bên c?nh tác d?ng, c?n chú ý d?n ?nh hu?ng c?a
l?nh d?i v?i các c? tr?ng thái - Các l?nh s? h?c th/thu?ng ADD, SUB,
- Các l?nh s? h?c khác CMP. NEG, INC, DEC,
- ?nh hu?ng d?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
137Arithmetic Instructions - ADDKhuô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à
- M?t thanh ghi 8 ho?c 16 bit c?a VXL
- M?t v? trí nh? (1 ho?c 2 ô nh? liên ti?p nhau)
- 3. M?t giá tr? c? th?
138?nh hu?ng c?a ADD
- 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
- CF du?c l?p n?u tràn không d?u (có nh? t? MSB)
- OF du?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 du?c l?p n?u có nh? t? nibble th?p vào nibble
cao (t? bit 3 vào bit 4)
139Các c? trên thanh ghi c?
- Các bit nh?t d?nh trên thanh ghi c? di?u khi?n
ho?t d?ng ho?c ph?n ánh tr?ng thái c?a vi x? lý - Các c? di?u khi?n (TF, IF, DF)
- Quy?t d?nh cách dáp ?ng c?a vi x? lý trong các
tình hu?ng nh?t d?nh - Các c? tr?ng thái (CF, PF, AF, ZF, SF, OF)
- B? ?nh hu?ng b?i các phép toán nh?t d?nh
- Ph?c v? cho các l?nh có di?u ki?n
140Các c? di?u khi?n
- DF - Direction flag (C? hu?ng)
- DF 1 hu?ng xu?ng
- DF 0 hu?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 (d?i v?i ng?t che du?c)
- TF - Trace flag
- TF 1 vi x? lý th?c hi?n t?ng l?nh m?t
141Các c? tr?ng thái
- Carry
- carry or borrow at MSB in add or subtract
- last bit shifted out
- Parity
- low byte of result has even parity
- Auxiliary
- carry or borrow at bit 3
- Zero
- result is 0
- Sign
- result is negative
- Overflow
- signed overflow occurred during add or subtract
142(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!
143Signed Overflow Example
- 10010110
- 10100011
- 00111001
- Carry in 0, Carry out 1
- NegNegPos
- Signed overflow occurred
- OF 1 (set)
- 00110110
- 01100011
- 10011001
- Carry in 1, Carry out 0
- PosPosNeg
- Signed overflow occurred
- OF 1 (set)
144Examples of No Signed Overflow
- 10010110
- 01100011
- 11111001
- Carry in 0, Carry out 0
- NegPosNeg
- No Signed overflow occurred
- OF 0 (clear)
- 10010110
- 11110011
- 10001001
- Carry in 1, Carry out 1
- NegNegNeg
- No Signed overflow occurred
- OF 0 (clear)
145Unsigned Overflow
- The carry flag is used to indicate if an unsigned
operation overflowed - The processor only adds or subtracts - it does
not care if the data is signed or unsigned!
- 10010110
- 11110011
- 10001001
- Carry out 1
- Unsigned overflow occurred
- CF 1 (set)
146DEBUG's Register Display
- -R
- 000 SP0010 BP0000 SI0000 DI0000
- 00F IP004F 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)
147Arithmetic Instructions - SUBKhuô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à
- M?t thanh ghi 8 ho?c 16 bit c?a VXL
- M?t v? trí nh? (1 ho?c 2 ô nh? liên ti?p nhau)
- 3. M?t giá tr? c? th?
148?nh hu?ng c?a SUB
- 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
- CF du?c l?p n?u tràn không d?u (có mu?n vào MSB)
- OF du?c l?p n?u tràn có d?u- Có mu?n t? MSB,
Không có mu?n t? MSB- Có mu?n t? MSB, Không có
mu?n vào MSB - AF du?c l?p n?u có mu?n t? nibble cao vào nibble
th?p (t? bit 4 vào bit 3)
149Arithmetic Instructions - CMPKhuô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à
- M?t thanh ghi 8 ho?c 16 bit c?a VXL
- M?t v? trí nh? (1 ho?c 2 ô nh? liên ti?p nhau)
- 3. M?t giá tr? c? th?
150Arithmetic Instructions INC, DEC, NEG
- INC T/h
- Trong dó 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 dó T/h có th? là các thanh ghi ho?c v? trí
nh? - Tác d?ng (T/h) ? (T/h)-1
- Luu ý Các l?nh INC và DEC không ?nh hu?ng d?n c?
CF - L?nh NEG T/h Ð?o d?u c?a T/h (L?y bù 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
tuong ?ng
151Nhóm l?nh Logic
- C?n chú ý d?n ?nh hu?ng c?a l?nh d?i v?i các c?
tr?ng thái - Các l?nh logic th/thu?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 d?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 d?nh
152M?t s? ví d?
1100 1010
AL
AL
0011 0101
NOT AL
BL
0110 1101
0011 0101
AL
OR AL, BL
0111 1101
AL
AL
0011 0101
BL
0110 1101
AL
0011 0101
AND AL, BL
BL
0000 1111
0010 0101
AL
OR AL, BL
0011 1111
AL
AL
0011 0101
AL
0011 0101
BL
0000 1111
BL
0110 1101
AND AL, BL
XOR AL, BL
0000 0101
AL
0101 1000
AL
153M?t s? ?ng d?ng
- Bài toán Xoá bit Xoá m?t bit nào dó c?a m?t toán
h?ng mà không làm ?nh hu?ng d?n các bit còn l?i
c?a toán h?ng dó - Bài toán Ki?m tra bit Xác d?nh m?t bit nào dó
c?a m?t toán h?ng là b?ng 0 hay 1 (thông qua giá
tr? c?a m?t c? tr?ng thái) - Bài toán L?p bit L?p m?t bit nào dó c?a m?t toán
h?ng mà không làm ?nh hu?ng d?n các bit còn l?i
c?a toán h?ng dó
154Nhó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 d?u có hai khuôn
d?ngKhuôn d?ng 1 Mnemonic Toán h?ng,1Khuôn
d?ng 2 Mnemonic Toán h?ng,CL - Tác d?ng c?a m?t câu l?nh theo khuôn dang 2 gi?ng
nhu tác d?ng liên ti?p c?a N câu l?nh tuong ?ng
theo khuôn d?ng 1, v?i N là giá tr? c?a thanh ghi
CL
155Các l?nh D?ch trái SHL, SAL
156Shift right SHR
157Shift right SAR
158Rotate through Carry L/R(Quay trái/ph?i thông
qua carry)
159Rotate left/right (Quay trái/ph?i không qua
carry)
ROL
160Nhóm l?nh r? nhánh
- Làm thay d?i tr?t t? th?c hi?n l?nh bình thu?ng
c?a vi x? lý - L?nh nh?y không di?u ki?n JMP
- Các l?nh nh?y có di?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 d?n Chuong trình con-
CALL (g?i chuong trình con)- RET (tr? v? chuong
trình g?i) - Các l?nh có liên quan d?n Chuong trình con ph?c
v? ng?t- INT (g?i chuong trình con ph?c v? ng?t
- G?i ng?t)- IRET (quay v? chuong trình g?i ng?t)
161L?nh nh?y không di?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 ngu?I l?p trình t? d?t ra theo qui
t?c d?t tên c?a Assembler và có th? d?t vào
tru?c m?t câu l?nh b?t k? trong chuong trình cùng
v?i d?u nhãn Câu l?nh c?n th?c hi?n - Nhãn s? du?c d?ch thành d?a ch?
- Kho?ng cách nh?y Kho?ng cách d?i s? (có d?u) t?
l?nh nh?y d?n l?nh c?n th?c hi?n
162Co ch? th?c hi?n l?nh nh?y
- Các l?nh nh?y ng?n và g?n ch? làm thay d?i giá
tr? c?a thanh ghi IP - L?nh nh?y ng?n c?ng kho?ng cách nh?y 8-bit có d?u
vào giá tr? hi?n th?i c?a IP - L?nh nh?y g?n c?ng kho?ng cách nh?y 16-bit có d?u
vào giá tr? hi?n th?i c?a IP - L?nh nh?y xa làm thay d?i c? CS và IP
- Gán cho CS và IP các giá tr? m?i
163Mã máy c?a l?nh nh?y
- 11060100 EB2A JMP 012C
- 012C-0102002A
- 11060102 EBFC JMP 0100
- 0100-0104FFFC
- 11060104 E97F00 JMP 0186
- 0186-01060080 (too far for short!)
- 0186-0107007F
- 11060107 E9F5FE JMP FFFF
- FFFF-010AFEF5
164Các l?nh nh?y có di?u ki?n
- Jxxx nhãn
- Có g?n 40 menmonic khác nhau
- Các l?nh nh?y di?u ki?n don ph? thu?c vào giá
tr? c?a 1 c?. - JNZ/JNE - Nh?y n?u c? ZF 0, nghia là k?t qu?
c?a phép toán tru?c dó khác không - JC - Nh?y n?u CF 1, nghia là câu l?nh tru?c dó
l?p c? carry - JZ/JE
- JNC
165Các l?nh nh?y có di?u ki?n
- T?t c? các l?nh nh?y có di?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 di?u ki?n d? có th?
vu?t qua gi?i h?n này. - Các l?nh nh?y di?u ki?n kép ph? thu?c vào giá
tr? c?a nhi?u c? - JB/JNAE
- JNL/JGE
-
166?ng d?ng c?a các l?nh nh?y có di?u ki?n
- K?t h?p v?i JMP d? xây d?ng các c?u trúc l?p
trình co b?n- C?u trúc di?u ki?n- C?u trúc
l?p - Các l?nh nh?y thu?ng theo sau các l?nh làm thay
d?i giá tr? c?a các c? tr?ng thái - CMP
- TEST
167C?u trúc di?u ki?n
- mov ax,n
- cmp ax,7
- jz nhan1
- l?nh 1
- jmp nhan2
- nhan1l?nh 2
- nhan2l?nh 3
168C?u trúc l?p
- mov ax,n
- nhan1 cmp ax,0
- jz nhan2
- l?nhi
- sub ax,2
- jmp nhan1
- nhan2 l?nhk
169C?u trúc di?u ki?n - AND
- char n int w,x
- if (ngt'A' wx)
- whatever()
- if(ngt'A'wx)
- mov ah,n
- cmp ah,'A'
- jl nogo
- mov ax,w
- cmp ax,x
- jne no_go
- then-part
- call whatever
- nogo
170C?u trúc di?u ki?n - OR
- char n,k unsigned int w
- if (nltgtk wlt10)
- whatever()
- if(nltgtkwlt10)
- mov ah,n
- cmp ah,k
- jne then_
- cmp w,10
- ja end_if
- then_
- call whatever
- end_if
171L?nh LOOP
- LOOP nhan
- Gi?m CX di 1
- N?u (CX) ltgt 0 thì JMP nhan. N?u không thì ti?p
t?c th?c hi?n l?nh theo tr?t t? bình thu?ng
- mov cx,9
- nhan l?nh 1
- l?nh 2
- l?nh 3
- loop nhan
172LOOPZ/E và LOOPNZ/E
- Các bi?n th? c?a LOOP
- Giá tr? c?a c? ZF có th? làm k?t thúc s?m vòng
l?p - Loop while ZF/equal CX!0
- Loop while (NZ/ not equal) CX!0
- Luu ý LOOP gi?m CX nhung không ?nh hu?ng d?n các
c? - LOOPZ LOOPE
- LOOPNZLOOPNE
- Các l?nh trong vòng l?p có th? tác d?ng d?n c? ZF
(CMP ?)
173Chuong trình con
- Chuong trình con trong ngôn ng? Assembly du?c g?i
là Th? t?c (Procedure) - M?t th? t?c có th? du?c th?c hi?n nhi?u l?n
- Có liên quan d?n stack- luu gi? Ð?a ch? quay
v?- luu gi? giá tr? c?a các thanh ghi c?a vi x?
lý
174Stack ?
- C?u trúc d? li?u LIFO ? RWM
- - PUSH ghi d? li?u vào stack, - POP d?c d?
li?u t? stack - (SSSP) tr? d?n d?nh c?a stack
- (SSBP) truy c?p stack ng?u nhiên (không theo
LIFO)
175Stack 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_StackStack_Size
which is one byte past the end of the stack array - This is the condition for an empty stack
176Initial 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
177How Does The Stack Work?
- The stack grows backwards through memory towards
the start of the stack segment - Push decrements stack pointerPop increments
stack pointer
178PUSH
- PUSH ngu?n
- Push ngu?n vào stack
- PUSHF
- Push thanh ghi c? vào stack
- L?nh PUSH tru?c h?t s? gi?m SP di 2 r?i luu giá
tr? c?a ngu?n vào v? tr? nh? du?c tr? b?i (SSSP)
179Ví d? PUSH
AX 0123
3C
09
A4
40
2C
FF
A2
23
2A
09
46
01
06
4C
SP0006
SS0340
180POP
- POP dích
- Pop d? li?u t? d?nh stack vào dích
- POPF
- Pop d? li?u t? d?nh stack vào thanh ghi c?
- L?nh POP tru?c h?t copy d? li?u du?c tr? b?i
(SSSP) d?n dích r?i tang SP lên 2
181Ví d? POP
3C
09
A4
40
2C
FF
A2
23
2A
09
46
01
06
4C
SP0006
SS0340
3C
09
A4
40
2C
FF
A2
23
2A
09
46
01
06
4C
SP0008
SS0340
ES 0123
182Tràn stack!
Stack Size 000C
SPFFFE
SS0340
- Stack Overflow
- Stack Underflow
Stack Size 000C
SP000D
SS0340
183Th? t?c
- Tên_Th?_t?c PROC ki?u
- thân c?a th? t?c
- RET quay v? chuong trình g?i
- Tên_Th?_t?c ENDP
- ki?u là NEAR ho?c FAR
- ng?m d?nh là NEAR
- M?t th? t?c có th? có nhi?u l?nh RET
184L?nh CALL và RET
- G?i m?t th? t?c (NEAR)
- CALL Tên_Th?_t?c
- push IP vào stack
- copy d?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? ? d?nh stack vào IP
185Th? t?c Far
- G?i th? t?c (FAR)
- CALL Tên_th?_t?c
- l?n lu?t push CS và IP vào stack
- copy d?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? d?nh stack l?n lu?t vào IP và CS
186G?i ng?t
- G?i ng?t là m?t l?i g?i th? t?c d?c biêt
- FAR
- Thanh ghi c? ph?i du?c b?o toàn
- INT S? ng?t
- Thanh ghi c? du?c push, TF và IF b? xoá
- CS và r?I IP du?c push
- Ð?a ch? c?a m?t chuong trình con ph?c v? ng?t
(Vector ng?t) tuong ?ng v?i S? ng?t du?c copy vào
CS và IP
187Tr? v? t? ng?t
- IRET
- Tác d?ng c?a lênh
- Giá tr? ? d?nh c?a stack du?c pop vào IP
- Giá tr? ? d?nh c?a stack du?c pop vào CS
- Giá tr? ? d?nh c?a stack du?c pop vào thanh ghi
c? - Chuong trình b? ng?t ti?p t?c th?c hi?n du?ng nhu
không có chuy?n gì x?y ra
188Xu?t ký t? ra màn hình PC
- Ng?t 21h
- 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 du?c n?p voà thanh ghi AH - Tu? theo t?ng d?ch v?, có th? c?n thêm m?t s?
d?i s? khác du?c n?p vào các thanh ghi xác d?nh - AH 2, DL Mã ASCII c?a ký t? c?n xu?t
- Ký t? du?c hi?n th? t?i v? trí hi?n th?I c?a con
tr?
189Xu?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 do?n d? 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 d?a ch? offset c?a xâu vào DX, có th?
- LEA DX, Tênxâu
- MOV DX, OFFSET Tên xâu
190Nh?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? dó
- AL0 n?u ký t? du?c nh?p là ký t? di?u khi?n
191Nhó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
- Luu tr?
- So sánh
192Các d?c di?m
- Ngu?n (DSSI), Ðích (ESDI)
- DS, ES ch?a Ð?a ch? Segment c?a string
- SI, DI ch?a Ð?a ch? Offset c?a string
- C? hu?ng DF (0 Up, 1 Down)
- DF 0 - Tang d?a ch? (trái qua ph?i)
- DF 1 - Gi?m d?a ch? (ph?I qua trái)
193Chuy?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? (DSSI) d?n (ESDI)
- Tang/Gi?m SI và DI 1 ho?c 2 giá tr?
- N?u CX ch?a m?t giá tr? khác không
- REP MOVSB ho?c REP MOVSW s? t? d?ng sao chép (CX)
l?n và CX s? v? không
194Ví 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
195Ví d? T?nh ti?n các ô nh?
- mov cx, 7
- mov di, offset a9
- mov si, offset a6
- std l?p c? DF
- rep movsb
SI
DI
a
196Ví d?
- pattern db "!_at_"
- db 96 dup (?)
- mov cx,96
- mov si, offset pattern
- mov di, offset pattern4
- cld
- rep movsb
DI
SI
!
_at_
a
197Luu tr? string
- STOSB, STOSW
- Copy AL ho?c AX vào m?t m?ng byte ho?c word
- Ðích (ESDI)
- Tang ho?c Gi?m DI
- ph? thu?c DF
- Thu?ng du?c s? d?ng có ti?n t? REP và s? l?n l?p
trong CX
198Ví d?
- arr dw 200 dup (?)
- mov ax,50A0h
- mov di,offset arr
- mov cx,200
- cld
- rep stosw
DI
50
A0
AX
A0
50
A0
50
arr
199N?p String
- LODSB, LODSW
- Byte ho?c word t?i (DSSI) du?c copy vào AL ho?c
AX - SI tang ho?c gi?m 1 ho?c 2 giá tr? ph? thu?c DF
- Thu?ng du?c dùng v?i STOSx trong m?t vòng l?p d?
x? lý t?ng ph?n t? trong m?t m?ng
200Ví d?
- mov di, offset b
- mov si, offset a
- mov cx,30
- cld
- lp
- lodsb
- and al,0DFh
- stosb
- loop lp
201Quét String
- SCASB, SCASW
- So sánh AL ho?c AX v?i byte ho?c word t?I
(ESD