Bộ vi xử lý 8088

4 1.2K 22
Bộ vi xử lý 8088

Đang tải... (xem toàn văn)

Thông tin tài liệu

7 8. CHƯƠNG 3 : BỘ VI XỬ 8088 3.1_CÁC THANH GHI CỦA BỘ VI XỬ 8088 Bộ vi xử 8088 có một số phần tử dùng để ghi nhớ các giá trò trung gian trong quá trình làm việc,tạo ra các đòa chỉ,làm các phép tính .Các phần tử này gọi là các thanh ghi (Register). 8088 là bộ vi xử 16 bit, các tác vụ của 8088 thường dược thực hiện trên 16 bit dồng thời,các thanh ghi của 8088 đều là các phần tử nhớ 16 bit.Các thanh ghi hoàn toàn có thể sử dụng như các phần tử nhớ thuộc về RAM. Điểm khác nhau giữa thanh ghi và các phần tử nhớ thuộc RAM là Thanh ghi là các phần tử thuộc bộ vi xử (về mặt vật lý). Một số tác vụ đặc biệt như nhân hay chia, kết quả bắt buộc phải đặt trong thanh ghi Một số thanh ghi chỉ dùng để xác đònh đòa chỉ cho 8088 Các tác vụ trên thanh ghi nhanh hơn nhiều so với các tác vụ trên RAM. Bởi để thực hiện các tác vụ trên RAM,8088 phải đi qua một quá trình như sau : a) Đọc thông tin từ RAM (thông qua Bus) b) Thực hiện tác vụ c) Ghi trả lại thông tin vào RAM (thông qua Bus) Bộ vi xử 8088 có 14 thanh ghi 16 bit,được chia thành nhóm theo chức năng như sau: 3.1.1_Nhóm thanh ghi đa dụng : AX,BX,CX,DX : Mỗi thanh ghi có thể sử dụng như hai thanh ghi 8 bit với các tên AH,AL,BH,BL,CH,CL,DH,DL F E D C B A 9 8 7 6 5 4 3 2 1 AH AL AX BH BL BX CH CL CX DH DL DX 3.1.2_Nhóm thanh ghi con trỏ và chỉ mục : SP,BP,SI,DI : thường dùng để tạo các đòa chỉ, cũng có thể dùng để lưu chứa các số liệu như nhóm thanh ghi đa dụng 3.1.3Nhóm thanh ghi phân đoạn : CS,DS,SS,ES : Chỉ dùng để xác đònh Segment, không cho phép thực hiện các phép tính số học,logic . 3.1.4Thanh ghi con trỏ lệnh IP : Chỉ dùng để xác đònh offset của mã lệnh 3.1.5Thanh ghi cờ hiệu Flag : Ghi lại trạng thái của các phép tính số học, kết quả của các phép so sánh . F E D C B A 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 3.2CÁCH XÁC ĐỊNH ĐỊA CHỈ CỦA 8088 8 Bộ vi xử 8088 dùng một số 20 bit để xác đònh đòa chỉ cho các phần tử trong vùng nhớ (memory), tương đương với 1MB vò trí. Bằng các giá trò 16 bit,ta chỉ có thể tạo ra đòa chỉ cho 0FFFFh phần tử ( 64 KB hay 65536 byte ). Do đó để có thể đònh vò 1 MB đòa chỉ bằng các thanh ghi 16 bit, 8088 sử dụng nguyên tắc truy nhập bộ nhớ theo từng segment,mỗi segment có kích thước 64 KB, điểm bắt đầu của segment phải là một đòa chỉ chia hết cho 010h ( 16 thập phân ) . Đòa chỉ của segment được tính bằng paragraph ( 1 paragraph = 16 byte ). Đòa chỉ một phần tử nào đó thuộc đoạn sẽ được xác đònh thông qua đòa chỉ tương đối (offset) của phần tử đó trong đoạn và vò trí của đoạn . Từ nguyên tắc trên, ta có các kết quả sau : Đòa chỉ 20 bit = Segment*16 + Offset Cách biểu diễn : Segment:offset Cùng một đòa chỉ, có thể biểu diễn dưới nhiều hình thức khác nhau. Thí dụ: 0040:006C và 0000:046C là hai cách biểu diễn một đòa chỉ Segment chỉ là khái niệm logic, do đó không có vò trí cố đònh cho từng segment . Ta hoàn toàn có thể mô tả các segment phủ lấp lên nhau. Bộ vi xử 8088 luôn xác đònh segment thông qua giá trò của các thanhghi segment. Do đó để xác đònh segment ta phải gán các giá trò tương ứng cho các thanh ghi segment. Thanh ghi CS chỉ đònh segment của đoạn mã chương trình đang thực hiện,IP mang giá trò offset. vậy CS:IP luôn là đòa chỉ của lệnh đang được thực hiện. Thanh ghi DS chỉ đònh segment của dữ liệu,thông thường các đòa chỉ đều được căn cứ theo segment DS . Thanh ghi SS chỉ đònh segment của STACK ( sẽ nói rõ hơn trong phần sau). Thanh ghi ES dùng trong các tác vụ về chuỗi hoặc theo yêu cầu riêng. 3.3CÁC XÁC ĐỊNH OFFSET CỦA 8088 Offset của bộ vi xử 8088 được xác đònh theo nguyên tắc sau : Offset là một hằng số TD : [046Ch] Offset là giá trò của một trong các thanh ghi chỉ mục BX,SI,DI,BP TD : [BX] Offset là giá trò của một tổng được tạo thành từ các hằng số,các thanh ghi chỉ mục . Nguyên tắc này có một số hạn chế : - SI và DI không được cùng có mặt trong tổng - BX và BP không được cùng có mặt trong tổng TD : [SI+BX] [DI+BX+020h] TD : [SI+BP+041h] Segment mặc nhiên : khi xác đònh một đòa chỉ, không phải lúc nào ta cũng phải chỉ ra thanh ghi segment nào sẽ được sử dụng . Nếu không có chỉ đònh cụ thể thanh ghi segment, các offset tạo thành từ các hằng số và các thanh ghi chỉ mục BX,SI,DI luôn được hiểu là đi kèm với thanh ghi segment DS . Offset được tạo thành từ BP được hiểu là đi kèm với thanh ghi SS Nếu chúng ta chỉ đònh rõ ràng thanh ghi segment đi kèm với offset, các giá trò mặc nhiên về segment sẽ vô hiệu hoá . 3.4 BỘ 8088 THỰC HIỆN MỘT CHƯƠNG TRÌNH RA SAO ? 3.4.1Thế nào là một chương trình : Chương trình là một tập hợp các mã lệnh và các dữ liệu . Mã lệnh (code) : là các lệnh 8088 sẽ thực hiện Dữ liệu (data) : là các thông tin chương trình sẽ sử dụng đến .Thí dụ : chương trình của bạn sẽ in 9 dòng chữ “Do you like me ?” ra màn hình thì dòng chữ ấy phải có mặt trong chương trình của bạn. Vùng lưu chứa dòng chữ này trong chương trình được gọi là một vùng dữ liệu (data) . Chương trình của bạn cũng cần đến một số vùng nhớ để lưu chứa các giá trò trong quá trình chương trình được thực hiện, các vùng nhớ này cũng được gọi là vùng dữ liệu . Phải chú ý, bộ 8088 không thể phân biệt đâu là code, đâu là data ! 3.4.2Cách thức 8088 thực hiện một chương trình : Giả sử đã có chương trình trong RAM và CS:IP chỉ đến lệnh đầu tiên của chương trình . 8088 đọc byte xác đònh bởi CS:IP,nhận diện lệnh, từ đó suy ra chiều dài của lệnh . 8088 cộng thêm vào IP chiều dài của lệnh, rồi bắt đầu thực hiện lệnh . Sau khi thực hiện lệnh, 8088 đọc tiếp byte đang được xác đònh bởi CS:IP và cứ thế quá trình này lặp đi lặp lại mãi . Chương trình của chúng ta được thực hiện từ lệnh đầu tiên đến lệnh cuối cùng theo phương cách này . Nhưng làm cách nào để đưa một chương trình vào RAM và làm cách nào để ấn đònh CS:IP chỉ đến lệnh đầu tiên của chương trình ấy ? Tất cả các tác vụ này đều do hệ điều hành thực hiện . Chương trình của chúng ta được lưu chứa trên đóa thành một file có phần mở rộng (đuôi đặc tính) là COM hay EXE . Khi ta gõ từ bàn phím tên của file này và nhấn ENTER, hệ điều hành sẽ đọc file ấy vào RAM, sau đó đưa vào CS và IP các giá trò để CS:IP chỉ vào lệnh đầu tiên của chương trình vừa được nạp vào. Sau đó là quá trình thực hiện chương trình của chúng ta như đã nêu trên. Làm cách nào để kết thúc chương trình của chúng ta ? Như đã nêu trên, 8088 không ngừng đọc và phân giải các lệnh theo đòa chỉ được CS và IP xác đònh,do đó kết thúc một chương trình nào đó không có nghóa là 8088 ngừng hoạt động (!) . Quá trình kết thúc một chương trình được thực hiện bằng cách làm cho CS:IP chỉ vào một điểm xác đònh trước trong vùng mã của hệ điều hành ( còn gọi là chuyển điều khiển cho hệ điều hành ) . Sau đó là quá trình đợi lệnh của hệ điều hành . Quá trình đợi lệnh của hệ điều hành như chúng ta nhìn thấy, có vẻ như “máy tính đang ngừng làm việc,chờ chúng ta ra lệnh tiếp” ! Đây là điều lầm tưởng của nhiều người mới bắt đầu làm quen với Computer. Chúng ta phải luôn nhớ rằng máy tính liên tục phân giải và thực hiện các lệnh được CS:IP chỉ đến và chỉ ngừng khi chúng ta . tắt máy ! 3.4.3Chúng ta tạo ra chương trình bằng cách nào : Các mã lệnh trong chương trình của chúng ta là các số nhò phân biểu diễn thành từng byte . Chúng ta sẽ rất khó khăn nếu phải viết một chương trình bằng từng số nhò phân như vậy . Trong thực tế chúng ta sẽ viết một chương trình nguồn, đó là một file với các đặc điểm : - Sự trình bày tuân thủ theo một số quy tắc chung - Mỗi lệnh của 8088 sẽ được gọi bằng một cái tên gợi nhớ . - Các đòa chỉ được xác đònh bởi các tên riêng do người viết quy đònh - Chương trình nguồn sẽ được một chương trình đặc biệt biên dòch (compile) thành một file với đầy đủ các mã lệnh và các dữ liệu đã mô tả trong chương trình nguồn . vậy chúng ta không cần phải thắc mắc lệnh này hoặc lệnh kia có mã máy là gì ! 3.4.4Một chương trình nguồn sẽ được biên dòch bằng Assembler 86 : Code Segment Assume CS:Code,DS:Code org 0100h Main proc near M1: mov dx,offset chuoi1 ; in chuoi1 ra màn hình mov ah,9 ; int 021h ; mov ah,1 ; Read Keyboard 10 int 021h ; cmp al,’Y’ ; Kiểm tra ký tự dọc vào je KT ; nếu là ‘Y’ hay ‘y’ thì nhảy dến KT cmp al,’y’ je KT mov ah,02 ; Nếu không, Beep một tiếng rồi quay lại M1 mov dl,7 int 021h ; jmp M1 KT: mov dx,offset chuoi2 ; In chuoi2 mov ah,9 ; int 021h ; int 020h ; Kết thúc chương trình Main endp Chuoi1 db 13,’Do you like me ? $’ ; Mã 13 để trở về đầu dòng Chuoi2 db ‘ Thank you !$’ Code ends end main . BỘ VI XỬ LÝ 8088 3.1_CÁC THANH GHI CỦA BỘ VI XỬ LÝ 8088 Bộ vi xử lý 8088 có một số phần tử dùng để ghi nhớ các giá trò trung gian trong quá trình làm vi c,tạo. thanh ghi (Register). 8088 là bộ vi xử lý 16 bit, các tác vụ của 8088 thường dược thực hiện trên 16 bit dồng thời,các thanh ghi của 8088 đều là các phần

Ngày đăng: 29/09/2013, 11:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan