KHUễN DẠNG CỦA CHƯƠNG TRèNH HỢP NGỮ

Một phần của tài liệu Hệ vi điều khiển - Chương 2 pptx (Trang 74 - 78)

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 ca ngt INT 21H: Đọc mt 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 ca ngt INT 21H: Hin mt 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 ca ngt INT 21H: Hin chui ký t vi $ cui lờn màn hỡnh. Vào: AH=9 DX=địa chỉ lệch của chuỗi ký tự

Hàm 4CH, ngt INT 21H Kết thỳc chương trỡnh loi .EXE hoc .COM

Vào: AH=4CH

Ngt INT 20H dành riờng để kết thỳc chương trỡnh dng .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.

2.8.3.2. Chương trỡnh .COM

Chương trỡnh .COM chỉ cú một đoạn duy nhất. Khi chương trỡnh .COM bắt đầu chạy thỡ cả 4 thanh ghi đoạn đều trỏ tới đầu của vựng PSP. Cỏc chỉ thị

cho CPU bắt đầu tạo Offset 100h ngay sau vựng PSP. Vỡ vậy trong chương trỡnh .COM, chỉ dẫn ASSUME phải bỏo cho CPU biết cỏc thanh ghi CS, DS

đều trỏ đến đoạn lệnh, khụng cần tạo ra một ngăn xếp riờng biệt và khụng cần

đặt lại một thanh ghi đoạn nào. Với chương trỡnh .COM chỉ cần cho thanh ghi IP (con trỏ lệnh) chỉ đến địa chỉ đầu tiờn trong đoạn lệnh bằng lệnh chỉ dẫn ORG 100h ngay đầu đoạn lệnh.

Khung cho một chương trỡnh .COM 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 mó code SEGMENT

ASSUME CS:code, DS:code

ORG 100h

Start:

;Cỏc lệnh

code ENDS END Start

Trở lại vớ dụ trờn. Bõy giờ chỳng ta sẽ viết chương trỡnh dạng .COM TITLE VIDU_COM

COMMENT *

in ra man hinh dong chu DHKTCN Chuong trinh thuoc dang .COM

* code SEGMENT

ORG 100h Start:

;In ra man hinh

MOV AH, 9 ;ham cua INT 21h

LEA DX, STRING ;lay dia chi offset

;cua xau INT 21h MOV AH, 4Ch INT 21h STRING DB ‘DHKTCN!$’ code ENDS END Start 2.8.4. CU TRÚC LP TRèNH CƠ BN BNG HP NG2.8.4.1. Cu trỳc tun t

Kiểu cấu trỳc này cỏc lệnh được viết tuần tự, lệnh nọ tiếp lệnh kia. Đõy cũng là cấu trỳc thụng dụng và đơn giản nhất.

Vớ d: Cỏc thanh ghi BX và CX chứa cỏc giỏ trị của biến b và c. Hóy tớnh

giỏ trị của biểu thức a=2(b+c) và lưu kết quả vào AX. XOR AX, AX ;Xoa thanh ghi AX

ADD AX, BX ;cong thanh ghi AX voi b ADD AX, CX ;cong tiep voi c

SAL AX, 1 ;nhan doi ket qua a=2(b+c)-> AX

Một phần của tài liệu Hệ vi điều khiển - Chương 2 pptx (Trang 74 - 78)

Tải bản đầy đủ (PDF)

(82 trang)