Các cấu trúc lập trình cơ bản bằng hợp ngữ

Một phần của tài liệu Bài giảng Vi xử lý 1 - ĐH Sư Phạm Kỹ Thuật Nam Định (Trang 57 - 62)

3.2.1. CÊu tróc tuÇn tù

Cấu trúc tuấn tự là một cấu trúc thông dụng và đơn giản nhất. Trong cấu trúc này các lệnh được sắp xếp tuần tự, lệnh nọ tiếp lệnh kia. Sau khi thực hiện xong lệnh cuối cùng của cấu trúc thì công việc phải làm cũng được hoàn tất.

H×nh 3.1 CÊu tróc tuÇn tù

Ví dụ: Đoạn chương trình sau thực hiện làm cho các led đơn nối với cổng LPT của máy in chớp tắt liên tục

MOV DX,378H ;địa chỉ thanh ghi dữ liệu của cổng máy in LAP:

MOV AL,0 ;xuất không để tắt led OUT DX,AL

CALL Tao_tre ;gọi CTC tạo trễ để mắt quan sát được MOV AL,0FFH ;xuất 0FF để sáng led

OUT DX,AL

CALL Tao_tre ;gọi CTC tạo trễ để mắt quan sát được JMP LAP

3.2.2. Cấu trúc lặp - Cấu trúc lặp FOR - DO

FOR Số lần lặp DO Công việc

Từ ngữ pháp cuả cấu trúc FOR - DO ta thấy ở đây Công việc được thực hiện lặp đi lặp lại tất cả Số lần lặp lại. Điều này hoàn toàn tương đương với việc dùng lệnh LOOP trong hợp ngữ để lặp lại CX lần một công việc nào đó, đương nhiên trước đó ta phải gán số lần lặp cho thanh ghi CX.

Lệnh 1

Lệnh 2

Lệnh N

Khởi đầu bộ đếm

Công việc

Giảm bộ đếm đi 1

So sánh sai

Bộ đếm=0

đúng

Hình 3.2 Cấu trúc lặp FOR – DO VÝ dô:

Hiển thị một dòng kí tự '$' trên màn hình.

Giải

Một dòng màn hình trên máy IBM PC chứa được nhiều nhất là 80 kí tự.

Ta sẽ sử dụng hàm 2 của ngắt 21H để hiển thị 1 kí tự. Ta phải lặp lại công việc này 80 lần bằng lệnh LOOP. Muốn dùng lệnh này, ngay từ đầu ta phải nạp vào thanh ghi CX số lần hiển thị, nội dung của Cx được tự động giảm đi1 do tác động của lệnh LOOP.

MOV CX, 80 ; số lần hiện thị trong cx

MOV AH, 2 ; AH chứa số hiệu hàm hiện thị, MOV DL, '$' ; DL chứa kí tự cần hiện thị,

HIEN: INT 21H ; hiện thị LOOP HIEN ; cả một dòng kí tự.

RA: ... ; lối ra của cấu trúc.

- Cấu trúc lặp WHILE - DO WHILE Điều kiện DO Công việc

Điều kiện

Công việc

sai đúng

Hình 3.3 Cấu trúc lặp WHILE - DO

Từ ngữ pháp của cấu trúc WHILE - DO ta thấy: Điều kiện được kiểm tra đầu tiên. Côg việc được lặp đi lặp lại chừng nào Điều kiện còn đúng. Điều này trong hợp ngữ hoàn toàn tương đương với việc dùng lệnh CMP để kiểm tra Điều kiện và sau đó dùng lệnh nhảy có điều kiện để thoát khỏi vòng lặp.

VÝ dô

Đếm số ký tự đọc được từ bàn phím, khi gặp ký tự CR thì thôi.

Giải

MOV CX,0 ; tổng số ký tự đọc được lúc đầu là 0 MOV AH, 1 ; hàm đọc ký tự từ bàn phím.

TIEP: INT 21H ; đọc 1 ký ự, Al chứa mã ký tự.

CMP AL, 13 ; đọc được CR? ( ENTER )

JE RA ; đúng, ra.

INC CX ; sai, thêm 1 ký tự vào tổng.

JMP TIEP

RA: ; lối ra của cấu trúc.

- Cấu trúc lặp REPEAT – UNTIL REPEAT Công việc UMTIL Điều kiện

Từ ngữ pháp của cấu trúc REPEAT - UNTIL ta thấy: Công việc được thực hiện

đầu tiên. Điều đó có nghĩa là công việc được thực hiện ít nhất một lần . Điều kiện

được kiểm tra sau đó. Công việc được lặp đi lặp lại cho tới Điều kiện được thoả

mãn. Điều này trong hợp ngữ hoàn toàn tương đương với việc dùng lệnh CMP để kiểm tra Điềukiện và sau đó dùng lệnh nhảy có điều kiện để thoát khỏi vòng lặp.

Điều kiện

Công việc

Sai §óng

Hình 3.4 Cấu trúc lặp REPEAT – UNTIL Ví dụ: Đọc ký tự từ bàn phím cho tới khi gặp '$' thì thôi.

Giải: Ví dụ này chỉ làm một phần công việc của ví dụ trước. Tại đây ta chỉ phải đọc các ký tự đọc được.

MOV Ah, 1 ; hàm đọc ký tự bàn phím.

TIEP: INT 21H ; đọc 1 ký tự.

CMP AL, '$' ; đọc được đôla ?

RA: ; lối ra của cấu trúc.

3.2.3. Cấu trúc lựa chọn - CÊu tróc IF – THEN

IF (Điều kiện) THEN (công việc).

Hình 3.5 Cấu trúc lựa chọn IF – THEN

Từ ngữ pháp của cấu trúc IF-THEN ta thấy nếu thoả mãn Điều kiện thì Công việc được thực hiện nếu không Công việc sẽ bị bỏ qua. Điều này tương đương với việc dùng lệnh nhảy có điều kiện để bỏ qua một thao tác náo đó trong chương trình hợp ng÷.

VÝ dô

Gán cho BX giá trị tuyệt đối của AX.

Giải

Để thực hiện phép gán BX  AX ta có thể dùng các lệnh sau:

CMP AX,0 ; AX<0?

JNL GAN ; không, gán luôn.

NEG AX ; đúng. đào dấu, rồi

đúng sai

Điều kiện Công việc

GAN: MOV BX, AX ; lối ra của cấu trúc.

- CÊu tróc IF - THEN – ELSE

IF (ĐiềuKiện) THEN (CôngViệc1) ELSE (CôngViệc2)

Hình 3.5 Cấu trúc lựa chọn IF – THEN– ELSE

Từ ngữ pháp của cấu trúc IF-THEN-ELSE ta thấy nếu thoả mãn Điều kiện thì

Côngviệc1 được thực hiện nếu không thì Côngviệc2 được thực hiện. Điều này tương

đương với việc dùng lệnh nhảy có điều kiện và không điều kiện để nhảy đến các nhãn nào đó trong chương hợp ngữ.

Ví dụ Gán cho CL giá trị bit dấu của AX.

Giải

Ta có thể thực hiện các công việc trên bằng mẩu chương trình sau:

QR AX, AX ; AX>0?.

JNS DG ; đúng.

MOV CL, l ; sai, cho CL  1 rồi

JMP RA ; di ra.

DG: XOR CL, CL ; cho CL  0.

RA: ; lối ra của cấu trúc.

- CÊu tróc CASE CASE Biểuthức Giátrị1: Côngviệc1 Giátrị2: Côngviệc2 . . .

GiátrịN: CôngviệcN END CASE

Điều kiện

Sai §óng

Công việc 1 Công việc 2

Biểuthức

Công việc 1 Công việc 2 Công việc N

Giá trị 1 Giá trị 2 Giá trị N

H×nh 3.6 CÊu tróc CASE

Từ ngữ pháp của cấu trúc ta thấy nếu Biểu thức có Giá trị1 thì Côngviệc1 được thực hiện. nếu Biểu thức có Giá trị2 thì Công việc2 được thực hiện và ... Điều này tương đương với việc dùng các lệnh nhảy có điều kiện và nhảy không điều kiện để nhãy các nhãn nào đó trong chương trình hợp ngữ. Cấu trúc CASE có thể thực hiện bằng các cấu trúc lựa chọn lồng nhau.

VÝ dô

Dùng CX để biểu hiện các giá trị khác nhau của AX theo quy tắc sau:

NÕu AX < 0 th× CX =-1, nÕu AX = 0 th× CX =0, nÕu AX > 0 th× CX =1.

Giải

Ta có thể thực hiện các công việc trên bằng mẫu chương trình sau:

CMP AX, 0 ; Kiểm tra dấu của AX.

JL AM ; AX<0.

JE KHONG ; AX =0.

JG DUONG ; AX > 0.

AM: MOV CX, -1 JMP RA DUONG: MOV CX, 1

JMP RA KHONG: XOR CX. CX

RA: ; lối ra của cấu trúc.

Một phần của tài liệu Bài giảng Vi xử lý 1 - ĐH Sư Phạm Kỹ Thuật Nam Định (Trang 57 - 62)

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

(210 trang)