intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Kiến trúc và tổ chức máy tính: Chương 6 - ThS. Trần Quang Hải Bằng

Chia sẻ: Estupendo Estupendo | Ngày: | Loại File: PDF | Số trang:31

142
lượt xem
10
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 6 - Lập trình hợp ngữ. Chương này gồm có những nội dung chính sau: Giới thiệu cấu trúc tập lệnh của CPU, tập thanh ghi của 8086/8088, các kiểu thao tác của tập lệnh, tập lệnh họ 8086/8088. Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Kiến trúc và tổ chức máy tính: Chương 6 - ThS. Trần Quang Hải Bằng

  1. KIẾN TRÚC VÀ TỔ CHỨC MÁY TÍNH (Computer Organization and Architecture) Chương 6 Lập trình Hợp ngữ bangtqh@utc2.edu.vn Nội dung 1. Giới thiệu cấu trúc tập lệnh của CPU 2. Tập thanh ghi của 8086/8088 3. Các kiểu thao tác của tập lệnh 4. Tập lệnh họ 8086/8088 bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 2
  2. 6.1. Giới thiệu tập lệnh của CPU Mỗi CPU có 1 tập lệnh xác định Tập lệnh có hàng chục hoặc hàng trăm lệnh. Intel 8086/8088 có tập lệnh khoảng 115 lệnh chia làm 5 nhóm Mỗi lệnh là một chuỗi số nhị phân mà CPU hiểu được và thực hiện 1 thao tác xác định Các lệnh được mô tả bằng ký hiệu gợi nhớ Là các lệnh của hợp ngữ (Assembly) bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 3 Giản đồ trạng thái của Chu kỳ lệnh NhËn to¸n CÊt to¸n NhËn lÖnh h¹ng h¹ng NhiÒu NhiÒu to¸n kÕt h¹ng qu¶ Gi¶i m· TÝnh to¸n TÝnh to¸n TÝnh to¸n thao t¸c ®Þa chØ to¸n Xö lý d÷ liÖu ®Þa chØ to¸n ®Þa chØ lÖnh lÖnh h¹ng h¹ng KÕt thóc lªnh, DL d¹ng nhËn lÖnh x©u hoÆc tiÕp theo vect¬ Không kiểm tra ngắt bangtqh@utc2.edu.vn 4
  3. Giản đồ trạng thái của chu kỳ lệnh NhËn to¸n CÊt to¸n NhËn lÖnh h¹ng h¹ng NhiÒu NhiÒu to¸n kÕt h¹ng qu¶ TÝnh to¸n Gi¶i m· TÝnh to¸n TÝnh to¸n Xö lý d÷ KiÓm tra ®Þa chØ thao t¸c ®Þa chØ ®Þa chØ Ng¾t liÖu ng¾t lÖnh lÖnh to¸n h¹ng to¸n h¹ng KÕt thóc lªnh, DL d¹ng Kh«ng nhËn lÖnh x©u hoÆc cã ng¾t tiÕp theo vect¬ Có kiểm tra ngắt cuối mỗi chu kỳ lệnh bangtqh@utc2.edu.vn 5 6.2. Tập thanh ghi của 8086/8088 Nhóm thanh ghi đa Nhóm năng thanh ghi đoạn (segment) 8086/8088 có 14 thanh ghi 16 bit chia làm 4 nhóm như hình vẽ 8086/8088 có bus địa chỉ 20 bit (1MB không gian địa chỉ) sử dụng phương pháp đánh địa chỉ phân đoạn (segment addressing) Địa chỉ vật lý = địa chỉ segment*16 + địa chỉ offset bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 6
  4. Nhóm thanh ghi đa năng Còn gọi là nhóm thanh ghi công dụng chung (General purpose registers) Có thể dùng ½ mỗi thanh ghi như những thanh ghi độc lập 8086/8088 tự động sử dụng một số thanh ghi đa dụng vào một số mục đích cụ thể bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 7 Nhóm thanh ghi đoạn CS: chứa địa chỉ cơ sở đoạn mã lệnh của chương trình đang chạy DS: chứa địa chỉ đoạn của vùng dữ liệu chương trình đang thực hiện ES: (Extra segment) Chứa địa chỉ đoạn dữ liệu bổ sung (vùng chứa biến của chương trình) SS: Chứa địa chỉ bộ nhớ stack của chương trình đang chạy bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 8
  5. Thanh ghi con trỏ và chỉ số IP: (instruction pointer): luôn chỉ đến địa chỉ lệnh sắp được thi hành trong bộ do do CS đang trỏ tới Cặp CS:IP chứa địa chỉ vật lý của lệnh trong bộ nhớ SP: luôn kết hợp với SS tạo thành cặp SS:SP để trỏ tới địa chỉ vùng nhớ stack của chương trình. SI và DI (Source index và Destination index): được thiết kế chuyên dụng trong các thao tác vận chuyển số liệu. Cặp DS:SI trỏ tới dữ liệu nguồn, ES:DI trỏ tới dữ liệu đích bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 9 Thanh ghi cờ của 8086/8088 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 X X X X OF DF IF TF SF ZF X AF X PF X CF bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 10
  6. Ngắt (nhắc lại) Ngắt là cơ chế mà BXL dừng chương trình đang thi hành để thực hiện 1 công việc khác – Ngắt cứng: thường xuất phát từ các thiết bị phần cứng ngoại vi, yêu cầu CPU giải quyết 1 công việc gì đó (vd: INT 2 báo sự cố phần cứng; INT 8: ngắt tín hiệu đồng hồ; INT 9 ngắt bàn phím….v.) – Ngắt mềm: là các chương trình con được gọi bằng lệnh INT của BXL. Số hiệu chương trình con là số hiệu của vector ngắt trong bảng vector ngắt. Chương trình con này thi hành 1 dịch vụ nào đó của DOS hoặc BIOS. Khi gọi ngắt mềm, người lập trình thường phải truyền các tham số thông qua các thanh ghi và kết quả thu được sẽ có trong thanh ghi hoặc bộ nhớ. Bảng vector ngắt chiếm 1KB vùng nhớ địa chỉ thấp từ 0:0000h đến 0:0400h trong đó cứ 4 byte tạo thành 1 vector chứa địa chỉ offset (word thấp) và địa chỉ segment (word cao) – Vd: INT 0 tại địa chỉ 0:0004h, INT 1 tại địa chỉ 0:0008h, INT 2 tại địa chỉ 0:000Ch bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 11 Tập lệnh 8086/8088 VXL 8086/8088 có khoảng 115 lệnh, chia làm 6 nhóm lệnh chính – Các lệnh vận chuyển số liệu (POP, PUSH, MOV,….) – Các lệnh số học (ADD, SUB, MUL, IMUL, DIV, CMP…) – Các lệnh thao tác ở mức bit (AND, NOT, ROR, ROL…) – Các lệnh thao tác với dãy byte (REP, CMPSB, REPZ…) – Các lệnh điều khiển (CALL, INT, JE, JZ, LOOP,…) – Các lệnh thao tác với cờ (flag) và điều khiển BXL (HLT,CLC, CLD, NOP, WAIT….) bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 12
  7. Phân biệt EXE và COM File *.COM – Nằm trên 1 segment size tối đa chỉ 64KB – Nạp vào bộ nhớ và thực thi hanh hơn file EXE – Khi chạy file COM, DOS tạo vùng nhớ Program Segment Prefix (PSP) dài 256 Byte ở 0000h chứa các thông tin cần thiết, sau đó các mã lệnh sẽ được load vào từ vị trí 0100h và nạp giá trị 0 vào stack (2 byte), thanh ghi SP trỏ tới 0FFFEh Size thực tế của chương trình COM chỉ là: 64KB – 256 Byte – 2 byte stack File *.EXE – Nằm trên nhiều segment khác nhau – Size thường lớn 64KB – Có thể gọi được các chương trình con dạng near hoặc far bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 13 Khung một chương trình assembly Xét cụ thể 1 chương trình đơn giản Đoạn khai báo dữ liệu Chương trình chính Đoạn mã chứa lệnh của chương trình Chương trình con bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 14
  8. Khung chương trình assembly (tt) Chỉ thị .MODEL – TINY: Mã lệnh và dữ liệu cùng nằm trong 1 segment – SMALL: Mã lệnh nằm trên 1 segment; Dữ liệu trên 1 segment khác – MEDIUM: Mã lệnh nằm trong nhiều segment; Dữ liệu nằm trên 1 segment – COMPACT: Mã lệnh nằm trên 1 segment; Dữ liệu nằm trên nhiều segment – LARGE: Mã lệnh nằm trong nhiều segment; Dữ liệu nằm trên nhiều segment nhưng không chứa mảng lớn hơn 64KB – HUGE: Mã lệnh và dữ liệu nằm trên nhiều segment; dữ liệu có thể chứa các mảng lớn hơn 64KB bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 15 Khung chương trình assembly (tt) Chỉ thị .STACK – Cú pháp: .STACK n – Khai báo dùng để dành ra một vùng nhớ dùng làm stack (chủ yếu phục vụ cho chương trình con), thông thường ta chọn khoảng 256 byte là đủ để sử dụng – Nếu không khai báo thì chương trình dịch tự động cho kích thước stack là 1 KB: Chỉ thị .DATA – Bắt đầu khai báo đoạn dữ liệu chứa các biến và hằng trong chương trình – Xem công thức khai báo dữ liệu Chỉ thị .CODE – Đoạn mã bắt đầu bằng một chương trình chính và có thể có các lệnh gọi chương trình con (CALL) – Một chương trình chính hay chương trình con bắt đầu bằng lệnh PROC và kết thúc bằng lệnh ENDP (đây là các lệnh giả của chương trình dịch). Trong chương trình con, ta sử dụng thêm lệnh RET để trả về địa chỉ lệnh trước khi gọi chương trình con. bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 16
  9. Khung chương trình assembly (tt) Chỉ thị ENDP – Báo cho Assembler biết điểm kết thúc 1 thủ tục có tên là MAIN Chỉ thị END – Báo cho Assembler biết điểm kết thúc chương trình chính với nhãn lệnh đâu tiên trong modul chương trình chính là MAIN bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 17 Khung chương trình assembly (tt) Trường hợp đoạn mã, đoạn dữ liệu, stack gộp chung vào 1 segment duy nhất Đoạn khai báo dữ liệu Chương trình chính Định nghĩa chương trình con nếu có ở đây bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 18
  10. Cấu trúc 1 dòng lệnh Assembly Nhãn Mã lệnh Toán hạng Chú thích START: MOV AH, 10h ; Đưa giá trị 10h vào AH Nhãn: Dài tối đa 31 ký tự, không được bắt đầu bằng ký tự số, không chứa dấu cách trống Mã lệnh (Op-code): Là các chữ viết tắt gợi nhớ chỉ các lệnh của BXL Các toán hạng (Operands): Báo cho BXL biết tìm toán hạng ở đâu Chú thích: Phải đứng sau dấu chấm phẩy (;) và kết thúc bởi dấu xuống dòng bangtqh@utc2.edu.vn 19 Khai báo biến Khai báo biến để assembler cung cấp một địa chỉ xác định trong bộ nhớ. – DB (define byte) – DW (define word) – DD (define double word) Ví dụ A1 DB 1 ;khai báo 1 biến A1 dài 1 byte, giá trị =1 A2 DB ? ;khai báo 1 biến A2 dài 1 byte A3 DB ‘P’ ;khai báo 1 biến A3 kiểu ký tự A4 DW 1 ;khai bao 1 biến dài 2 byte, giá trị =1 A5 DB 1,2,3 ;khai báo mảng 3 phần tử giá trị = 1,2,3 A6 DB 10 DUP (0) ;mảng 10 phẩn tử giá trị 0 bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 20
  11. Khai báo biến Lưu ý: Đối với các biến có độ lớn nhiều hơn 1 byte, byte thấp sẽ chứa ở ô nhớ có địa chỉ thấp và byte cao sẽ chứa ở ô nhớ có địa chỉ cao. – Ví dụ: VarA DW 1234h – Nếu VarA được cấp ở địa chỉ 1000h thì • Địa chỉ 1001h chứa byte 34h • Địa chỉ 1002h chứa byte 12h bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 21 Khai báo hằng Các hằng khai báo trong chương trình hợp ngữ bằng lệnh giả. Hằng có thể ở dạng số, ký tự hay chuỗi. VD: A12 EQU 10 A13 EQU 'AAA' ;Sau khi sử dụng khai báo trên, nếu ta dùng lệnh: MOV AH, A12 ;thì AH = 10h ;Nếu khai báo tiếp A14 DB ‘B’, A13 ;thì chuỗi A14 có giá trị gán ban đầu là 'BAAA'. bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 22
  12. Các toán tử trong Assembly Toán tử số học Toán tử logic Toán tử quan hệ Toán tử cung cấp thông tin Toán tử thuộc tính bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 23 Toán tử số học VD: MOV AH, (5+1)*7/2 ;AH← 21 MOV AH, 00010110b shl 2 ;AH← 01011000b MOV AH, 00010110b shr 2 ;AH← 00000101b MOV AH, 100 mod 3 ;AH←1 bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 24
  13. Các toán tử trong Assembly (tt) Toán tử logic – Gồm các toán tử AND, OR, NOT, XOR Toán tử quan hệ – So sánh 2 biểu thức và trả về giá trị True (-1) nếu thỏa mãn; False (0) nếu không thỏa mãn bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 25 Toán tử cung cấp thông tin SEG – Cú pháp: SEG bt trong đó: bt có thể là biến, nhãn hay các toán hạng bộ nhớ – Công dụng: trả về địa chỉ segment của bt OFFSET – Cú pháp: OFFSET bt trong đó: bt có thể là biến, nhãn hay các toán hạng bộ nhớ – Công dụng: trả về địa chỉ offset của bt Toán tử chỉ số [ ] – Dùng lấy phần tử chỉ số i đối với biến dạng mảng ví dụ: Tenmang[i] – Dùng để xác định giá trị tại một ô nhớ có địa chỉ lưu trong thanh ghi (vd: [BX] Toán tử (:) – segment override operator – Quy định tính địa chỉa đối với segment được chỉ định (các thanh ghi đoạn ES, SS, DS, CS bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 26
  14. Toán tử cung cấp thông tin (tt) Toán tử TYPE – Cú pháp TYPE bt – Cho phép xác định kiểu của biểu thức bt. • Nếu bt là biến trả về số byte (1, 2, hoặc 4) • Nếu bt là nhãn trả về 0FFFh nếu nhãn NEAR, 0FFFEh nếu là nhãn FAR • Nếu bt là hằng trả về 0 Toán tử LENGTH – Cú pháp LENGTH bt – Trả về số phần tử của bt (tính theo byte, word, hoặc dword) Toán tử SIZE – Trả về tổng số byte đã cấp cho một đối tượng bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 27 Toán tử thuộc tính PTR – Cú pháp: PTR bt – có dạng BYTE hoặc WORD nếu bt là toán hạng bộ nhớ – có dạng NEAR hoặc FAR nếu bt là nhãn – Ví dụ: A DW 100 DUP(?) B DD ? ; Đưa byte đầu tiên trong mảng A vào thanh ghi AH MOV AH, BYTE PTR A ; Đưa 2 byte thấp trong biến B vào thanh ghi AX MOV AX, WORD PTR B bangtqh@utc2.edu.vn Chương 6 - Lập trình hợp ngữ 28
  15. Các mode địa chỉ toán hạng Toán hạng có thể là: – Một giá trị cụ thể – Nội dung của thanh ghi – Nội dung của ngăn nhớ – Nội dung của cổng vào ra Mode địa chỉ là cách thức địa chỉ hóa trong lệnh để xác định toán hạng bangtqh@utc2.edu.vn 29 Các mode địa chỉ toán hạng Mode địa chỉ tức thì Mode địa chỉ trực tiếp Mode địa chỉ gián tiếp Mode địa chỉ thanh ghi Mode địa chỉ gián tiếp qua thanh ghi Mode địa chỉ dịch chuyển Mode địa chỉ stack bangtqh@utc2.edu.vn 30
  16. Mode địa chỉ tức thì Toán hạng là một phần của lệnh Toán hạng nằm ngay trong trường địa chỉ Chỉ có thể là toán hạng nguồn Truy nhập toán hạng rất nhanh Ví dụ: ADD AX, 10 bangtqh@utc2.edu.vn 31 Mode địa chỉ gián tiếp Toán hạng là nội dung của ngăn nhớ có địa chỉ nằm trong một ngăn nhớ khác, ngăn nhớ khác đó được thể hiện trong lệnh Vùng nhớ có thể được tham chiếu là lớn Có thể gián tiếp nhiều lần CPU phải thực hiện tham chiếu bộ nhớ nhiều lần để tìm toán hạng → chậm Ví dụ: ADD AH, [a] bangtqh@utc2.edu.vn 32
  17. Sơ đồ mode địa chỉ gián tiếp LÖnh M· lÖnh §Þa chØ Bé nhí §Þa chØ cña t/h¹ng To¸n h¹ng bangtqh@utc2.edu.vn 33 Mode địa chỉ thanh ghi Toán hạng là nội dung của một thanh ghi Số lượng thanh ghi có hạn Trường địa chỉ nhỏ (chỉ cần ít bit) – Độ dài lệnh ngắn hơn – Nhận lệnh nhanh hơn Không tham chiếu bộ nhớ Truy nhập toán hạng nhanh Tăng số lượng thanh ghi → tăng tốc độ Ví dụ: ADD AL, AH bangtqh@utc2.edu.vn 34
  18. Sơ đồ mode địa chỉ thanh ghi Vị trí của toán hạng chính là các thanh ghi của BXL – VD: MOV DS, AX LÖnh M· lÖnh Tªn thanh ghi TËp thanh ghi To¸n h¹ng bangtqh@utc2.edu.vn 35 Mode địa chỉ gián tiếp qua thanh ghi Toán hạng là ngăn nhớ có địa chỉ nằm trong một thanh ghi Thanh ghi này được gọi là thanh ghi con trỏ Vùng nhớ có thể được tham chiếu là lớn: 2n, trong đó n là độ dài (bit) của thanh ghi Ví dụ: SUB AL, [BX] bangtqh@utc2.edu.vn 36
  19. Sơ đồ mode gián tiếp qua thanh ghi LÖnh M· lÖnh Tªn thanh ghi Bé nhí TËp thanh ghi §Þa chØ cña t/h¹ng To¸n h¹ng bangtqh@utc2.edu.vn 37 Mode địa chỉ dịch chuyển Kết hợp hai mode: – Mode gián tiếp qua thanh ghi – Mode trực tiếp Trường địa chứa hai thành phần: – Tên một thanh ghi – Một hằng số Địa chỉ toán hạng = ND thanh ghi = hằng số Ví dụ: ADD AL, [SI + 50] bangtqh@utc2.edu.vn 38
  20. Sơ đồ mode địa chỉ dịch chuyển LÖnh M· lÖnh Register R Address A Bé nhí TËp thanh ghi + §Þa chØ cña t/h¹ng To¸n h¹ng bangtqh@utc2.edu.vn 39 Mode địa chỉ stack Toán hạng được ngầm hiểu là ngăn nhớ đỉnh ngăn xếp Ví dụ: PUSH AX LÖnh M· lÖnh NgÇm hiÓu Ng¨n nhí ®Ønh stack bangtqh@utc2.edu.vn 40
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2