Cấu trúc lặp

Một phần của tài liệu BÀI GIẢNG KỸ THUẬT VI XỬ LÝ (Trang 45 - 46)

DIV nguồn (Unsigned Divide)

3.4.3. Cấu trúc lặp

Cấu trúc For ... do

Đây là vòng lặp với số lần lặp n biết trước. Ban đầu biến chỉ số lần lặp k được gán bằng khơng, chừng nào nó cịn nhỏ hơn n thì thực hiện lặp lại công việc (cv), k được tăng 1 sau mỗi lần thực hiện cv.

Trong sơ đồ bên, ta có thể đặt biến chỉ số k=n và kiểm tra xem sau mỗi lần lặp (thực hiện cv) thì k>0? Sẽ cịn lặp khi biểu thức so sánh này là đúng, tất nhiên k sẽ được giảm 1 sau mỗi lần lặp. Điều này hoàn toàn phù hợp với sự làm việc của lệnh LOOP mà chúng ta đã biết.

Ví dụ: Hiển thị lên màn hình 80 dấu * trên một dịng

Mov ah, 2 ; Dùng hàm 2 của ngắt 21h Mov dl, '*' ; để hiển thị ký tự Mov cl, 80 for: Int 21h Loop for  Cấu trúc While ... do

Đây là vòng lặp với số lần lặp không biết trước. Chừng nào biểu thức điều kiện cịn đúng thì thực hiện lặp lại cơng việc (cv), để đảm bảo cho tính dừng của giải thuật thì cơng việc (cv) phải có sự tác động đến dk dưới hình thức nào đó.

Nhìn vào sơ đồ khối của vòng lặp này ta thấy rất giống với cấu trúc của vòng lặp for - to tuy nhiên ta không thể dùng lệnh LOOP để điều khiển cho vịng lặp này vì lệnh LOOP lặp lại đoạn chương trình do

NHAN chỉ ra với số nguyên lần được xác định trước trong thanh ghi CX. Ta sẽ sử dụng các lệnh nhảy có điều kiện để điều cho vịng lặp này.

Ví dụ: Tính tổng ax = 1+4+7+… Cộng cho đến khi ax>100.

Xor ax, ax ; Ban đầu tổng tích luỹ bằng 0

Mov bx, 1 ; Đặt phần tử đầu tiên vào thanh ghi bx while:

Cmp ax, 100 ; Kiểm tra điều kiện (yêu cầu) của bài toán

ra vào đ s cv dk ra vào đ s cv k<n inc k k=0

Ja End_while ; ax>100 (đúng), ra khỏi cấu trúc (có thể dùng jnbe) Add ax, bx ; ngược lại, cộng tiếp

Add bx, 3 ; chuyển lên phần tử tiếp theo của dãy

Jmp while ; Sau khi cập nhật ax, kiểm tra lại điều kiện của bài toán End_while: ; Ra khỏi cấu trúc

Cấu trúc Repeat … until

Đây là vòng lặp với số lần lặp không biết trước. Thực hiện lặp lại ccông việc (cv) cho đến khi biểu thức điều kiện (dk) đúng. Để đảm bảo cho tính dừng của giải thuật thì cơng việc (cv) phải có sự tác động đến dk dưới hình thức nào đó.

Thực tế, trong nhiều trường hợp cấu trúc while - do và cấu trúc repeat - until có thể thay thế cho nhau được. Sự khác nhau ở chỗ: với cấu trúc repeat - until thì cơng việc được thực hiện ít nhất 1 lần cịn trong cấu trúc while - do thì cơng việc có thể khơng được thực hiện lần nào. Ta sẽ sử dụng các lệnh nhảy có điều kiện để điều cho vịng lặp này.

Ví dụ: Tính tổng ax = 1+4+7+ . . . + (3*(n-1)+1), cộng cho đến khi số hạng trong dãy

trên >100, số hạng này không được cộng vào ax.

Xor ax, ax ; Ban đầu tổng tích luỹ bằng 0

Mov bx, 1 ; Đặt phần tử đầu tiên vào thanh ghi bx repeat:

Add ax, bx ; Cộng vào tổng tích luỹ

Add bx, 3 ; Chuyển lên phần tử tiếp theo của dãy Cmp bx, 100 ; Kiểm tra điều kiện (yêu cầu) của bài toán

Jbe repeat ; nếu chưa thoả mãn thì cộng tiếp số hạng tiếp theo ; Ra khỏi cấu trúc

Một phần của tài liệu BÀI GIẢNG KỸ THUẬT VI XỬ LÝ (Trang 45 - 46)

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

(116 trang)
w