BÀI 2 TỔ CHỨC CPU - LẬP TRÌNH ASSEMBLY (TT)

Hệ thống thanh ghi
Là các phần tử có khả năng lưu trữ thông tin với dung lượng 8, 16, 32, 64 bit.
Được xây dựng từ các Flip Flop nên có tốc độ truy xuất rất nhanh.
Phân loại thanh ghi:
+ Thanh ghi tổng quát: Chủ yếu dùng để lưu trữ dữ liệu trong quá trình thực thi chương trình, nhưng mỗi thanh ghi còn có 1 số chức năng riêng.
+ Thanh ghi điều khiển: Các bit của nó qui định tác vụ của các đơn vị chức năng của máy tính.
+ Thanh ghi trạng thái: Lưu trữ thông tin mô tả trạng thái.
AX Register
Thanh ghi AX (Accumulator register): Thanh ghi tích luỹ, dài 16 bit nhưng nó cũng có thể chia làm 2 thanh ghi 8 bit AH và AL.
AX ngoài chức năng lưu trữ dữ liệu, nó còn được CPU dùng trong phép toán số học như nhân, chia.
Thanh ghi AH là nửa cao của thanh ghi AX.
Thanh ghi AL là nửa thấp của thanh ghi AX.
VD: Nếu AX = 1234h thì AH = 12HAL = 34h.
BX Register
Thanh ghi BX (Base register): Dài 16 bit nhưng nó cũng có thể chia làm 2 thanh ghi 8 bit BH và BL.
BX lưu trữ địa chỉ của 1 thủ tục hay biến, nó cũng được dùng thực hiện các phép dời chuyển số học và dữ liệu.
DX Register
Thanh ghi DX (Data register): Dài 16 bit nhưng nó cũng có thể chia làm 2 thanh ghi 8 bit DH và DL.
Thanh ghi DX: Có vai trò đặc biệt trong phép nhân và phép chia ngoài chức năng lưu trữ dữ liệu.
VD: Khi nhân DX sẽ lưu giữ 16 bit cao của tích.
CX Register
CX (Counter register): Thanh ghi này dùng làm bộ đếm trong các vòng lặp. Các lệnh tự động lặp lại và sau mỗi lần lặp giá trị của CX tự động giảm đi 1.
CL thường chứa số lần dịch, quay trong các lệnh dịch, quay thanh ghi.
CX dài 16 bit, nó cũng có thể chia làm 2 thanh ghi 8 bit CH và CL.
Các thanh ghi Segment
CPU có 4 thanh ghi segment dài 16 bit, các thanh ghi này không thể chia làm 2 thanh ghi 8 bit như 4 thanh ghi AX, BX, CX và DX.
Các thanh ghi đoạn được sử dụng như là địa chỉ cơ sở của các lệnh trong chương trình, Stack và dữ liệu.
4 thanh ghi đoạn: CS (Code Segment), DS (Data Segment), SS (Stack Segment) và ES (Extra Segment).
CS: Chứa địa chỉ bắt đầu của code trong chương trình.
DS: Chứa địa chỉ của các biến khai báo trong chương trình.
SS: Chứa địa chỉ của bộ nhớ Stack dùng trong chương trình.
ES: Chứa địa chỉ cơ số bổ sung cho các biến bộ nhớ.
Thanh ghi 32 bit
Đối với một số CPU đời mới, có các thanh ghi dài 32, 64 bit. Ta ghi thêm E đứng trước tên các thanh ghi 16 bit...
EAX, EBX, ECX, EDX...
Thanh ghi đoạn và sự hình thành địa chỉ
8088 sử dụng 20 bit để đánh địa chỉ bộ nhớ -> quản lý trên 1Mb bộ nhớ. Nhưng 8088 lại không có thanh ghi nào 20 bit, tất cả là 16 bit do đó 1 thanh ghi chỉ có thể đánh địa chỉ tối đa là 64Kb bộ nhớ.
Như vậy phải kết hợp 2 thanh ghi mới địa chỉ hoá toàn bộ nhớ, 8088 sử dụng 1 trong các thanh ghi dùng chung và 1 trong các thanh ghi đoạn (CS, DS, SS, ES) để tạo thành 1 địa chỉ 20bit.
Sự phân đoạn bộ nhớ
CPU 8086 dùng phương pháp phân đoạn bộ nhớ để quản lý bộ nhớ 1Mb của nó.
Địa chỉ 20bit của bộ nhớ 1Mb không thể chứa đủ trong các thanh ghi 16bit của CPU 8086 -> bộ nhớ 1Mb được chia ra thành các đoạn (segment) 64Kb.
Địa chỉ trong các đoạn 64Kb chỉ có 16bit nên CPU 8086 dễ dàng xử lý bằng các thanh ghi của nó.
-> Phân đoạn bộ nhớ: Là cách dùng các thanh ghi 16bit để biểu diễn cho địa chỉ 20bit.
Địa chỉ vật lý và địa chỉ luận lý
Địa chỉ 20 bits được gọi là địa chỉ vật lý.
Địa chỉ vật lý dùng như thế nào?
Dùng trong thiết kế các mạch giải mã địa chỉ cho bộ nhớ và xuất nhập.
Còn trong lập trình, địa chỉ vật lý không thể dùng được mà nó được thay thế bằng địa chỉ luận lý (logic).
Địa chỉ luận lý
Địa chỉ của 1 ô nhớ được xác định bởi 2 phần:
Sự hình thành địa chỉ
Hãng Intel đề xuất 1 phương pháp để hình thành địa chỉ.
Mỗi địa chỉ ô nhớ được hình thành từ 1 phép tính tổng 1 địa chỉ cơ sở và 1 địa chỉ offset.
Địa chỉ cơ sở lưu trong 1 thanh ghi segement, còn địa chỉ offset nằm trong 1 thanh ghi chỉ số hay thanh ghi con trỏ.
Phép cộng này sẽ tạo 1 địa chỉ 20 bit gọi là địa chỉ vật lý.

Sự hình thành địa chỉ tuyệt đối

Cách tính địa chỉ vật lý từ địa chỉ luận lý
Sự chồng chất các đoạn
Địa chỉ segment hay còn gọi là địa chỉ nền của đoạn. Nó cho biết điểm bắt đầu của đoạn trong bộ nhớ.
Địa chỉ offset thể hiện khoảng cách kể từ đầu đoạn của ô nhớ cần tham khảo.
Do offset dài 16 bit nên chiều dài tối đa của mỗi đoạn là 64K.
Trong mỗi đoạn, ô nhớ đầu tiên có offset là 0000h và ô nhớ cuối cùng là FFFFh.
Mỗi ô nhớ chỉ có địa chỉ vật lý nhưng có thể có nhiều địa chỉ luận lý.
VD: 1234 : 1234
1334 : 0234
1304 : 0534
Đều có chung địa chỉ vật lý 13574h
Tại sao?
Để hiểu rõ tại sao ta hãy xét mối quan hệ giữa địa chỉ vật lý với sagment và offset.
Giải thích: 0000 : 0000 -> 00000h
Giữ nguyên phần segment, tăng phần offset lên 1 thành ra địa chỉ luận lý là 0000 : 0001.
Địa chỉ vật lý tương ứng là 00001h.
Tương tự với địa chỉ luận lý là 0000 : 0002 ta có địa chỉ vật lý là 00002h
Khi offset tăng 1 đơn vị thì địa chỉ vật lý tăng 1 địa chỉ hoặc là tăng 1 byte.
Như vậy có thể xem đơn vị của offset là byte.
Làm lại quá trình trên nhưng giữ nguyên phần offset chỉ tăng phần segment.
0001 : 0000 -> 00010h
0002 : 0000 -> 00020h
Khi segment tăng 1 đơn vị thì địa chỉ vật lý tăng 10h địa chỉ hoặc là tăng 16 bytes.
Đơn vị của segment là paragraph.
Ta thấy segment 0000 nằm đầu vùng nhớ nhưng segment 0001 bắt đầu cách đầu vùng nhớ chỉ có 16 bytes, segment 0002 bắt đầu cách đầu vùng nhớ 32 bytes...
Phần chồng chập 3 segment 0000, 0001, 0002 trên hình vẽ là vùng bộ nhớ mà bất kỳ ô nhớ nào nằm trong đó (địa chỉ vật lý từ 00020h đến 0FFFFh) đều có thể có địa chỉ luận lý tương ứng trong cả 3 segment.
VD: Ô nhớ có địa chỉ 0002Dh sẽ có địa chỉ logic trong segment 0000 là 0000 : 002D
Trong segment 0001 là 0001 : 001D
Trong segment 0002 là 0002 : 000D
-> Nếu vùng bộ nhớ nào càng có nhiều segment chồng chập lên nhau thì các ô nhớ trong đó càng có nhiều địa chỉ luận lý.
Một ô nhớ có bao nhiêu địa chỉ luận lý?
Một ô nhớ có ít nhất 1 địa chỉ luận lý và nhiều nhất là 65536/16 = 4096 địa chỉ luận lý.
Các thanh ghi đoạn CS, DS, SS, ES
3 trong 4 thanh ghi đoạn được dùng trong các mục đích đặc biệt sau.
CS: Xác định đoạn lệnh - nơi chứa chương trình được thi hành.
DS: Xác định đoạn dữ liệu - nơi chứa chương trình được thi thành.
SS: Xác định đoạn Stack - vùng làm việc tạm thời dùng để theo dõi các tham số và các địa chỉ đang được chương trình hiện hành sử dụng.
ES: Trỏ đến đoạn thêm, thường được dùng để bổ sung cho đoạn dữ liệu -> có vùng nhớ > 64k cho đoạn dữ liệu.
Thanh ghi trạng thái (thanh ghi cờ)
Thanh ghi cờ là thanh ghi 16 bit nằm trong EU (Excution Unit). Tuy nghiên chỉ có 9 trong 16 bit được sử dụng, 7bit còn lại không dùng.
Giải thích:
Cờ CF: Chỉ thị cộng có nhớ, trừ có mượn.
Cờ PF: On khi kết quả của tác vụ có số bit 1 là số chẵn.
Nếu số bit 1 là số lẻ thì PF là Off.
Cờ AF: Có nhớ trong phép cộng hoặc có mượn trong phép trừ với 4 bit thấp sang 4 bit cao.
Cờ ZF: On khi tác vụ luận lý cho kết quả là 0.
Cờ SF: Bit cao nhất của kết quả sẽ được copy sang SF.SF = 1 kết quả là số âm. SF = 0 khi kết quả là số dương.
Cờ OF: OF = 1 khi kết quả bị tràn số (vượt quá khả năng lưu trữ). Nếu kết quả không bị tràn thì OF = 0.
3 bit còn lại là 3 bit điều khiển:
Cờ TF: Báo CPU thi hành từng bước. Cung cấp công cụ debug chương trình.
Cờ IF: IF = 1 giúp 8086 nhận biết có yêu cầu ngắt quãng có che.
Cờ DF: Xác định hướng theo chiều tăng/giảm trong xử lý chuỗi.
8086 cho phép User lập trình bật tắt các cờ CF, DF, IF, TF.
Thanh ghi chỉ số (Index)
5 thanh ghi offset dùng để xác định chính xác 1 byte hay 1 word trong 1 đoạn 64k, Đó là:
IP: Thanh ghi con trỏ lệnh, cho biết vị trí của lệnh hiện hành trong đoạn lệnh. Con trỏ lệnh IP còn được gọi là bộ đếm chương trình.
Thường được dùng kết hợp với CS để theo dõi vị trí chính xác của lệnh sẽ được thực hiện kế tiếp.
Các thanh ghi con trỏ Stack: SP và BP, mỗi thanh ghi dài 16 bit.
SP (Stack pointer) cho biết vị trí hiện hành của đỉnh Stack.
BP (Basic pointer) dùng để truy cập dữ liệu trong Stack.
SI (Source index) trỏ đến ô nhớ trong đoạn dữ liệu được định địa chỉ bởi thanh ghi DS.
DI (Destination) chức năng tương tự SI.
Hai thanh ghi này thường dùng trong xử lý chuỗi.
Địa chỉ luận lý và thanh ghi
Để tham khảo đến bộ nhớ trong chương trình, VXL 8086 cho phép sử dụng các địa chỉ luận lý 1 cách trực tiếp hoặc thông qua các thanh ghi của nó.
Thanh ghi đoạn dùng để chứa segment.
Thanh ghi tổng quát dùng để chứa địa chỉ trong đoạn offset.
Để tham khảo đến địa chỉ luận lý có segment trong thanh ghi DS, offset trong thanh ghi BX, ta viết DS:BX.
Các đặc tính của CPU Intel
Hiệu quả của CPU thuộc họ Intel khi xử lý và chuyển giao thông tin được xác định bởi các yếu tố sau:
+ Tần số mạch xung đồng hồ của CPU.
+ Độ rộng của Data bus.
+ Độ rộng của Address bus.
+ Tần số mạch xung đồng hồ của CPU càng nhanh thì tốc độ xử lý càng nhanh.
+ Độ rộng của Data bus càng rộng thì càng nhiều data được chuyển giao trong 1 lần giao dịch.
+ Độ rộng của Address bus càng rộng thì khả năng quản lý bộ nhớ càng lớn.

RISC & CISC
Nguyên lý CISC
Complex Intruction Set Computer
+ Tập lệnh khá lớn > 300 lệnh.
+ Khả năng định vị phức tạp.
+ Một số lệnh cần phải vi lệnh hoá quá nhiều lệnh -> nạp lâu -> làm chậm hệ thống lệnh phức tạp -> nên thời gian giãi mã lệnh nhiều khi lớn hơn thời gian thực thi.
Chỉ có hơn 20% lệnh thường dùng tới.
Nguyên lý RISC (tập lệnh thu gọn)
Reduce Intruction Set Computer
Tập lệnh nhỏ -> thi hành ngay không cần giải mã.
Lệnh làm việc theo cơ chế đường ống (pipeline).
CPU Pentium
3 thành phần góp sức tăng tốc độ xử lý của Petium
+ Đơn vị tính toán số nguyên supercallar.
+ Bộ nhớ Cache cấp 1 ở bên trong CPU.
+ Đơn vị tính toán số chấm động supercallar.

2 Comment:

Em đã học hỏi được ít nhiều từ những thông tin này. Cảm ơn người đã viết bài nhiều lắm ạ.

Đăng nhận xét

Thank you for your comments!