Lệnh nhảy không điều kiện

Một phần của tài liệu Tài liệu GIÁO TRÌNH LẬP TRÌNH HỆ THỐNG docx (Trang 66 - 67)

Cú pháp: JMP Đích : IP ← Đích

Đích: Immed16, Reg16, Mem16

Ý nghĩa: Luôn luôn nhảy đến thực hiện lệnh có địa chỉ là Đích. Phạm vi nhảy là trong

đoạn (near jump).

Ví dụ: Xem đoạn chương trình sau

1. MOV AX, 1

2. JMP cong2 ; nhảy đến lệnh có nhãn cong2 3. cong1: INC AX

4. JMP setAX ; nhảy đến lệnh có nhãn setAX 5. cong2: ADD AX, 2

6. setAX: ………

Trong đoạn chương trình trên, các lệnh luôn được thi hành là 1, 2, 5 và 6. Còn các lệnh 3 và 4 không bao giờ được thi hành.

Các dạng của lệnh JMP:

• JMP SHORT Đích ; (short jump). Nhảy trong phạm vi từ –128 đến +127 byte so với vị trí hiện tại.

Ví dụ: JMP SHORT Calculate

• JMP FAR PTR Đích ; (far jump). Nhảy đến bất kì chỗ nào, có thể khác đoạn.

Ví dụ: JMP FAR PTR Calculate

• JMP <con trỏ 2 byte> ; (near indirect jump). Khi thực hiện, thanh ghi PC sẽ được gán bằng giá trị lưu tại địa chỉ này. Có thể kết hợp dùng với định vị chỉ số.

Ví dụ:có khai báo biến myPointer như sau:

myPointer DW Prepare, Calculate, Check, Output

Xem đoạn lệnh:

MOV BX, 2 ; chỉ số trong mảng con trỏ SHL BX, 1 ; nhân đôi

JMP myPointer[BX] ; nhảy đến Check ...

Prepare: ……. ; công việc 0 ...

Calculate: ……. ; công việc 1 ...

Check: ……. ; công việc 2 – nơi cần nhảy đến ... ;

Output: ……. ; công việc 3

• JMP <con trỏ 4 byte> ; (far indirect jump). Tương tự trường hợp trên, nhưng con trỏ gồm cả segment và offset. Chỉ khác ở khai báo con trỏ • JMP <thanh ghi 2 byte> ; (indirect jump via regs). Nhảy đến địa chỉ lưu trong

thanh ghi AX.

Ví dụ: MOV AX, offset Calculate

JMP AX ; IP ← AX (nhảy đến lệnh có địa chỉ trong AX)

Một phần của tài liệu Tài liệu GIÁO TRÌNH LẬP TRÌNH HỆ THỐNG docx (Trang 66 - 67)