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

Bài giảng Cấu trúc máy tính: Chương 5 - Hoàng Văn Hiệp

161 22 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

Thông tin cơ bản

Định dạng
Số trang 161
Dung lượng 752,75 KB

Nội dung

Bài giảng Cấu trúc máy tính - Chương 5: Lập trình hợp ngữ với 8088 trình bày các nội dung: Mở đầu về lập trình hợp ngữ; các cấu trúc lập trình với hợp ngữ; các lệnh logic, lệnh dịch và lệnh quay; ngăn xếp và thủ tục; các lệnh nhân, chia; các lệnh thao tác chuỗi. Mời các bạn cùng tham khảo nội dung chi tiết.

Cấu trúc máy tính Chƣơng LẬP TRÌNH HỢP NGỮ VỚI 8088 516 Nội dung chƣơng 5.1 Mở đầu lập trình hợp ngữ 5.2 Các cấu trúc lập trình với hợp ngữ 5.3 Các lệnh logic, lệnh dịch lệnh quay 5.4 Ngăn xếp thủ tục 5.5 Các lệnh nhân, chia 5.6 Các lệnh thao tác chuỗi 5.7 Một số ví dụ 517 5.1 Mở đầu lập trình hợp ngữ 10 11 Các loại ngôn ngữ lập trình Cú pháp hợp ngữ Dữ liệu chƣơng trình Khai báo biến Khai báo Một số lệnh Cấu trúc chƣơng trình Chƣơng trình EXE COM Vào-ra đơn giản Các ví dụ Dịch chạy chƣơng trình 518 Các loại ngơn ngữ lập trình  Ngôn ngữ máy:    Chỉ đƣợc biểu diễn số nhị phân Bộ vi xử lý hiểu đƣợc chƣơng trình mã máy Con ngƣời khó khăn để tạo lập hay đọc hiểu chƣơng trình ngôn ngữ máy  Hợp ngữ (Assembly Language):    Là ngơn ngữ lập trình bậc thấp (gần ngơn ngữ máy nhất) Đƣợc xây dựng sở ký hiệu tập lệnh vi xử lý tƣơng ứng Phụ thuộc hoàn toàn vào vi xử lý cụ thể  Ngơn ngữ lập trình bậc cao:   Gần với ngôn ngữ tự nhiên Đƣợc xây dựng độc lập với cấu trúc máy tính 519 Lập trình với hợp ngữ  Ƣu điểm:    Can thiệp sâu vào cấu trúc hệ thống Hiểu sâu hệ thống Chƣơng trình mã máy tƣơng ứng ngắn hơn, thƣờng nhanh tốn nhớ  Nhƣợc điểm:   Khó học gần với mã máy Chƣơng trình nguồn dài, khơng thích hợp để xây dựng chƣơng trình lớn  Kết hợp ngơn ngữ lập trình bậc cao với hợp ngữ 520 Chƣơng trình dịch hợp ngữ  Đƣợc gọi ASSEMBLER  Một số chƣơng trình dịch hợp ngữ cho IBM-PC:  MASM – Microsoft Marco Assembler:  Các tệp: MASM.EXE, LINK.EXE, EXE2BIN.EXE  TASM – Turbo Assembler:  Các tệp: TASM.EXE, TLINK.EXE 521 Các bƣớc lập trình      Bƣớc 1: Phát biểu toán Bƣớc 2: Xây dựng thuật giải Bƣớc 3: Viết mã chƣơng trình Bƣớc 4: Dịch sửa lỗi cú pháp Bƣớc 5: Chạy thử hiệu chỉnh chƣơng trình 522 Các cấu trúc lập trình  Cấu trúc  Cấu trúc rẽ nhánh  Cấu trúc lặp 523 Cú pháp hợp ngữ  Chƣơng trình hợp ngữ gồm dịng lệnh, lệnh viết dịng, dịng là:   Lệnh vi xử lý (instruction) Chỉ dẫn chƣơng trình dịch ASSEMBLER  Các lệnh hợp ngữ không phân biệt chữ hoa, chữ thƣờng  Khi dịch thành mã máy có lệnh vi xử lý đƣợc dịch  Cấu trúc dòng lệnh : Tên ( Name Thao tác Operation Tốn hạng Operand Chú thích Comment )  Giữa trƣờng phải có dấu cách (hoặc TAB)  Ví dụ: MAIN PROC BAT_DAU: MOV CX, 50 ; khoi tao bo dem 524 Ý nghĩa trƣờng lệnh  Trƣờng tên:   Sử dụng cho: nhãn lệnh, tên thủ tục, tên biến Quy ƣớc đặt tên: dài từ đến 31 ký tự, cho phép sử dụng:  Chữ (không phân biệt chữ hoa chữ thƣờng)  Chữ số (không đƣợc dùng làm ký tự đầu tiên)  Các ký tự khác: ?, @, $, %, (dấu đƣợc dùng ký tự đầu tiên) 525 Ví dụ  Lƣu kí tự 'A' vào đầu chuỗi STRING2 MOV MOV LEA CLD MOV MOV REP AX, @DATA ES, AX DI, STRING2 CX, AL, 'A' STOSB ; ES trỏ đến đoạn liệu DATA ; ES:DI trỏ đến đầu chuỗi STRING2 ; Xóa cờ hƣớng ; Số kí tự cần lƣu ; Kí tự cần lƣu vào chuỗi ; Lặp lƣu lần kí tự 'A' vào STRING2 662 Ví dụ  Nhập kí tự từ bàn phím lƣu vào chuỗi STRING nhập đủ 20 kí tự gặp phím ENTER MOV MOV LEA CLD MOV XOR MOV DocKiTu: INT CMP JZ STOSB INC LOOP DungNhap: AX, @DATA ES, AX DI, STRING CX, 20 BX, BX AH, 21h AL, 13 DungNhap BX DocKiTu ; ES trỏ đến đoạn liệu DATA ; ES:DI trỏ đến đầu chuỗi STRING ; Xóa cờ hƣớng ; Số kí tự tối đa đƣợc nhập từ bàn phím ; Khởi tạo số kí tự đƣợc nhập ban đầu = ; Hàm nhập kí tự từ bàn phím ; Nhập kí tự  AL chứa mã ASCII kí tự ; Là phím ENTER ? ;  Dừng nhập ; Nếu khơng phải lƣu AL vào chuỗi STRING ; Tăng số đếm số kí tự đƣợc nhập ; Lặp lại (tối đa 20 lần) 663 Nạp kí tự chuỗi  Lệnh: LODSB   (Load String Byte into AL) Chuyển phần tử (1 byte) đƣợc trỏ DS:SI chuỗi nguồn vào ghi AL Sau thực hiện:  SI tăng thêm cờ hƣớng DF = (dùng lệnh CLD)  SI giảm cờ hƣớng DF = (dùng lệnh STD)  Lệnh: LODSW   (Load String Word into AX) Chuyển phần tử (2 byte) đƣợc trỏ DS:SI chuỗi nguồn vào ghi AX Sau thực hiện:  SI tăng thêm cờ hƣớng DF = (dùng lệnh CLD)  SI giảm cờ hƣớng DF = (dùng lệnh STD) 664 Ví dụ  Giả sử STR1 STR2 chuỗi có độ dài 40 kí tự Viết đoạn chƣơng trình chuyển kí tự chữ hoa từ STR1 sang STR2 MOV MOV MOV LEA LEA CLD MOV XOR VongLap: LODSB CMP JB CMP JA STOSB INC LapTiep: LOOP AX, @DATA DS, AX ES, AX SI, STR1 DI, STR2 CX, 40 BX, BX ; khởi tạo DS ; ES trỏ đến đoạn liệu DATA ; SI trỏ đến chuỗi nguồn STR1 ; DI trỏ đến chuỗi đích STR2 ; Xóa cờ hƣớng ; Số kí tự STR1 cần xét (độ dài xâu STR1) ; Khởi tạo số kí tự thực đƣợc chuyển ban đầu = BX ; Nạp kí tự STR1 vào AL ; Nếu AL < 'A'  khơng phải chữ hoa ; xét kí tự ; Nếu AL > 'Z'  khơng phải chữ hoa ; xét kí tự ; Nếu AL chữ hoa cất vào chuỗi STR2 ; Tăng số đếm số chữ hoa VongLap ; Lặp lại, xét kí tự STR1 AL, 'A' LapTiep AL, 'Z' LapTiep 665 Tìm kí tự chuỗi  Lệnh: SCASB   (Scan String Byte) Trừ thử nội dung AL cho byte đích đƣợc trỏ ES:DI, không thay đổi giá trị AL mà cập nhật cờ Sau thực hiện:  DI tăng thêm cờ hƣớng DF = (dùng lệnh CLD)  DI giảm cờ hƣớng DF = (dùng lệnh STD)  Lệnh: SCASW   (Scan String Word) Trừ thử nội dung AX cho word đích đƣợc trỏ ES:DI, khơng thay đổi giá trị AX mà cập nhật cờ Sau thực hiện:  DI tăng thêm cờ hƣớng DF = (dùng lệnh CLD)  DI giảm cờ hƣớng DF = (dùng lệnh STD) 666 Ví dụ  Cho chuỗi đƣợc khai báo nhƣ sau: DATA STRING1 DB 'ABC'  Khảo sát đoạn chƣơng trình sau: MOV MOV CLD LEA MOV SCASB SCASB AX, @DATA ES, AX DI, STRING1 AL, 'B' 667 Ví dụ (tiếp) Trƣớc thực lệnh SCASB DI STRING1 'A' 'B' 'C' Offset AL ZF 'B' ? (Không xác định) Sau thực lệnh SCASB thứ DI AL STRING1 'A' 'B' 'C' Offset 'B' 'A' 'B' 'C' Offset (Không thấy) Sau thực lệnh SCASB thứ DI AL STRING1 ZF 'B' ZF (Tìm thấy) 668 Ví dụ  Tìm chữ 'A' chuỗi STRING2 có độ dài 40 kí tự  Đoạn chƣơng trình: MOV MOV CLD LEA MOV MOV REPNE AX, @DATA ES, AX DI, STRING2 CX, 40 AL, 'A' SCASB ; ES trỏ đến đoạn liệu ; Xóa cờ hƣớng ; ES:DI trỏ đến chuỗi đích STRING2 ; Độ dài chuỗi STRING2 ; AL chứa kí tự cần tìm ; Tìm thấy CX=0  Ra khỏi đoạn chƣơng trình:   Nếu ZF = ES:[DI-1] kí tự 'A' tìm thấy Nếu ZF = chuỗi STRING2 khơng chứa kí tự 'A' 669 So sánh chuỗi  Lệnh: CMPSB   (Compare String Byte) Trừ thử byte địa DS:SI cho byte địa ES:DI, kết không đƣợc lƣu lại mà cập nhật cờ Sau thực hiện:  SI, DI tăng thêm cờ hƣớng DF = (dùng lệnh CLD)  SI, DI giảm cờ hƣớng DF = (dùng lệnh STD)  Lệnh: CMPSW   (Compare String Word) Trừ thử word địa DS:SI cho word địa ES:DI, kết không đƣợc lƣu lại mà cập nhật cờ Sau thực hiện:  SI, DI tăng thêm cờ hƣớng DF = (dùng lệnh CLD)  SI, DI giảm cờ hƣớng DF = (dùng lệnh STD) 670 Ví dụ  Cho chuỗi đƣợc khai báo nhƣ sau: DATA STRING1 STRING2 DB DB 'ABC' 'ACB'  Khảo sát đoạn chƣơng trình sau: MOV MOV MOV CLD LEA LEA CMPSB CMPSB CMPSB AX, @DATA DS, AX ES, AX SI, STRING1 DI, STRING2 671 Ví dụ (tiếp) Trƣớc lệnh CMPSB thứ Sau lệnh CMPSB thứ SI SI ZF STRING1 'A' 'B' 'C' Offset DI ? ZF STRING1 'A' 'B' 'C' Offset DI SF STRING2 'A' 'C' 'B' Offset ? Sau lệnh CMPSB thứ SF STRING2 'A' 'C' 'B' Offset Sau lệnh CMPSB thứ SI ZF STRING1 'A' 'B' 'C' Offset DI ZF STRING1 'A' 'B' 'C' Offset SI DI SF STRING2 'A' 'C' 'B' Offset SF STRING2 'A' 'C' 'B' Offset 672 Tổng kết thao tác chuỗi Lệnh Tốn hạng nguồn Tốn hạng đích Dạng byte Dạng word Chuyển chuỗi DS : SI ES : DI MOVSB MOVSW Lƣu kí tự vào chuỗi AL hay AX ES : DI STOSB STOSW Nạp kí tự chuỗi DS : SI AL hay AX LODSB LODSW Tìm kí tự chuỗi AL hay AX ES : DI SCASB SCASW So sánh chuỗi (Không lưu KQ) DS : SI ES : DI CMPSB CMPSW 673 Nội dung chƣơng 5.1 Mở đầu lập trình hợp ngữ 5.2 Các cấu trúc lập trình với hợp ngữ 5.3 Các lệnh logic, lệnh dịch lệnh quay 5.4 Ngăn xếp thủ tục 5.5 Các lệnh nhân, chia 5.6 Các lệnh thao tác chuỗi 5.7 Một số ví dụ 674 5.7 Một số ví dụ  Bài tập 1:   Đọc chuỗi kí tự từ bàn phím gặp phím ENTER Hiện kí tự vừa nhập theo chiều ngƣợc lại  Bài tập 2:    Nhập nội dung chuỗi STR1 có tối đa 40 kí tự từ bàn phím Q trình nhập kết thúc gặp phím ENTER Duyệt qua chuỗi STR1, chuyển kí tự chữ hoa sang chuỗi STR2 Hiển thị nội dung chuỗi STR2 hình 675 Một số ví dụ (tiếp)  Bài tập 3: Dùng vòng lặp hiển thị hình vẽ sau: * ** *** **** *****  Bài tập 4: Dùng vòng lặp hiển thị hình vẽ sau: * *** ***** ******* ********* 676 ... chƣơng trình Bƣớc 4: Dịch sửa lỗi cú pháp Bƣớc 5: Chạy thử hiệu chỉnh chƣơng trình 52 2 Các cấu trúc lập trình  Cấu trúc  Cấu trúc rẽ nhánh  Cấu trúc lặp 52 3 Cú pháp hợp ngữ  Chƣơng trình hợp ngữ... chƣơng 5. 1 Mở đầu lập trình hợp ngữ 5. 2 Các cấu trúc lập trình với hợp ngữ 5. 3 Các lệnh logic, lệnh dịch lệnh quay 5. 4 Ngăn xếp thủ tục 5. 5 Các lệnh nhân, chia 5. 6 Các lệnh thao tác chuỗi 5. 7 Một... có lỗi ta có file BAITAP.EXE 56 2 Bài tập  Dữ liệu chƣơng trình hợp ngữ đƣợc khai báo dƣới dạng: DATA SEGMENT mem1 dw 50 0 mem2 dw -5 0 vec2 db 10, 20, -1 0, -2 0, -3 0, -4 0 DATA ENDS  Hãy xác định

Ngày đăng: 08/05/2021, 16:37

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w