Nhóm lệnh điềukhiển chương trình

Một phần của tài liệu Giáo trình kiến trúc máy tính (Trang 59 - 62)

2.3.5.1 Lnh nhy

Lệnh nhảy không điều kiện: Lệnh này khiến bộ vi xử lý bắt đầu thực hiện một lệnh mới tại địa chỉđược mô tả trong lệnh.

Cấu trúc lệnh: JMP Nhãn

Lệnh mới bắt đầu tại địa chỉ ứng với nhãn. Chương trình dịch sẽ căn cứ vào vị trí nhãn để xác định giá trị dịch chuyển.

Lệnh nhảy có điều kiện: Lệnh này biểu diễn thao tác: nhảy (có điều kiện) tới nhãn, tức là chỉ thực hiện nhảy tới nhãn nếu điều kiện chỉ ra đúng. Nhãn phải nằm cách xa (dịch đi một khoảng) -128.. +127 byte so với lệnh tiếp theo sau lệnh nhảy có điều kiện. Chương trình

dịch sẽcăn cứ vào vị trí của nhãn đểxác định giá trị dịch chuyển. Các lệnh này không tác động đến cờ. Người ta phân biệt các kiểu nhảy có điều kiện:

Nhảy theo kiểu không dấu:

JA/JNBE - Jump if Above/ Jump if Not Below or Equal. Cấu trúc lệnh: JA Nhãn

JNBE Nhãn

JAE/JNB- Jump if Above or Equal/ Jump if Not Below. Cấu trúc lệnh: JAE Nhãn

JNB Nhãn

JB/JNAE- Jump if Below/ Jump if Not Above or Equal. Cấu trúc lệnh: JB Nhãn

JNAE Nhãn. Ví dụ 1:

CMP AL, 10H ; so sánh AL với 10H.

JA MEM1 ; nhảy đến nhãn MEM1 nếu AL cao hơn 10H. JB MEM2 ;nhảy đến nhãn MEM2 nếu AL thấp hơn 10H.

Nhảy theo kiểu có dấu:

JG/JNLE- Jump if Greater than/ Jump if Not Less than or Equal. Cấu trúc lệnh: JG Nhãn

JNLE Nhãn.

JGE/JNL- Jump if Greater than or Equal/ Jump if Not Less than. Cấu trúc lệnh: JGE Nhãn

JNL Nhãn.

JL/JNGE- Jump if Less than/ Jump if Not Greater than or Equal.

JLE/JNG- Jump if Less than or Equal/ Jump if Not Greater than.

Nhảy theo kiểu đơn:

JE/JZ- Jump if Equal/ Jump if Zerọ

JNE/JNZ- Jump if Not Equal/ Jump if Not Zerọ

JC- Jump if Carry

JNC- Jump if Not Carry

JO- Jump if Overflow

JNO- Jump if Not Overflow

JS- Jump if Sign

JP/JPE- Jump if Parity/ Jump if Parity Even (adsbygoogle = window.adsbygoogle || []).push({});

JNP/JPO- Jump if Not Parity/ Jump if Parity Ođ

2.3.5.2 Lnh lp:

Lệnh này dùng để lặp lại đoạn chương trình (bao gồm các lệnh nằm trong khoảng tửnhãn đến hết lệnh LOOP Nhãncho đến khi số lần lặp CX=0. Điều này có nghĩa là trước khi vào vòng lặp, ta phải đưa số lần lặp mong muốn vào thanh ghi CX và sau mỗi lần thực hiện lệnh LOOP Nhãn thì CX tựđộng giảm đi một.

Nhãn phải nằm cách xa (dịch một khoảng) -128 byte so với lệnh tiếp theo sau lệnh LOOP. Lệnh này không tác động đến cờ.

Cấu trúc lệnh: LOOP Nhãn

Ví dụ 2:

XOR AL, Al ; xoá AL

MOV CX, 16 ; số lần lặp đưa vào CX Lap: INC AL ; tăng AL lên 1

LOOP Lap ; lặp lại 16 lần, AL =16.

Lệnh JCXZ- Jump if CX is Zero (nhảy nếu CX = 0). Cấu trúc lệnh: JCXZ Nhãn

Đây là lệnh nhảy có điều kiện tới nhãn nếu nội dung thanh đếm bằng 0 và không có liên hệ gì với cò ZF. Nhãn phải nằm cách xa (dịch đi một khoảng) -128.. +127 byte so với lệnh tiếp theo sau lệnh JCXZ. Chương trình dịch sẽcăn cứ vào vị trí nhãn đểxác định giá trị dịch chuyển.

2.3.5.3 Lnh gọi chương trình con CALL:

Lệnh này dùng để chuyển hoạt động của bộ vi xử lý từ chương trình chính (CTC) sang chương trình con (ctc). Nếu ctc ở cùng một đoạn mã với CTC thì ta có gọi gần. Nếu CTC và ctc nằm trong hai đoạn mã khác nhau thì ta có gọi xạ Gọi gần và gọi xa khác nhau về cách tạo địa chỉ trở về. Địa chỉ trở vềlà địa chỉ tiếp theo ngay sau lệnh CALL. Khi gọi gần thì chỉ cần cất IP của địa chỉ trở về, khi gọi xa thì phải cất cả CS và IP của địa chỉ trở về. Địa chỉ trở vềđược tựđộng cất vào ngăn xếp khi bắt đầu thựuc hiện lệnh gọi và được tựđộng lấy ra khi gặp lệnh trở về RET.

RET - Return from Procedure to Calling Program (Trở về CTC từ ctc).

Cấu trúc lệnh: RET

Khi gặp lệnh trở về RET, vi xử lý kết thúc ctc lấy lại địa chỉ trở về, bao gồm địa chỉ IP (trường hợp gọi gần) hoặc IP và CS (trong trường hợp gọi xa) của lệnh tiếp theo sau lệnh CALL, được đặt trong ngăn xếp.

INT - Interrupt Program Excution (Ngắt, gián đoạn chương trình đang chạy). Cấu trúc lệnh: INT N, N = 0.. FFH

1. SP  SP - 2. {SP}  FR 2. IF  0 (cấm các ngắt khác tác động), TF  0 (chạy suốt). 3. SP  SP - 2, {SP}  CS. 4. SP  SP - 2, {SP}  IP. 5. {N x 4}  IP, {5N x 4 + 2}  CS. Mỗi lệnh ngắt ứng với một chương trình phục vụ ngắt khác nhau có địa chỉ lấy từ bảng véc tơ ngắt. Bảng này gômg 256 vec tơ, chứa địa chỉ của các chương trình phục vụ ngắt tương ứng và chiếm 1 Kb RAM có địa chỉ thấp nhất. Ví dụ như các chương trình phục vụ ngắt của BIOS, của DOS như IỌSYS, MSDOS.SYS.

Ví dụ 3: INT 21H

Một phần của tài liệu Giáo trình kiến trúc máy tính (Trang 59 - 62)