1. Trang chủ
  2. » Công Nghệ Thông Tin

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

31 8 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

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.

KIẾN TRÚC VÀ TỔ CHỨC MÁY TÍNH (Computer Organization and Architecture) Chương Lập trình Hợp ngữ bangtqh@utc2.edu.vn Nội dung Giới thiệu cấu trúc tập lệnh CPU Tập ghi 8086/8088 Các kiểu thao tác tập lệnh Tập lệnh họ 8086/8088 bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 6.1 Giới thiệu tập lệnh CPU Mỗi CPU có tập lệnh xác định Tập lệnh có hàng chục hàng trăm lệnh Intel 8086/8088 có tập lệnh khoảng 115 lệnh chia làm nhóm Mỗi lệnh chuỗi số nhị phân mà CPU hiểu thực thao tác xác định Các lệnh mô tả ký hiệu gợi nhớ Là lệnh hợp ngữ (Assembly) bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ Giản trng thỏi ca Chu k lnh Nhận toán hạng Nhận lệnh Cất toán hạng Nhiều kết Nhiều toán hạng Tính toán địa lệnh Kết thúc lênh, nhận lệnh Giải mà thao tác lệnh Tính toán địa toán hạng Xử lý liệu Tính toán địa toán hạng DL dạng xâu vectơ Khụng kiểm tra ngắt bangtqh@utc2.edu.vn Giản đồ trạng thái chu k lnh Nhận toán hạng Nhận lệnh Cất toán hạng Nhiều kết Nhiều toán hạng Tính toán địa lệnh Giải mà thao tác lệnh Kết thúc lênh, nhận lệnh Tính toán địa toán hạng Xử lý liệu DL dạng xâu vectơ Tính toán địa toán hạng Kiểm tra ngắt Ngắt Không cã ng¾t Có kiểm tra ngắt cuối chu kỳ lệnh bangtqh@utc2.edu.vn 6.2 Tập ghi 8086/8088 Nhóm ghi đa Nhóm ghi đoạn (segment) 8086/8088 có 14 ghi 16 bit chia làm nhóm hình vẽ 8086/8088 có bus địa 20 bit (1MB không gian địa chỉ) sử dụng phương pháp đánh địa phân đoạn (segment addressing) Địa vật lý = địa segment*16 + địa offset bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ Nhóm ghi đa Cịn gọi nhóm ghi cơng dụng chung (General purpose registers) Có thể dùng ½ ghi ghi độc lập 8086/8088 tự động sử dụng số ghi đa dụng vào số mục đích cụ thể bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ Nhóm ghi đoạn CS: chứa địa sở đoạn mã lệnh chương trình chạy DS: chứa địa đoạn vùng liệu chương trình thực ES: (Extra segment) Chứa địa đoạn liệu bổ sung (vùng chứa biến chương trình) SS: Chứa địa nhớ stack chương trình chạy bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ Thanh ghi trỏ số IP: (instruction pointer): đến địa lệnh thi hành do CS trỏ tới Cặp CS:IP chứa địa vật lý lệnh nhớ SP: kết hợp với SS tạo thành cặp SS:SP để trỏ tới địa vùng nhớ stack chương trình SI DI (Source index Destination index): thiết kế chuyên dụng thao tác vận chuyển số liệu Cặp DS:SI trỏ tới liệu nguồn, ES:DI trỏ tới liệu đích bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ Thanh ghi cờ 8086/8088 15 14 13 12 11 10 X X X X OF DF IF TF SF ZF X AF X PF X CF bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 10 Ngắt (nhắc lại) Ngắt chế mà BXL dừng chương trình thi hành để thực công việc khác – Ngắt cứng: thường xuất phát từ thiết bị phần cứng ngoại vi, u cầu CPU giải cơng việc (vd: INT báo cố phần cứng; INT 8: ngắt tín hiệu đồng hồ; INT ngắt bàn phím….v.) – Ngắt mềm: chương trình gọi lệnh INT BXL Số hiệu chương trình số hiệu vector ngắt bảng vector ngắt Chương trình thi hành dịch vụ DOS BIOS Khi gọi ngắt mềm, người lập trình thường phải truyền tham số thơng qua ghi kết thu có ghi nhớ Bảng vector ngắt chiếm 1KB vùng nhớ địa thấp từ 0:0000h đến 0:0400h byte tạo thành vector chứa địa offset (word thấp) địa segment (word cao) – Vd: INT địa 0:0004h, INT địa 0:0008h, INT địa 0:000Ch bangtqh@utc2.edu.vn Chương - 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 nhóm lệ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) điều khiển BXL (HLT,CLC, CLD, NOP, WAIT….) – – – – bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 12 Phân biệt EXE COM File *.COM – Nằm segment size tối đa 64KB – Nạp vào nhớ thực thi hanh file EXE – Khi chạy file COM, DOS tạo vùng nhớ Program Segment Prefix (PSP) dài 256 Byte 0000h chứa thơng tin cần thiết, sau mã lệnh load vào từ vị trí 0100h nạp giá trị vào stack (2 byte), ghi SP trỏ tới 0FFFEh Size thực tế chương trình COM là: 64KB – 256 Byte – byte stack File *.EXE – Nằm nhiều segment khác – Size thường lớn 64KB – Có thể gọi chương trình dạng near far bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 13 Khung chương trình assembly Xét cụ thể chương trình đơn giản Đoạn khai báo liệu Chương trình Đoạn mã chứa lệnh chương trình Chương trình bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 14 Khung chương trình assembly (tt) Chỉ thị MODEL – TINY: Mã lệnh liệu nằm segment – SMALL: Mã lệnh nằm segment; Dữ liệu segment khác – MEDIUM: Mã lệnh nằm nhiều segment; Dữ liệu nằm segment – COMPACT: Mã lệnh nằm segment; Dữ liệu nằm nhiều segment – LARGE: Mã lệnh nằm nhiều segment; Dữ liệu nằm nhiều segment không chứa mảng lớn 64KB – HUGE: Mã lệnh liệu nằm nhiều segment; liệu chứa mảng lớn 64KB bangtqh@utc2.edu.vn Chương - 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 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 đủ để sử dụng – Nếu không khai báo chương trình dịch tự động cho kích thước stack KB: Chỉ thị DATA – Bắt đầu khai báo đoạn liệu chứa biến chương trình – Xem cơng thức khai báo liệu Chỉ thị CODE – Đoạn mã bắt đầu chương trình có lệnh gọi chương trình (CALL) – Một chương trình hay chương trình bắt đầu lệnh PROC kết thúc lệnh ENDP (đây lệnh giả chương trình dịch) Trong chương trình con, ta sử dụng thêm lệnh RET để trả địa lệnh trước gọi chương trình bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 16 Khung chương trình assembly (tt) Chỉ thị ENDP – Báo cho Assembler biết điểm kết thúc thủ tục có tên MAIN Chỉ thị END – Báo cho Assembler biết điểm kết thúc chương trình với nhãn lệnh đâu tiên modul chương trình MAIN bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 17 Khung chương trình assembly (tt) Trường hợp đoạn mã, đoạn liệu, stack gộp chung vào segment Đoạn khai báo liệu Chương trình Định nghĩa chương trình có bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 18 Cấu trúc dịng lệnh Assembly Nhãn Mã lệnh Tố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 bắt đầu ký tự số, không chứa dấu cách trống Mã lệnh (Op-code): Là chữ viết tắt gợi nhớ lệnh BXL Các tốn hạng (Operands): Báo cho BXL biết tìm tốn hạng đâu Chú thích: Phải đứng sau dấu chấm phẩy (;) kết thúc 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 địa xác định nhớ – DB (define byte) – DW (define word) – DD (define double word) Ví dụ A1 A2 A3 A4 A5 A6 DB ;khai báo biến A1 dài byte, giá trị =1 DB ? ;khai báo biến A2 dài byte DB ‘P’ ;khai báo biến A3 kiểu ký tự DW ;khai bao biến dài byte, giá trị =1 DB 1,2,3 ;khai báo mảng phần tử giá trị = 1,2,3 DB 10 DUP (0) ;mảng 10 phẩn tử giá trị bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 20 Sơ đồ mode địa ch giỏn tip Lệnh Mà lệnh Địa Bộ nhớ Địa t/hạng Toán hạng bangtqh@utc2.edu.vn 33 Mode a ghi Toán hạng nội dung ghi Số lượng ghi có hạn Trường địa nhỏ (chỉ cần bit) – Độ dài lệnh ngắn – Nhận lệnh nhanh Không tham chiếu nhớ Truy nhập toán hạng nhanh Tăng số lượng ghi → tăng tốc độ Ví dụ: ADD AL, AH bangtqh@utc2.edu.vn 34 Sơ đồ mode địa ghi Vị trí tốn hạng ghi BXL – VD: MOV DS, AX LÖnh M· lÖnh Tên ghi Tập ghi Toán hạng bangtqh@utc2.edu.vn 35 Mode địa gián tiếp qua ghi Toán hạng ngăn nhớ có địa nằm ghi Thanh ghi gọi ghi trỏ Vùng nhớ tham chiếu lớn: 2n, n độ dài (bit) ghi Ví dụ: SUB AL, [BX] bangtqh@utc2.edu.vn 36 Sơ đồ mode gián tiếp qua ghi LƯnh M· lƯnh Tªn ghi Bộ nhớ Tập ghi Địa t/hạng Toán hạng bangtqh@utc2.edu.vn 37 Mode a ch dch chuyn Kết hợp hai mode: – Mode gián tiếp qua ghi – Mode trực tiếp Trường địa chứa hai thành phần: – Tên ghi – Một số Địa toán hạng = ND ghi = số Ví dụ: ADD AL, [SI + 50] bangtqh@utc2.edu.vn 38 Sơ đồ mode địa dịch chuyển LÖnh M· lÖnh Register R Address A Bé nhí TËp ghi + Địa t/hạng Toán hạng bangtqh@utc2.edu.vn 39 Mode a stack Toán hạng ngầm hiểu ngăn nhớ đỉnh ngăn xếp Ví dụ: PUSH AX LƯnh M· lƯnh Ngầm hiểu bangtqh@utc2.edu.vn Ngăn nhớ đỉnh stack 40 Minh lệnh gọi chương trình bangtqh@utc2.edu.vn 41 Thể Stack Khëi t¹o néi dung stack bangtqh@utc2.edu.vn Sau lƯnh CALL Proc1 Sau lÖnh CALL Proc2 Sau lÖnh RETURN Sau lÖnh CALL Proc2 Sau lÖnh RETURN Sau lÖnh RETURN 42 Một số lệnh assembly Lệnh MOV – Cú pháp: MOV đích, nguồn – Khơng dùng lệnh MOV chuyển trực tiếp liệu ô nhớ mà phải thông qua ghi – Không chuyển trực tiếp liệu vào ghi đoạn (DS, CS, SS, ES) – Không chuyển trực tiếp ghi đoạn Lệnh XCHG: Hoán chuyển nội dung toán hạng – Cú pháp: XCHG dst, src – Không phép dùng lệnh XCHG với ghi đoạn (DS, CS, SS, ES) bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 43 Một số lệnh assembly (tt) Lệnh cộng không nhớ ADD – – – – Cú pháp: ADD dst, src Công dụng: dst ←dst + src Khơng phép cộng ghi đoạn Tốn hạng src ghi nhớ giá trị cụ thể; Toán hạng dst ghi nhớ Lệnh cộng có nhớ ADC – Cú pháp: ADC dst, src – Công dụng: dst ← dst + src + CF – Thường dụng cộng số lớn 16 bit Lệnh tăng INC – Cú pháp: INC dst ;dsc reg mem – Công dụng: dst ←dst +1 bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 44 Một số lệnh assembly (tt) Lệnh giảm DEC – Cú pháp: DEC dst ;dsc reg mem – Công dụng: dst  dst – Lệnh trừ SUB – Cú pháp: SUB dsc, src ;dsc ← dsc - src – src reg, mem immed; dsc reg mem – Không phép trừ ghi đoạn Lệnh trừ có mượn SBB – Cú pháp SBB dsc, src ;dsc dsc – src - CF Lệnh đảo dấu NEG – Cú pháp NEG dsc bangtqh@utc2.edu.vn ;dsc -dsc Chương - Lập trình hợp ngữ 45 Một số lệnh assembly (tt) Lệnh nạp địa thực LEA – Cú pháp: LEA dst, src – Công dụng chuyển địa offset src vào dst – Đích dst thường BX, CX, DX, BP, SI, DI; scr thường tên biến – Tương đương với lệnh: MOV reg16, OFFSET mem16 Lệnh gọi ngắt INT – Cú pháp: INT, – Các ngắt thơng dụng: • 09h • 20h • 21h bangtqh@utc2.edu.vn ngắt bàn phím khỏi chương trình DOS Chương - Lập trình hợp ngữ 46 Các lệnh vào/ra assembly Một số hàm ngắt 21h (DOS) – – – – – Hàm 01h Hàm 02h Hàm 09h Hàm 0Ah … nhập ký tự từ bàn phím in ký tự hình in chuỗi ký tự (kết thúc $) hình nhận chuỗi ký tự từ bàn phím Ví dụ: Viết chương trình nhập ký tự từ bàn phím ký tự vừa nhập – Đưa số hiệu hàm vào AH – Mã ASCII ký tự nhập từ bàn phím lưu AL – Khi in ký tự hình AH chứa số hiệu hàm, DL chứa ký mã ký tự cần in bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 47 Các lệnh vào/ra assembly Giải: Bài tập: Viết chương trình nhập số A, B khoảng 9, in hình tổng số bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 48 Các lệnh vào/ra assembly Chu trình hiển thị chuỗi ký tự lên hình – Bước 1: Khởi tạo đoạn liệu ghi DS MOV AX, @DATA MOV DS, AX – Bước 2: Đưa địa chuỗi cần in vào ghi DX LEA DX, Msg ; lệnh MOV DX, OFFSET Msg – Bước 3: Đặt trị số hàm 09h vào AH MOV AH, 09h – Bước 4: Gọi ngắt 21h INT 21h bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 49 Các lệnh vào/ra assembly Bài tập 1: Viết chương trình hiển thị lên hình Bài tập 2: Viết chương trình nhận vào từ bàn phím ký tự, in hình ký tự dạng chữ in hoa (chương trình có hiển câu thơng báo mời nhập câu thơng báo kết quả) bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 50 Các lệnh vào/ra assembly (tt) Chu trình nhập chỗi ký tự từ bàn phím – Bước 1: Khai báo buffer chứa chuỗi nhập strBuffer DB 40, ?, 40 DUP (?) – Bước 2: Đưa địa buffer vào DX LEA DX, strBuffer; lệnh MOV DX, OFFSET Msg – Bước 3: Đặt trị số hàm 0Ah vào AH MOV AH, 0Ah – Bước 4: Gọi ngắt 21h INT 21h + Thao tác nhập kết thúc phím Enter (mã 0Dh) + strBuffer[1] chứa độ dài chuỗi vừa nhập bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 51 Ví dụ: Nhập họ tên in lời chào hình bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 52 Các lệnh vào/ra assembly (tt) Bài tập 3: Hãy viết chương trình nhập vào từ bàn phím số nguyên nằm khoảng 0…255 Tính in hình Tổng Tích số nguyên Gợi ý: + Nhập xâu strA strB + Tiến hành đổi xâu vừa nhập dạng số + Tính tổng tích số + Đổi chữ số hàng đv, chục, trăm sang dạng ký tự in ký tự hình bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 53 Cấu trúc điều khiển assembly Lệnh nhảy không điều kiện JMP – Cú pháp: JMP – Cơng dụng: Chuyển tới vị trí lệnh xác định CS:IP Các lệnh nhảy có điều kiện – Các lệnh nhảy khơng dấu – Các lệnh nhảy có dấu (khi kết trả số có dấu) – Các lệnh nhảy điều kiện đơn: ĐK nhảy phụ thuộc vào cờ riêng biệt bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 54 Ví dụ lệnh nhảy JMP bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 55 Cấu trúc điều khiển assembly (tt) Lệnh nhảy có điều kiện – Chỉ phép nhảy tới label khoảng [-127, 128] byte IP – Lệnh JA (Jump if above) – Lệnh JAE (Jump if above or equal) – Lệnh JB (Jump if below) – Lệnh JBE (Jump if below or equal) – Lệnh JE (Jump if Equal) – Lệnh JNE (Jump if not Equal) – Lệnh JNA (Jump if not Above) – … (đọc help) Các lệnh nhảy có điều kiện thường dùng sau lệnh so sánh CMP bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 56 Cấu trúc điều khiển assembly (tt) Cấu trúc rẽ nhánh If Then …… CMP Lablel_Bỏ_qua_việc_A …… Label_Bỏ_qua_việc_A: …… Ví dụ: Viết chương trình nhập vào số năm dương lịch Kiểm tra xem năm có phải năm nhuận khơng? bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 57 Cấu trúc điều khiển assembly (tt) Cấu trúc rẽ nhánh If Then Else …… CMP JNE Lablel_việc_B …… JMP Label_next Label_việc_B: …… Label_next: …… Ví dụ: Viết chương trình nhập vào số A B, tìm số vừa nhập bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 58 Cấu trúc điều khiển assembly (tt) Cấu trúc lặp với lệnh LOOP – Thanh ghi CX chứa số lần lặp – Sau lần lặp CX tự động giảm – Cú pháp thường dùng: …… MOV CX, Label_loop: …… LOOP label_loop …… Ví dụ: Viết chương trình in hình 255 ký tự bảng mã ASCII bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 59 Thắc mắc? bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 60 Bài tập Viết chương trình nhập vào từ bàn phím số ngun dương N trong miền 0…255 Hãy xác định xem N có phải số ngun tố hay khơng? Viết chương trình nhập vào từ bàn phím số nguyên dương N Hãy in hình giá trị số miền 0…N dạng: Thập phân, Nhị phân, Hecxa Màn hình chia làm cột, dịng in số theo hệ đếm Hãy viết chương trình nhập vào từ bàn phím xâu ký tự (họ tên người) Hãy chuẩn hóa xâu theo quy tắc: Mỗi từ chữ viết hoa, chữ khác viết thường Giữa từ có dấu cách (20h) Sau chuẩn hóa xong in xâu kết hình bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 61 Bài tập (tiếp) Viết chương trình nhập vào số N, sau nhập tiếp N xâu ký tự Hỏi người dùng muốn in xâu thứ hình? Người dùng điền số thứ tự k xâu thứ k in Viết chương trình nhập độ cao h tam giác Hãy in hình tam giác có dạng sau: h = số hàng bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 62 ... bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 47 Các lệnh vào/ra assembly Giải: Bài tập: Viết chương trình nhập số A, B khoảng 9, in hình tổng số bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 48 Các lệnh vào/ra... Viết chương trình in hình 255 ký tự bảng mã ASCII bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 59 Thắc mắc? bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 60 Bài tập Viết chương trình nhập vào... bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 51 Ví dụ: Nhập họ tên in lời chào hình bangtqh@utc2.edu.vn Chương - Lập trình hợp ngữ 52 Các lệnh vào/ra assembly (tt) Bài tập 3: Hãy viết chương trình nhập vào

Ngày đăng: 20/05/2021, 02:54

Xem thêm:

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN