trỡnh cho đến khi CX=0 hoặc ZF=1).
Dạng lệnh:
LOOPNE NHAN LOOPNZ NHAN
Mụ tả: Lệnh này dựng để lặp lại đoạn chương trỡnh (gồm cỏc lệnh nằm trong khoảng từ NHAN đến hết lệnh LOOPNE NHAN hoặc LOOPNZ NHAN) cho đến khi số lần lặp CX=0 hoặc cờ ZF=1. Đ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 CX, và sau mỗi lần lặp thỡ CX tựđộng giảm đi 1.
NHAN phải nằm cỏch xa (dịch đi một khoảng) tối đa -128 byte so với lệnh tiếp theo sau lệnh LOOPNE/LOOPNZ.
Cỏc cờ bị thay đổi: khụng.
Vớ dụ:
MOV AL, AH ;AL=AH
MOV CX, 50 ;nap so lan lap vao CX
LAP:INC AL ;tang AL
COMP AL, 16 ;so sanh AL voi 16
LOOPNE LAP ;lap lai cho den khi AL=16
;hoac CX=0
59.REP – Repeat String Instruction until CX=0 (lặp lại lệnh viết sau đú cho tới khi CX=0). khi CX=0).
Đõy là tiếp đầu ngữ dựng để viết trước cỏc lệnh thao tỏc với chuỗi đữ
liệu mà ta muốn lặp lại một số lần. Số lần lặp phải để trước trong CX. Khi cỏc lệnh này được thực hiện thỡ CX tự động giảm đi 1. Quỏ trỡnh lặp kết thỳc khi CX=0.
Cỏc cờ bị thay đổi: khụng.
Vớ dụ:
REP MOVSB ;lap lai lenh chuyen byte cua
;chuoi toi khi CX=0
60.REPE/REPZ – Repeat String Instruction until CX=0 or ZF=0 (lặp lại lệnh viết sau đú cho tới khi CX=0 hoặc ZF=0). viết sau đú cho tới khi CX=0 hoặc ZF=0).
Đõy là tiếp đầu ngữ dựng để viết trước cỏc lệnh thao tỏc với chuỗi đữ
liệu mà ta muốn lặp lại một số lần. Số lần lặp phải để trước trong CX. Khi cỏc lệnh này được thực hiện thỡ CX tự động giảm đi 1. Quỏ trỡnh lặp kết thỳc khi CX=0 hoặc khi hai phần tử so sỏnh khỏc nhau (ZF=0).
Cỏc cờ bị thay đổi: khụng.
Vớ dụ:
REPE CMPSB ;lap lai lenh so sanh cac byte cua
;chuoi toi khi CX=0 hoac ZF=0
61.REPNE/REPNZ – Repeat String Instruction until CX=0 or ZF=1 (lặp lại lệnh viết sau đú cho tới khi CX=0 hoặc ZF=1). lệnh viết sau đú cho tới khi CX=0 hoặc ZF=1).
Đõy là tiếp đầu ngữ dựng để viết trước cỏc lệnh thao tỏc với chuỗi đữ
liệu mà ta muốn lặp lại một số lần. Số lần lặp phải để trước trong CX. Khi cỏc lệnh này được thực hiện thỡ CX tự động giảm đi 1. Quỏ trỡnh lặp kết thỳc khi CX=0 hoặc khi Acc bằng phần tử của chuỗi (ZF=1).
Cỏc cờ bị thay đổi: khụng.
Vớ dụ:
REPNE SCASB ;lap lai lenh quet cac byte cua
;chuoi toi khi het chuoi (CX=0) hoac ;AL bang mot phan tu cua chuoi
2.3.2.8. Nhúm cỏc lệnh điều khiển, đặc biệt khỏc 62.CALL – Call a procedure (gọi chương trỡnh con) 62.CALL – Call a procedure (gọi chương trỡnh con)
Dạng lệnh: CALL Thủ_tục
Mụ tả: Lệnh này dựng để chuyển hoạt động của vi xử lý từ chương trỡnh chớnh (CTC) sang chương trỡnh con (ctc). Nếu ctc nằm trong cựng một đoạn mó với CTC ta cú gọi gần (near call). Nếu ctc và CTC nằm ở hai đoạn mó khỏc nhau ta cú gọi xa (far call).
- Nếu gọi gần: Lưu vào Stack giỏ trị IP của địa chỉ trở về (vỡ CS khụng
đổi) và cỏc thao tỏc khi gọi ctc diễn ra như sau:
+ Nội dung thanh ghi SP giảm đi 2 byte, SP←SP – 2.
+ Nội dung thanh ghi IP được cất vào ngăn xếp (lưu địa chỉ trở về) {SP}←IP.
+ Địa chỉ lệch của ctc (lờn tới ±32K) được lưu vào thanh ghi IP. + Khi gặp lệnh RET ở cuối ctc thỡ VXL lấy lại địa chỉ trở về IP từ
Stack và tăng SP lờn 2 byte.
- Nếu gọi xa: Lưu vào Stack giỏ trị IP và CS của địa chỉ trở về và cỏc thao tỏc khi gọi ctc diễn ra như sau:
+ Nội dung thanh ghi SP giảm đi 2 byte, SP←SP – 2 và CS được lưu vào ngăn xếp.
+ Nội dung của CS được thay bằng địa chỉđoạn của ctc được gọi. + Nội dung thanh ghi SP lại giảm đi 2 byte và IP được cất vào ngăn
+ Địa chỉ lệch của ctc được lưu vào thanh ghi IP.
+ Khi gặp lệnh RET ở cuối ctc thỡ VXL lấy lại địa chỉ trở về IP từ
Stack và tăng SP lờn 2 byte sau đú tiếp tục lấy lại CS và tăng SP lờn 2 byte.
Cỏc cờ bị thay đổi: AF, CF, OF, PF, SF, ZF.
Vớ dụ:
CALL NEAR CALL FAR