-->

WE ARE CME

CENTER OF MECHANICAL ENGINEERING

Khoa học & Công nghệ

Lập trình Assembly-Bài 4-P4

7. Lệnh logic: NOT – AND – OR – XOR – TEST

Trước khi tìm hiểu về các lệnh logic chúng ta xem lại kết quả thực hiện các phép tính logic trên 2 bít nhị phân A và B thông qua bảng sau đây:

A

B

And B

Or B

Xor B

NotA

0

0

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0

 

Bảng trên cho thấy: Với phép And: kết quả = 1 chỉ khi cả hai bít = 1; Với phép Or: kết quả = 0 chỉ khi cả hai bít = 0; Với phép Xor: kết quả = 0 khi hai bít giống nhau, kết quả = 1 khi hai bít khác nhau. Với phép Not: 0 thành 1, 1 thành 0.     

Cú pháp:

  • Not     [Toán hạng đích]
  • And     [Toán hạng đích], [Toán hạng nguồn]
  • Or       [Toán hạng đích], [Toán hạng nguồn]
  • Xor     [Toán hạng đích], [Toán hạng nguồn]
  • Test    [Toán hạng đích], [Toán hạng nguồn]

Trong đó: [Toán hạng đích], [Toán hạng nguồn] có thể là hằng số (trực hằng), biến, thanh ghi hay địa chỉ ô nhớ. [Toán hạng đích] không thể là hằng số.

Tác dụng: Mỗi lệnh logic thực hiện phép tính logic tương ứng trên các bít (tương ứng về vị trí) của [Toán hạng đích] và [Toán hạng nguồn], kết quả được ghi vào lại [Toán hạng đích]. Riêng lệnh Not, thực hiện phép đảo bít ngay trên các bít của [Toán hạng đích]. Hầu hết các lệnh logic đều ảnh hưởng đến các cờ CF, OF, ZF,...  

-     Lệnh Not (Logical Not): Thực hiện việc đảo ngược từng bít trong nội dung của [Toán hạng đích]. Lệnh này không làm ảnh hưởng đến các cờ.

Lệnh Not thường được sử dụng để tạo dạng bù 1 của [Toán hạng đích].        

-     Lệnh And (Logical And): Thực hiện phép tính logic And trên từng cặp bít (tương ứng về vị trí) của [Toán hạng nguồn] với [Toán hạng đích], kết quả lưu vào [Toán hạng đích].

Lệnh And thường được sử dụng để xóa (= 0) một hoặc nhiều bít xác định nào đó trong một thanh ghi.

-     Lệnh Or (Logical Inclusive Or):Thực hiện phép tính logic Or trên từng cặp bít (tương ứng về vị trí) của [Toán hạng nguồn] với [Toán hạng đích], kết quả lưu vào [Toán hạng đích].

Lệnh Or thường dùng để thiết lập (= 1) một hoặc nhiều bít xác định nào đó trong một thanh ghi.

-     Lệnh Xor (eXclusive OR):Thực hiện phép tính logic Xor trên từng cặp bít (tương ứng về vị trí) của [Toán hạng nguồn] với [Toán hạng đích], kết quả lưu vào [Toán hạng đích].

Lệnh Xor thường dùng để so sánh (bằng nhau hay khác nhau) giá trị của hai toán hạng, nó cũng giúp phát hiện ra các bít khác nhau giữa hai toán hạng này.  

-     Lệnh Test: Tương tự như lệnh And nhưng không ghi kết quả vào lại [Toán hạng đích], nó chỉ ảnh hưởng đến các cờ CF, OF, ZF,...

Ví dụ 1:

                    Mov        Al,0                 ; Al ß0

                    Not          Al                    ; Al = Not Al. Tức là Al = 0FFh

Ví dụ 2: Cho AL = (10010011)2, BL = (11001100)2.

-             And         Al, Bl              ; Al ß 10010011 And 11001100. Al =

-             And         Al, 0                ; Al ß 10010011 And 0. Al =

-             Or            Bl, Al              ; Bl ß 11001100 Or 10010011. Al =

-             Or           Bl, 4                ; Bl ß 11001100 Or 100. Al =

-             Xor         Al, Bl              ; Al ß 10010011 Xor 11001100. Al =

-              Xor         Bl, Bl              ; Bl ß 11001100 Xor 11001100. Bl = 00000000

Ví dụ 3: Để xóa nội dung thanh ghi nào đó, trong hợp ngữ ta có thể sử dụng một trong các lệnh sau đây:

-             Mov        Ax, 0

-             Sub         Ax, Ax

-             Xor         Ax, Ax            ; các cặp bít giống nhau thì đều = 0 

Ví dụ 5: Lệnh sau đây sẽ xóa (= 0) các bít 3 và 6 của thanh ghi AL, các bít khác giữ nguyên giá trị:

-             And         AL, 10110111b        ; AL ßAL And 10110111

Trong trường hợp này: dãy bít  10110111 được gọi là dãy bít mặt nạ, các bít 3 (= 0) và 6 (= 0) được gọi là các bít mặt nạ. Như vậy muốn làm cho bít nào = 0 ta cho bít mặt nạ tương ứng với nó = 0, các bít còn lại trong dãy bít mặt nạ đều = 1.       

Ví dụ 6:  Lệnh sau đây sẽ thiết lập (= 1) các bít 3 và 6 của thanh ghi AL, các bít khác giữ nguyên giá trị:

-             Or            AL, 01001000b        ; AL ßAL Or 01001000

Trong trường hợp này: dãy bít 01001000 được gọi là dãy bít mặt nạ, các bít 3 (= 1) và 6 (= 1) được gọi là các bít mặt nạ. Như vậy muốn làm cho bít nào = 1 ta cho bít mặt nạ tương ứng với nó = 1, các bít còn lại trong dãy bít mặt nạ đều = 0.       

Ví dụ 7: Lệnh sau đây sẽ kiểm tra bít 12 của thanh ghi AX là = 0 hay = 1:

-             And         AX, 0001000000000000b              ; AX ßAX And 0001000000000000

Với dãy bít mặt nạ như trên, nếu bít 12 của Ax = 0 thì kết quả: Ax = 0, nếu bít 12 của Ax = 1 thì kết quả: Ax <> 0.

Cách dùng lệnh And như trên để kiểm tra bít ít được sử dụng, vì nó làm thay đổi giá trị của thanh ghi cần kiểm tra (điều này có thể khắc phục bằng lệnh Test) và phải thêm bước kiểm tra giá trị của Ax (= 0 hay <> 0) mới biết được kết quả kiểm tra. Ngoài ra, nó cũng chỉ kiểm tra được 1 bít.

Trong thực tế người ta thường sử dụng kết hợp giữa các lệnh dịch bít, lệnh quay bít, lệnh nhảy,... để kiểm tra các bít trong một thanh ghi.

BÀI VIẾT LIÊN QUAN:

Một công ty chế tạo phụ tùng thông minh biến mọi chiếc xe đạp thường thành xe đạp điện trong vòng vài giây, nhỏ gọn bỏ vừa balo

Chỉ với một phụ tùng nhỏ gọn, một chiếc xe đạp thường có thể biến thành một ...

Bài báo tạp chí quốc tế TIIJ

AN NEW INTEGRATED APPROACH FOR AN INTRODUCTION TO THE MECHATRONICS ENGINEERING ...

Bài báo đăng Tạp chí ngành cơ khí Việt Nam

The paper presents the researched results on design and manufacture of ...

Sửa lỗi USB hoặc thẻ nhớ SD không thể format ở Windows 10

Nếu bạn đang gặp phải vấn đề với việc format USB hay thẻ nhớ SD thì bài viết ...