26
CHƯƠNG 6 : MỘT SỐ CẤU TRÚC VÀ GIẢI THUẬT CĂN BẢN
6.1CẤU TRÚC IF
6.1.1IF Biến-A <= 5 THEN Biến-B:=1 ELSE Biến-B:=0
cmp Biến-A,5 ; So sánh Biến-A với 5
ja L1
mov Biến-B,1 ; Nhỏ hơn hay bằng
jmp L2
L1:
mov Biến-B,0 ; Lớn hơn
L2:
...
6.1.2IF Biến-A <= 5 THEN ..... ELSE Biến-B:=0
cmp Biến-A,5 ; So sánh Biến-A với 5
jbe L1
jmp L2
L1: ; Nhỏ hơn hay bằng
. ;
. ; Kích thước đoạn mã này lớn hơn
. ; 128 byte
.
jmp L3
L2: ; Lớn hơn
mov Biến-B,0
L3:
...
6.2CẤU TRÚC CASE
6.2.1Case Biến-A of 0 : Loại-A:=Loại-A+1;
1 : Loại-B:=Loại-B+1;
2 : Loại-C:=Loại-C+1;
3 : Loại-D:=Loại-D+1;
cmp Biến-A,’9’
ja L2
Mov Loại,0 ; Biến-A <=’9’
jmp L4
L2:
cmp Biến-A,’A’
jae L3
jmp L4
L3: ; Biến-A >=’A’
cmp Biến-A,’Z’
ja L4
Mov Loại,0 ; Biến-A <=’Z’
L4:
...
Chú ý : Để kiểm tra xem một giá trò có thuộc một khoảng cho trước hay không ta có thể dùng giải
thuật sau :
Khoảng cho trước : M1..M2
Giá trò cần kiểm tra : X đặt trong AL ( hoặc AX )
sub AL,M2+1 ; Kết quả âm nếu X <=M2 (1)
add AL,(M2-M1)+1 ; Kết quả âm nếu X < M1 (2)
jnc Không-thuộc-về ; tương đương với JAE
jc Thuộc-về ; tương đương với JB
Để chứng minh, hãy xem ảnh hưởng của các phép tính số học lên các cờ hiệu và tác dụng của cờ
hiệu lên các lệnh chuyển điều khiển có điều kiện.
Nếu X thuộc về M1..M2 thì phép tính (1) phải cho kết quả âm (2) phải cho kết quả dương. Kết quả
cộng hai phần tử, trong đó có một phần tử âm tạo thành một kết quả dương sẽ có bit tràn --> CF = 1
Chỉ thò JB được thực hiện nếu CF = 1
Chỉ thò JAE được thực hiện nếu CF = 0
28
6.2.3Chuyển điều khiển theo nhiều giá trò và cự ly chuyển điều khiển lớn hơn 128
Case-10:
...
jmp End-case
Case-11:
...
jmp End-case
Case-12:
...
End-case:
... 29
6.3CẤU TRÚC FOR
6.3.1FOR Biến-A:=0 TO 100 DO ....
mov Biến-A,0
L1:
...
inc Biến-A
cmp Biến-A,100
ja L2
jmp L1
L2:
...
6.3.2Chỉ thò LOOP <nhãn>
Chỉ thò LOOP <nhãn> thực hiện như sau : trừ cx 1,kiểm tra cx đã bằng 0 chưa, nếu chưa sẽ chuyển
quyền điều khiển đến <nhãn> . Nếu cx = 0 thì tiếp tục làm các lệnh kế tiếp . Dùng chỉ thò LOOP để điều
khiển các vòng lặp làm chương trình của chúng ta trở nên ngắn gọn và thực hiện nhanh hơn. Trong khi
dùng chỉ thò LOOP để điều khiển vòng lặp hãy cẩn thận khi làm thay đổi giá trò của CX .
...
test al,8 ; kiểm tra bit 3 của AL
jz L2
L1: ; Bằng 1
...
jmp L3
L2: ; Bằng 0
...
L3:
6.4.3Kiểm tra nhiều bit đồng thời khác không
...
and al,8 OR 4 ; Xóa các bit khác bit 3 và bit 2
cmp al,8 OR 4 ; Kiểm tra bit 3 và bit 2
jne L2
L1: ; Đồng thời bằng 1
...
jmp L3
L2: ; Có ít nhất 1 bit bằng 0
...
L3:
6.4.4Kỹ thuật nhân và chia trên số nhò phân
Tác vụ nhân và chia thường chiếm nhiều thời gian thực hiện hơn các tác vụ cộng trừ, shift ... Do đó
các chương trình assembler thường cố gắng chuyển các tác vụ nhân chia thành những đoạn chương trình
chỉ gồm các tác vụ cộng trừ và shift, rol ...
Ta có các số tính chất sau :
- Shift left 1 bit trên một giá trò nhò phân cho kết quả tương tự nhân giá trò nhò phân đó cho 2
- Shift right 1 bit trên một giá trò nhò phân cho kết quả tương tự chia giá trò nhò phân đó cho 2
Thí dụ 1 :
Nhân một giá trò với 10 . Dùng quy tắc A*10 = A*8+A*2
mov ax,giá-trò-đầu ;