75. WAIT – Wait for TEST or INTR Signal (chờ tớn hiệu từ chõn TEST hoặc INTR).
2.8.3. KHUễN DẠNG CỦA CHƯƠNG TRèNH HỢP NGỮ
Như chỳng ta đó biết cú hai loại tập tin thực hiện được là .EXE và .COM. - Chương trỡnh .EXE là một thủ tục xa (Far Procedure), cú thểđược gọi từ
một đoạn khỏc. Với chương trỡnh .EXE cú thể được định nghĩa 4 đoạn khỏc nhau: Đoạn lệnh (code), đoạn dữ liệu (data), đoạn ngăn xếp (stack) và đoạn thờm (extra).
- Khỏc với chương trỡnh .EXE chương trỡnh .COM là một thủ tục gần (Near Procedure), chỉ gọi được từ bờn trong đoạn lệnh và chỉ cú thểđược
định nghĩa với duy nhất một đoạn lệnh, do đú phải đặt đoạn dữ liệu và ngăn xếp vào bờn trong đoạn lệnh này.
PSP100h 100h 100h 100h PSP SS CS DS ES Stack ChƯơng trình ChƯơng trình 2.8.3.1. Chương trỡnh .EXE
Khi một chương trỡnh .EXE được nạp vào bộ nhớ, DOS sẽ tạo ra một vựng gồm 256 byte gọi là đoạn mở đầu của chương trỡnh (PSP), dựng để
chứa cỏc thụng tin liờn quan đến việc thực hiện chương trỡnh. Vựng PSP nằm ngay trước phần mó lệnh. Cỏc thụng số liờn quan đến chương trỡnh cũng
được đưa vào DS, ES. Vỡ vậy DS và ES khụng chứa địa chỉđoạn dữ liệu, do
đú phải đặt thanh ghi DS để nú chứa địa chỉ đoạn dữ liệu bằng cỏc lệnh sau
đõy:
MOV AX, data MOV DS, AX
Khung cho một chương trỡnh .EXE cú dạng sau:
TITLE Tờn_chương_trỡnh COMMENT *
Bắt đầu của một khối chỳ thớch *
;Khai bỏo đoạn stack stack SEGMENT STACK
;Khai bỏo kớch thước Stack stack ENDS
;Khai bỏo đoạn dữ liệu data SEGMENT
;Định nghĩa cỏc dữ liệu data ENDS
;Khai bỏo đoạn mó code SEMENT
ASSUME CS:code, DS:data Start:
;Cỏc lệnh code ENDS
END Start
Nhón Start là nơi chứa địa chỉ đầu tiờn mà CPU sẽ thực hiện, chỉ thị
END sẽ kết thỳc chương trỡnh
Vớ dụ: Viết chương trỡnh .EXE in ra màn hỡnh dũng chữ “DHKTCN”. Trước hết ta sẽđưa ra một số hàm ngắt của INT 21H và INT 20H
Hàm 1 của ngắt INT 21H: Đọc một ký tự từ bàn phớm.
Vào: AH=1
Ra: AL=mó ASCII củ ký tự
AL=0 khi ký tự gừ vào là cỏc phớm chức năng
Hàm 2 của ngắt INT 21H: Hiện một ký tự lờn màn hỡnh. Vào: AH=2 DL=mó ASCII của ký tự cần hiển thị Hàm 9 của ngắt INT 21H: Hiện chuỗi ký tự với $ ở cuối lờn màn hỡnh. Vào: AH=9 DX=địa chỉ lệch của chuỗi ký tự
Hàm 4CH, ngắt INT 21H Kết thỳc chương trỡnh loại .EXE hoặc .COM
Vào: AH=4CH
Ngắt INT 20H dành riờng để kết thỳc chương trỡnh dạng .COM
Chương trỡnh được viết như sau:
TITLE VIDU_EXE COMMENT *
in ra man hinh dong chu DHKTCN Chuong trinh thuoc dang .EXE
* stack SEGMENT STACK
DB 20 DUP(‘STACK’) stack ENDS data SEGMENT STRING DB ‘DHKTCN!$’ data ENDS code SEGMENT
ASSUME CS:code, DS:data Start:
;Dat thanh ghi DS MOV AX, data MOV DS, AX ;In ra man hinh
MOV AH, 9
LEA DX, STRING ;chuyen dia chi ;lech cua xau vao DX
INT 21h MOV AH, 4Ch INT 21h code ENDS END Start Trong chương trỡnh trờn phần chỉ thị:
stack SEGMENT STACK
DB 20 DUP(‘STACK’) stack ENDS
Là phần khai bỏo đoạn ngăn xếp cú tờn là STACK. Ngăn xếp cú kớch thước là 20x5=100 byte và lỳc khởi đầu được lấp đầy bằng từ STACK.
data SEGMENT
STRING DB ‘DHKTCN!$’ data ENDS
Là phần khai bỏo đoạn dữ liệu cú tờn là data, đang chứa xõu STRING là dũng chữ “DHKTCN!” cần in ra màn hỡnh. Xõu này kết thỳc bởi ký tự $
để bỏo cho DOS biết là đó đến cuối xõu.
Đoạn chương trỡnh được bao quanh bởi cỏc chỉ thị sau:
code SEGMENT
ASSUME CS:code, DS:data ...
code ENDS
Trong đú chỉ dẫn ASSUME bỏo cho Assembler biết rằng thanh ghi CS trỏđến đoạn lệnh, thanh ghi DS trỏđến đoạn dữ liệu.
Trong chương trỡnh trờn cú sử dụng ngắt 21h (xem phần phụ lục A trang 320 – Kỹ thuật vi xử lý của Văn Thế Minh). Trong đú hàm 9 của INT 21h được dựng để in xõu cú địa chỉ đặt trong thanh ghi DS:DX ra màn hỡnh, hàm 4Ch để kết thỳc chương trỡnh và trở về DOS.