Ngược lại khi OE được xác lập, nội dung của thanh ghi được nạp nên bus xuất thanh ghi xuất thông tin lên bus Hình 4.1 a chi tiết một thanh ghi 8-bit nối với một bus nhập và một bus xuấ
Trang 1Hình 4.1 (a) mô tả một thanh ghi 8 bit được nối với một bus nhập và một bus xuất Thanh ghi bao gồm 8 flip flop loại D, mỗi flip flop lưu trữ 1 bit và được nối với bus xuất qua một cổng đệm không đảo Thanh ghi có hai tín hiệu điều khiển, CK và
ối đến tất cả các flip flop Bình thường 2 tín hiệu này g thỉnh thoảng chúng được xác lập, gây nên tác động tương ứng Khi CK không xác lập, nội dung của tha
xác l
cho phép xuất OE (output enable), n
ở trạng thái tĩnh nhưn
nh ghi bởi các tín hiệu trên Bus Khi CK ập, thanh ghi được nạp từ bus nhập Khi OE không xác lập, thanh ghi không được kết nối với bus xuất Ngược lại khi OE được xác lập, nội dung của thanh ghi được nạp nên bus xuất ( thanh ghi xuất thông tin lên bus )
Hình 4.1 (a) chi tiết một thanh ghi 8-bit nối với một bus nhập và một bus xuất b) ký hiệu của một thanh ghi 16 – bit với một bus nhập và 2 bus xuất
Nếu có một thanh ghi khác, R chẳng hạn, có các ngõ vào nối với Bus xuất của thanh ghi vừa mô tả ở trên, thanh gi này có thể truyền thông tin đến R Để thực hiện điều này, OE phải được xác lập và giữ ở trạng thái này đủ lâu để đưa thông tin lên bus ổn định Kế đến đường CK của R được xác lập để nạp cho R thông tin này Thao tác mở cổng đưa thông tin của một thanh ghi lên bus để nột thanh ghi khác nạp vào thường xảy ra ở lớp vi chương trình
Hình 4.1 b) trình bày một thanh ghi 16 bit với 2 bus xuất , mỗi bus được điều khiển bơiû một tín hiệu OE khác nhau
Trang 2II MỘT VÍ DỤ VỀ VI CHƯƠNG TRÌNH:
Hình 4.2: Sơ đồ khối của 1 CPU đơn giản của một máy tính điện tử thiết kế theo phương pháp vi chương trình hoá
Để thực hiện một lệnh cộng (ADD) cần một hệ tối thiểu các phép vi toán:
MAR-M Nối MAR với BUS M
IA-D Nối IA (của IR) với BUS D
AC-D Nối Accumulator với BUS D
MTS Nối BUS M với BUS S qua ALU
DTS Nối BUS D với BUS S qua ALU
S-MAR Nối BUS S với MAR
S-MBR Nối BUS S với MBR
S-IR Nối BUS S với IR
Trang 3S-AC Nối BUS S với AC
R Đọc nội dung trong Mem ra MBR
W Viết nội dung từ MBR vào Mem
PLUS Cộng nội dung có trên BUS D và BUSM tại ALU và
đưa ra BUS S ONE Nối BUS D với BUS S qua ALU cộng 1
JMP Nhảy đến địa chỉ trong lệnh sau nếu A=0
JOPC Nhảy đến địa chỉ của mã lệnh (giải mã lệnh)
Hình 4.3: hệ tối thiểu các phép vi toán
VI LỆNH MEM Nhảy ALU BUSM BUSD BUSS Địa chỉ
|ADDR|MBR R
DECODE JOPC
|DATA|MBR R
Hình 4.4: Vi chương trình thực hiện lệnh ADD Sử dụng các phương pháp viết chương trình:
- Móc nối chương trình con
- Đánh địa chỉ chỉ số hoá
- Đánh địa chỉ thông số hoá
Ưu điểm:
mô phỏng nhiều thiết bị có chức năng khác nhau
Xây dựng kết cấu của hệ thống có thể quyết định trong giai đoạn ối của quá tr
Giảm sai lầm logic
- Có khả năng bằng 1 máy
-
cu ình thiết kế
Trang 4CHƯƠNG 5:
g này giới t
trên n trình, sự phức tạp rất lớn của cấu trúc lớp
1 cũng đủ làm hầu hết những người lập trình
kh o phe một ng ời sư (debu các v ơng trình mới trong khi một
ng dụng áy Đa tính na
chương trình
I CÁC THÍ DỤ VỀ LỚP MÁY QUI ƯỚC:
LỚP MÁY QUY ƯỚC
Chươn hiệu lớp máy qui ước (lớp 2) và thảo luận nhiều khía cạnh về
heo l
rúc củ ịch sử, ngôn ngữ máy lớp 2 được phát tr
gôn n và vẫn được xem là một ngôn ngữ máy ph
hiều m ình được đặt trong bộ nhớ chỉ đọc, người sử d
ương trình cho máy lớp 1 Hơn
người chế tạo máy) không thể viết ch
ững máy người sử dụng có thể vi lập
h
e ngại, trừ những người lập trình chuyên nào có
ghiệp Ngo ra, do k ông co ột ma ự bảo v phần c ùng ở lớp 1, nên ông thể ch ùp ư ûa sai g) i chư
người khác đa sử m ëc øy hơn nữa còn lớp người sử dụng lập vi
cố g định nghĩa một cách hính xác lớp máy qui ước là gì (có lẽ
kh nh ngh a được) chún g lơ nà cách khảo sát các
ví dụ, trước tiên là Intel Mục đích của việc n hiên c ï C
trình bày những chọn lựa khác nhau của các nhà thiết kế khác nhau
Các CPU này tưởng thiết kế một máy tính như là một chuỗi các lớp máy à cấu trúc của chúng sẽ được khảo sát
về lập trình trên chúng cũng được giới thiệu tại những điểm cần thiết Tuy nhiên, ở đây không cung cấp một mô tả hoàn toàn đầy đủ Để hiểu thông suốt về tất
xuất bản
Cuối cùng, chương này chủ yếu xử lý những l
trình của người sử dụng dùng đến (nghĩa là chương trình ứng dụng) Các khía cạnh về cấu trúc và những lệnh liên quan đến người viết hệ điều hành sẽ bị bỏ qua hoặc được gác lại cho tới khi vấn đề được bàn đến trong chương 6
1 Họ 8088 của Intel :
Bắt đầu thảo luận về lớp máy qui ước với chip 8088 của Intel là thích hợp vì đây là bộ óc của các máy IPM PC và những máy mô phỏng theo, và do vậy CPU này được sử dụng rộng rãi hầu như trên khắp thế giới
ông thể đị ĩ , g ta sẽ iới thiệu ùp máy y bằng
g ứu ho PU hiện có này là nhằm
g được thảo luận ở đây có thể được áp dụng như hực Các máy này sẽ được so sánh và đối c
được dùng để minh họa ý Những đặc tính khác nhau ve và thông tin
PU, hãy tham khảo những tài liệu được các nhà chế tạo ra chún
ệnh và cấu trúc mà các chương
Trang 5Hình 5.1:Cấu trúc bộ nhớ của 8088
Ở lớp máy qui ước, 8088 và 8086 giống hệt nhau nên mọi điều chúng ta nói về
8088 cũng áp dụng được cho 8086 Chip 8088 có thể địa chỉ hóa 220 byte, đánh số liên tục bắt đầu từ 0 như trình bày trong hình 5.1
oặc trên các từ 16 bit Từ không
PU phải cần đến giải p
20
xuất Để truy xuất một lệnh ở ngoài tầm này, ta phải thay đổi nội dung thanh ghi phân đoạn
truy xuất các phân đoạn dữ liệu và phân đoạn ngăn xếp Cuối cùng, thanh ghi phân đoạn phụ (cũng dùng để truy xuất phân đoạn dữ liệu) là một thanh ghi dự phòng khi cần
Các lệnh có thể hoạt động trên các byte 8 bit h
nhất thiết bắt đầu ở byte chẵn mặc dù với các từ bắt đầu ở byte chẵn, 8086 làm việc có hiệu quả hơn
Với bộ nhớ 220 byte, 8088 thực sự cần các địa chỉ 20 bit để địa chỉ hóa bộ nhớ Vì các thanh ghi và mọi thứ khác của máy đều dùng các từ 16 bit, nên các số 20 bit rõ ràng không thuận tiện Để giải quyết vấn đề này, các nhà thiết kế C
háp gọi là "què quặt" (kludge=một biệt ngữ của máy tính chỉ một phương pháp không lịch sự và vụng về được dùng để làm một điều gì đó) Giải pháp này đưa ra 4 thanh ghi phân đoạn (segment): mã, dữ liệu, ngăn xếp và phụ (code, data, stack và extra), mỗi thanh ghi phân đoạn chứa một địa chỉ bộ nhớ trỏ tới nền (base) của một phân đoạn 64K
Mỗi thanh ghi phân đoạn trỏ tới một nơi nào đó trong không gian địa chỉ 2 byte, như trình bày trong hình 5.2 tất cả việc tìm nạp lệnh đều có liên quan đến thanh ghi phân đoạn mã Thí dụ, nếu thanh ghi này trỏ đến địa chỉ 96000 và bộ đếm chương trình có giá trị 1024, lệnh kế tiếp sẽ được tìm nạp từ địa chỉ 97024 Với giá trị này của thanh ghi phân đoạn mã, các lệnh đặt trong tầm địa chỉ từ 96000 tới 161535 đều được truy mã
Tương tự, thanh ghi phân đoạn dữ liệu và thanh ghi phân đoạn ngăn xếp dùng để
Trang 6Sơ đồ này có nghĩa là bất cứ lúc nào, 256K bộ nhớ đều có thể truy xuất được mà không phải thay đổi một thanh ghi phân đoạn nào cả
Hình 5.2: Sử dụng các thanh ghi phân đoạn trên 8088
Một số trình biên dịch giới hạn chương trình với chiều dài 64K cho văn bản chương trình (nghĩa là các lệnh) và 64K khác cho cả dữ liệu và ngăn xếp nhằm tránh tổn p
ết, các thanh ghi phân đoạn nên có độ rộng 20 bit để trỏ tới bất kỳ địa chỉ nào trong không gian địa chỉ 220 byte Tuy nhiên, như đã nói trên, 8088 không được
lệnh tương ứng để thực hiện phép toán sẽ dài hơn và chậm hơn so với những lệnh dùng thanh ghi AX
hí (overhead) thời gian kết hợp với việc nạp và cất liên tục các thanh ghi phân đoạn hoặc dùng thanh ghi phân đoạn phụ
Theo lý thuy
trang bị để xử lí các số thanh ghi phân đoạn chỉ trỏ tới những địa chỉ là bội số của
16 để 4 bit thấp nhất của địa chỉ là zero và 4 bit này không cần cất vào thanh ghi phân đoạn Như vậy, các thanh ghi phân đoạn chỉ chứa 16 bit cao của địa chỉ 20 bit 8088 có
14 thanh ghi 16 bit ( hình 5.3 )
Thanh ghi AX chủ yếu được dùng cho các phép toán số học Thí dụ để tính tổng
2 số nguyên, chương trình có thể nạp 1 trong 2 số nguyên nào đó vào AX, sau đó cộng số thứ 2 với AX và cuối cùng cất AX vào bộ nhớ Cũng có thể dùng những thanh ghi khác, nhưng các
Trang 7Thanh ghi BX tiêu biểu dùng để chứa con trỏ ( pointer ) trỏ đến bộ nhớ, thanh ghi
CX chứa số đếm trong các lệnh vòng lặp Để lặp lại một vòng lặp n lần, CX được nạp giá trị n sau mỗi lần lặp, CX được giảm 1 cho đến khi CX bằng zero, vòng lặp kết thúc
DX là một thanh ghi mở rộng của AX trong các lệnh nhân và chia, thanh ghi này chứa nửa cao của một tích 32 bit hoặc nửa cao của số bị chia 32 bit
Mỗi thanh ghi 16 bit này (AX, BX,CX,DX) đều có nửa thấp và nửa cao, chúng đều có thể được địa chỉ hoá riêng lẻ Khi dùng phương pháp địa chỉ hoá này, chúng hình
nh bởi thanh ghi SI trong phân đoạn dữ liệu và địa chỉ đích xác định bởi thanh ghi DI trong phân đoạn phụ Thí dụ, lệnh cho phép di chuyển 1 số byte từ nguồn tới đích
Thanh ghi BP và SP thường được dùng để địa chỉ hoá stack BP trỏ tới đáy của khung ngăn xếp hiện tại và SP trỏ tới đỉnh của khung ngăn xếp Biến cục bộ của thủ tục hiện tại thường được địa chỉ hoá bằng cách cung cấp bước nhảy (offset) của biến từ
BP (bởi vì biến cục bộ không thẻ chỉ rõ địa chỉ liên quan tới SP)
Kế tiếp là 4 thanh ghi phân đoạn, như đã mô tả trước đây, theo sau là bộ đếm chương trình PC dùng để trỏ tới lệnh kế tiếp (liên quan tới vị trí bắt đầu của phân đoạn mã)
(a) Hình 5.3: Các
thanh ghi 8088
thành một tập 8 thanh ghi 1 byte có thể dùng với lệnh thao tác trên các đại lượng
1 byte Sử dụng các thanh ghi theo kiểu này là dấu vết còn tồn tại của cách làm việc trong 8088 cũ (CPU 8 bit)
Thanh ghi SI và DI được dùng cho các thao tác chuỗi Một thao tác chuỗi điển hình cần có địa chỉ nguồn xác đị
Trang 8Hai thanh ghi cuối cùng là con trỏ chương trình IP (instruction pointer) và các cờ (flag), trên hầu hết các máy khác chúng được gọi là bộ đếm chương trình và từ trạng thái chương trình PSW (program status word) Bộ đếm chương trình trỏ tới lệnh kế tiếp sẽ được thực hiện
Thanh ghi các cờ (xem hình 5.4) là thanh ghi mới Thật ra đây không phải là thanh ghi bình thường màlà 1 tập hợp các bit có thể được thiết lập (set), xóa (clear) và kiểm tra bởi những lệnh khác nhau
Một cách tóm tắt, các bit có ý nghĩa như sau:
it D g (direction) của các thao tác chuổi Bit I cho phép ngắt Bit T cho phép chạy chương trình từng bước để theo dõi B xác định hướn
Hình 5.4: Thanh ghi các cờ của 8088
ố học bị tràn Bit S được thiết lập bởi các lệnh số học, 1 cho kết quả âm, 0 cho kết quả dương Tương t
khi k
ột lệnh số học Có
7 bit không được sử dụng trong 8088, nhưng m
g trên các byte 8-bit Những biến thể này được phân biệt bằng một bit trong lệnh
i chuyển dữ liệu bên trong máy ; giữa các thanh ghi, bộ nhớ và ngăn xếp Nhóm thứ 2 thực hiện các phép tính số học, cả số có dấu và không có dấu Đối với phép nhân
Các bit còn lại thường được gọi là các mã điều kiện (condition code) bởi vì chúng được thiết lập và xóa bởi những lệnh khác nhau tùy thuộc vào những điều kiện khác nhau xảy ra (kết quả âm, zero, và v.v… ) Bit 0 được thiết lập khi kết quả của phép toán s
ự, bit Z được thiết lập là 1 khi kết quả bằng zero và bị xóa về 0 ết quả khác zero Các bit A và C biểu thị số nhớ xuất hiện ở giữa và cuối toán hạng Cuối cùng, bit P là bit kiểm tra chẵn lẻ (parity) kết quả của m
ột số trong chúng được dùng cho những chip kế thừa
Tập lệnh của 8088 được liệt kê trong hình 5.5 Nhiều lệnh tham chiếu 1 hoặc 2 toán hạng (operand), hoặc trong các thanh ghi hoặc trong bộ nhớ Thí dụ, lệnh INC cộng thêm 1 vào toán hạng Lệnh ADD cộng nguồn vào đích Một số lệnh có vài biến thể liên quan mật thiết Thí dụ, các lệnh dịch bit có thể dịch trái hoặc dịch phải, có thể xử lý với bit có dấu hoặc không Hầu hết các lệnh đều có nhiều dạng mã hoá khác nhau tuỳ thuộc vào bản chất của các toán hạng
Trong hình 5.5, trường scr là nguồn của thông tin và không bị thay đổi Trái lại, trường dst là đích của thông tin và thường bị thay đổi bởi lệnh Có những quy luật cho phép một toán hạch nào đó là nguồn hay là đích , chúng thường thay đổi giữa lệnh này với lệnh khác và chúng ta sẽ không bàn thêm ở đây Đa số lệnh đều có 2 biến thể, một biến thể hoat động trên các từ 16-bit và một số biến thể hoặt độn
Để thuận tiện, ta sẽ chia các lệnh thành nhiều nhóm Nhóm đầu tiên chứa các lệnh d
Trang 9ực hiện các phép tính số BCD (binary-coded decimal), xử lý từng byte
ø dạng lưu trữ này không có hiệu quả nhưng tránh
thập
Các lệnh đại số logic và dịch / quay thao tác với các bit trong 1 từ hoặc 1 byte theo nhiều cách khác nhau Một
tích số hoặc số bị chia 32-bit được cất trong AX (chứa phần thấp) và DX (chứa phần cao)
Nhóm thứ 3 th
như là hai nibble (nửa byte)4 bit Mỗi nibble chứa một số thập phân (từ 0 đến 9) Các tổ hợp bit từ 1010 tới 1111 không được dùng một số nguyên 16-bit có thể chứa một số thập phân từ 0 đến 9999 Du
sự cần thiết phải đổi số thập phân sang nhị
phân để xuất kết quả Những lệnh này được dùng để thực hiện các phép tính số học trên các số BCD
vài kết hợp cũng được cung cấp
Hình 5.5 tập lệnh của 8088
Hai nhóm lệnh kế tiếp thực hiện phép kiểm tra và so sánh, sau đó thực hiện nhảy dựa vào kết quả sinh ra Kết quả của các lệnh kiểm tra và so sánh được cất trong những bit khác nhau của thanh ghi cờ Jxx nghĩa là tập các lệnh nhảy có điều kiện tùy thuộc vào kết quả của phép so sánh trước ( nghĩa là, các bit trong thanh ghi cờ )
Trang 108088 có vài lệnh nạp, cất, di chuyển, so sánh và quét chuỗi các kí tự hoặc các từ Những lệnh này có thể được mở đầu bằng 1 byte đặc biệt gọi là REP, byte này làm cho lệnh được lặp lại cho tới khi thỏa mãn một điều kiện nào đó, như CX chẳng hạn, trong
86, 80386 ) có một số lệnh tiền tố ( prefix ), và chúng ta đã đề cập đến một tiền tố, REP Mỗi tiền tố này là một byte đặc biệt thường đứng trước lệnh REP
g để buộc lệnh phải tìm nạp toán hạng của lệnh từ ngăn xếp hoặc từ phân đoạn phụ thay vì từ phân đoạn dữ liệu
II CÁC KHUÔN DẠNG LỆNH
đó CX bị giảm 1 sau mỗi lần lặp cho tới khi bằng 0 Bằng cách này, các khối dữ liệu tùy ý có thể được di chuyển, so sánh, và v.v…
Nhóm cuối cùng là những lệnh hỗn độn không thích hợp trong một nhóm nào cả Những lệnh này bao gồm các lệnh biến đổi, xuất / nhập và dừng CPU
8088 ( và cả 802
làm cho lệnh theo sau tiền tố này được lặp lại LOCK dành riêng bus cho toàn bộ lệnh để cho phép đồng bộ đa xử lí Những tiền tố khác được dùn
Chương trình bao gồm một chuỗi các lệnh, mỗi lệnh xác định một động tác cụ thể nào đó Một phần của lệnh được gọi là mã thao tác (operation code ) hoặc opcode cho biết động tác gì được thực hiện Nhiều lệnh chứa hoặc chỉ rõ vị trí của dữ liệu được lệnh sử dụng Thí dụ lệnh so sánh 2 ký tự xem chúng có giống nhau không cần phải xác định rõ các ký tự nào được so sánh Vấn đề chung cho biết các toán hạng ở đâu được gọi là định địa chỉ hay địa chỉ hóa hay đánh địa chỉ ( addressing ) sẽ được thảo luận trong phần sau nữa
Hình 5.6 trình bày vài khuôn dạng ( format ) tiêu biểu cho các lệnh lớp 2 Trên một số máy lớp 2, tất cả các lệnh có cùng chiều dài, trên một số máy khác có thể có 2 hoặc 3 chiều dài khác nhau Hơn nữa các lệnh có thể có chiều dài ngắn hơn, bằng hoặc dài hơn chiều dài của 1 từ
Hình 5.6: 3 khuôn dạng chỉ thị tiêu biểu
hí dụ về các khuôn dạng lệnh
không
ở trong bộ nhớ Vì vậy tồn tại những lệnh cộng 2 thanh ghi,cộng thanh ghi với bộ nhớ
T
Họ 8088/80286/80386 của Intel
Với các CPU của Intel,tình huốn hoàn toàn khác và rất ít theo quy luật Nhìn chung, với các lệnh 2 toán hạng, nếu 1 toán hạng ở trong bộ nhớ, toán hạng kia