1. Trang chủ
  2. » Tất cả

kiến trúc máy tính va hợp ngữ chương 10 chương trình con [sinhvienzone.com]

32 1 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 32
Dung lượng 438,75 KB

Nội dung

ne C om Chƣơng STACK & CHƢƠNG TRÌNH CON Si nh Vi en Zo Giới thiệu STACK Một số ứng dụng STACK Cấu trúc CTC Cơ chế làm việc CTC Vấn đề truyền tham số Chƣơng trình gồm nhiều MODULE Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn om GiỚI THIỆU STACK Là phần nhớ, đƣợc tổ chức lƣu trữ liệu theo chế vào sau trƣớc (LIFO) Si  nh Vi en Zo ne C STACK : cấu trúc liệu chiều Các phần tử cất vào lấy theo phƣơng thức LIFO (Last In First Out) Mỗi chƣơng trình phải dành khối nhớ để làm stack khai báo STACK Ví dụ : STACK 100H ; Xin cấp phát 256 bytes làm stack Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn nh Vi en Zo ne C Trong lập trình có cần truy xuất đến phần tử STACK nhƣng không đƣợc thay đổi trật tự STACK Để thực điều ta dùng thêm ghi trỏ BP : trỏ BP đỉnh Stack : MOV BP,SP thay đổi giá trị BP để truy xuất đến phần tử Stack : [BP+2] Si  om LẬP TRÌNH VỚI STACK Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn Phần tử đƣợc đƣa vào STACK lần gọi đáy STACK, phần tử cuối đƣợc đƣa vào STACK đƣợc gọi đỉnh STACK .C om  Khi thêm phần tử vào STACK ta thêm từ đỉnh, lấy phần tử khỏi STACK ta lấy từ đỉnh  địa ô nhớ đỉnh STCAK luôn bị thay đổi nh Vi en Zo ne  Si SS dùng để lƣu địa segemnt đoạn nhớ dùng làm STACK SP để lƣu địa ô nhớ đỉnh STACK (trỏ tới đỉnh STACK) Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn STACK ;AX = D MOV AX,[BP+2] ;AX = C nh Vi en Zo MOV AX,[BP] ne C A,B,C Word MOV BP,SP om THÍ DỤ SP C B A ;AX = A Si MOV AX,[BP+6] D Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn om Để lƣu phần tử vào Stack ta dùng lệnh PUSH Để lấy phần tử từ Stack ta dùng lệnh POP ne C PUSH nguồn : đƣa nguồn vào đỉnh STACK PUSHF : cất nội dung ghi cờ vào STACK Si nh Vi en Zo • nguồn ghi 16 bit hay từ nhớ Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn om Si nh Vi en Zo ne C POP POPF : dùng để lấy phần tử khỏi STACK Cú pháp : POP đích : đƣa nguồn vào đỉnh STACK POPF : cất nội dung đỉnh STACK vào ghi cờ Chú ý : - Ở đích ghi 16 bit (trừ ghi IP) hay từ nhớ Các lệnh PUSH, PUSHF, POP POPF khơng ảnh hƣởng tới cờ Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn .C Khắc phục hạn chế lệnh MOV Ex : MOV CS,DS ; sai PUSH DS POP CS ; nh Vi en Zo ne  om MỘT SỐ ỨNG DỤNG CỦA STACK •Truyền tham số cho chƣơng trình Si • Lƣu tạm thời giá trị ghi hay biến Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn THÍ DỤ nh Vi en Zo ne C om Nhập vào chuổi, in chuổi đảo ngƣợc Ex : nhập : Cong nghe thong tin xuất : int gnoht ehgn gnoC Si  Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn          C ne  Zo  nh Vi en  ; Nhập chuỗi kí tự Khởi động đếm Đọc kí tự WHILE kí tự 13 DO Cất kí tự vào STACK Tăng biến đếm Đọc kí tự END_WHILE ; Hiển thị đảo ngƣợc FOR biến đếm lần DO Lấy kí tự từ STACK Hiển thị END_FOR Chƣơng 10: CHƢƠNG TRÌNH CON Si  om Ví dụ minh họa : dùng STACK thuật toán đảo ngƣợc thứ tự nhƣ sau : SinhVienZone.com https://fb.com/sinhvienzonevn 10 .C om GLOBAL Zo ne THAY THẾ PUBLIC VÀ EXTRN Si nh Vi en Viết chƣơng trình nằm file (2 module) với phân cơng nhƣ sau : Module chƣơng trình (Main.ASM) có nhiệm vụ xác định Offset chuổi ký tự gọi CTC nối chuổi cho kết hình Module CTC (Sub.ASM) làm nhiệm vụ nối chuổi đƣa vào nhớ Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 18 https://fb.com/sinhvienzonevn Ví dụ minh hoạ STACK, CALL/RET : chƣơng trình in số nguyên (16 bit) hình Si nh Vi en Zo ne C om PrintNum10 PROC ; số nguyên N nằm AX PUSH BX CX DX MOV CX, ; so lan push (so ky tu) laysodu: XOR DX, DX ; cho DX = trƣớc chia MOV BX, 10 DIV BX ; số dƣ DX, phần nguyên AX PUSH DX ; lƣu phần dƣ vào stack INC CX CMP AX, ; hết chƣa? JNZ laysodu ; chƣa hết, lấy số dƣ tiếp MOV AH, INSO: POP DX ADD DL, '0' INT 21H LOOP inso POP DX CX BX RET ENDP PrintNum10 Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com https://fb.com/sinhvienzonevn 19  C ne Zo nh Vi en  Cho phép nhiều user tham gia giải chƣơng trình lớn Sửa module cần dịch lại module Mỗi module giải vấn đề  dễ tìm sai sót Si  om CHƢƠNG TRÌNH ĐA FILE Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 20 https://fb.com/sinhvienzonevn .C CHUYỂN GIÁ TRỊ CỦA THAM SỐ TỪ CT GỌI  CT ĐƢỢC GỌI Zo ne  om VẤN ĐỀ TRUYỀN THAM SỐ nh Vi en Có cách truyền tham số Thơng qua ghi Si Thơng qua biến tồn cục Thơng qua STACK Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 21 https://fb.com/sinhvienzonevn om TRUYỀN THAM SỐ THÔNG QUA THANH GHI C • DỄ Zo ne • ĐƠN GiẢN nh Vi en • THƢỜNG ĐƢỢC SỬ DỤNG ĐỐI VỚI NHỮNG CT THUẦN TÚY ASM Si ĐẶT GIÁ TRỊ NÀO ĐÓ VÀO THANH GHI Ở CTCHÍNH VÀ SAU ĐĨ CTC SẼ SỬ DỤNG GIÁ TRỊ NÀY TRONG THANH GHI Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 22 https://fb.com/sinhvienzonevn .C nh Vi en Zo  KHAI BÁO BiẾN TỒN CỤC DÙNG NĨ ĐỂ CHUYỂN CÁC GIÁ TRỊ GiỮA CT GỌI VÀ CT ĐƢỢC GỌI ne  om TRUYỀN THAM SỐ THÔNG QUA BiẾN GLOBAL CÁCH NÀY THƢỜNG ĐƢỢC DÙNG : Si TRONG CT ViẾT THUẦN TÚY BẰNG ASM ViẾT HỖN HỢP GiỮA ASM VÀ NGƠN NGỮ CẤP CAO Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 23 https://fb.com/sinhvienzonevn ne Zo nh Vi en  PHỨC TẠP HƠN DÙNG RẤT NHIỀU KHI ViẾT CHƢƠNG TRÌNH HỖN HỢP GiỮA ASM VÀ NGÔN NGỮ CẤP CAO Si  C om TRUYỀN THAM SỐ QUA STACK Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 24 https://fb.com/sinhvienzonevn .C CŨNG THƠNG QUA CÁC THANH GHI,BỘ NHỚ VÀ STACK ne  om CHUYỂN GIÁ TRỊ TỪ CTCON LÊN CT CHÍNH Si nh Vi en Zo NẾU GIÁ TRỊ TRẢ VỀ LÀ BIT HOẶC 16 BIT (CHO KHAI BÁO CHAR, INT, CON TRỎ GẦN) THÌ GIÁ TRỊ ĐĨ PHẢI ĐƢỢC ĐẶT TRONG THANH GHI AX CỦA HÀM TRƢỚC KHI QUAY VỀ CTCHÍNH Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 25 https://fb.com/sinhvienzonevn ... gian lập trình Si  om GiỚI THIỆU CHƢƠNG TRÌNH CON Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 11 https://fb.com/sinhvienzonevn .C om CẤU TRÚC CỦA CTCON ne TÊNCTC PROC [NEAR|FAR] RET nh Vi en... HỖN HỢP GiỮA ASM VÀ NGÔN NGỮ CẤP CAO Chƣơng 10: CHƢƠNG TRÌNH CON SinhVienZone.com 23 https://fb.com/sinhvienzonevn ne Zo nh Vi en  PHỨC TẠP HƠN DÙNG RẤT NHIỀU KHI ViẾT CHƢƠNG TRÌNH HỖN HỢP GiỮA... MemVar : WORD, Array1 : BYTE , ArrLength :ABS … CODE EXTRN NearProc : NEAR , FarProc : FAR … MOV AX,MemVar MOV BX, OFFSET Array1 MOV CX, ArrLength … CALL NearProc … Chƣơng 10: CHƢƠNG TRÌNH CON

Ngày đăng: 30/01/2020, 21:37