b) IF_THEN_ELSE IF condition is true
4.1.1 Leơnh AND,OR và XOR
Leơnh AND,OR và XOR thực hieơn các chức naíng đúng như teđn gĩi cụa nĩ . Cú pháp cụa chúng là :
AND destination , source OR destination , source XOR destination , source
Kêt qụa cụa leơnh được lưu trữ trong tốn háng đích do đĩ chúng phại là thanh ghi hoaịc vị trí nhớ . Tốn háng nguoăn là cĩ theơ là haỉng sơ , thanh ghi hoaịc vị trí nhớ . Dĩ nhieđn hai tốn háng đeău là vị trí nhớ là khođng được phép .
Aûnh hưởng đên các cờ :
Các cờ SF,ZF và PF phạn ánh kêt qụa AF khođng xác định
CF=OF=0
Đeơ thay đoơi từng bit theo ý muơn chúng ta xađy dựng tốn háng nguoăn theo kieơu maịt ná ( mask) . Đeơ xađy dựng maịt ná chúng ta sử dúng các tính chât sau đađy cụa các phép tốn AND ,OR và XOR :
b AND 1 = b b OR 0 = b b XOR 0 = b b AND 0 = 0 b OR 1 = 1 b XOR 1 = not b
• Leơnh AND cĩ theơ dùng đeơ xĩa ( clear) tốn háng đích nêu maịt ná baỉng 0
• Leơnh OR cĩ theơ dùng đeơ đaịt ( set) 1 cho tốn háng đích nêu maịt ná baỉng 1
• Leơnh XOR cĩ theơ dùng đeơ lây đạo tốn háng đích nêu maịt ná baỉng 1 . Leơnh XOR cũng cĩ theơ dùng đeơ xĩa noơi dung moơt thanh ghi ( XOR với chính nĩ )
Ví dú : Xố bit dâu cụa AL trong khi các bit khác khođng thay đoơi Giại : Dùng leơnh AND với maịt ná 0111111=7Fh
AND AL,7Fh ; xĩa bit dâu ( dâu + ) cụa AL
Ví dú : Set 1 cho các bit MSB và LSB cụa AL , các bit khác khođng thay đoơi . Giại : Dùng leơnh OR với maịt ná 10000001 =81h
OR AL,81h ; set 1 cho LSB và MSB cụa AL Ví dú : Thay đoơi bit dâu cụa DX
Giại : Dùng leơnh XOR với maịt ná 1000000000000000=8000h XOR DX,8000h
Các leơnh logic là đaịc bieơt cĩ ích khi thực hieơn các nhieơm vú sau :
Đoơi moơt sơ dưới dáng ASCII thành moơt sơ
Giạ sử raỉng chúng ta đĩc moơt ký tự từ bàn phím baỉng hàm 1 ngaĩt 21h . Khi đĩ AL chứa mã ASCII cụa ký tự . Đieău này cũng đúng nêu ký tự đĩ là moơt sơ ( digital character) . Ví dú nêu chúng ta gỏ sơ 5 thì AL = 35h ( ASCII code for 5)
Chương 4 : Các leơnh dịch và quay 47 Đeơ chứa 5 tređn AL chúng ta dùng leơnh :
SUB AL,30h
Cĩ moơt cách khác đeơ làm vieơc này là dùng leơnh AND đeơ xĩa nửa byte cao (high nibble = 4 bit cao ) cụa AL :
AND AL,0Fh
Vì các sơ từ 0-9 cĩ mã ASCII từ 30h-39h , neđn cách này dùng đeơ đoơi mĩi sơ ASCII ra thaơp phađn .
Chương trình hợp ngữ đoơi moơt sơ thaơp phađn thành mã ASCII cụa chúng được xem như bài taơp .
Đoơi chữ thường thành chữ hoa
Mã ASCII cụa các ký tự thường từ a-z là 61h-7Ah và mã ASCII cụa các ký tự hoa từ A-Z là 41h -5Ah . Giạ sử DL chưá ký tự thường , đeơ đoơi nĩ thành chữ hoa ta dùng leơnh :
SUB DL,20h
Nêu chúng ta so sánh mã nhị phađn tương ứng cụa ký tự thường và ký tự hoa thì thây raỉng chư caăn xĩa bit thứ 5 thì sẽ đoơi ký tự thường sang ký tự hoa .
Character Code Character Code
a(61h) 01100001 A (41h) 01000001 b (62h) 01100010 B ( 42h) 01000010 .
.
z ( 7Ah) 01111010 Z ( 5Ah) 01011010
Cĩ theơ xĩa bit thứ 5 cụa DL baỉng cách dùng leơnh AND với maịt ná 11011111= DF h
AND DL,0DFh ; đoơi ký tự thường trong DL sang ký tự hoa
Xĩa moơt thanh ghi
Chúng ta cĩ theơ dùng leơnh sau đeơ xĩa thanh ghi AX : MOV AX,0
hoaịc SUB AX,AX XOR AX,AX
Leơnh thứ nhât caăn 3 bytes trong khi đĩ 2 leơnh sau chư caăn 2 bytes . Nhưng leơnh MOV phại được dùng đeơ xố 1 vị trí nhớ .
Chương 4 : Các leơnh dịch và quay 48 Thay cho leơnh
CMP AX,0 Người ta dùng leơnh
OR CX,CX
đeơ kieơm tra xem CX cĩ baỉng 0 hay khođng vì nĩ làm thay đoơi cờ ZF ( ZF=0 nêu CX=0 )
4.1.2 Leơnh NOT
Leơnh NOT dùng đeơ lây bù 1 ( đạo) tốn háng đích . Cú pháp là : NOT destination
Khođng cĩ cờ nào bị ạnh hưởng bởi leơnh NOT Ví dú : Lây bù 1 AX
NOT AX