2010-07-16 40 views
5

Làm thế nào để viết một lệnh xóa các bit 0 và 1 trong thanh ghi AL bằng cách sử dụng assembly?Xóa bit trong sổ đăng ký trong assembly

+0

Trong những lắp ráp? Trên CPU gì? –

+3

CPU rõ ràng là x86 kể từ khi nói đến AL. – mathk

+0

Cần thẻ 'bài tập về nhà'? –

Trả lời

-2
and al, 0xFD 

Thích ứng nó vào lắp ráp của bạn đang sử dụng: ga, NASM, MASM ...

EDIT: Trên thực tế nó là and al, 0xFC nhưng bạn sẽ có được ý tưởng

+3

và al, 0xFC Câu trả lời của bạn chỉ xóa bit 1, không phải bit 0. – Demi

+0

Dù sao, điểm là AND. – mathk

6

VÀ AL, 11111100b giả dạng MASM

3

AL là byte thấp của thanh ghi AX, vì vậy bạn có thể AND AL 0xFC để che dấu các bit thấp.

AND AL,0xfc 
-2

tương đương với số không?

như

mov al, 00000000

rìu = 16bits al = 8bits

bây giờ nếu bất cứ điều gì được ored với al câu trả lời sẽ giống như những gì được ored

nhưng

nếu có bất kỳ thứ gì được đặt cùng với câu trả lời sẽ là "0"

vì vậy tôi đoán việc xóa nó với tất cả 1s hoặc tất cả 0 phụ thuộc vào công việc của bạn và cách bạn muốn xác định rằng không có gì trong sổ đăng ký.

+0

làm thế nào về một bình luận tại sao điều này là như vậy không rõ ràng để đánh dấu tiêu cực /? chuyện gì vậy? Tôi cũng đang học – user287745

+1

nó sẽ xuất hiện mà bạn đã không thực sự hiểu được câu hỏi và/hoặc không biết làm thế nào để trả lời nó, đó có lẽ là lý do tại sao bạn có một vài downvotes. Xem các câu trả lời (chính xác) khác để hiểu rõ hơn về những gì đang được hỏi và cách giải quyết nó. Nói chung, có thể là một ý tưởng hay khi chỉ trả lời các câu hỏi nếu (a) bạn chắc chắn rằng bạn hiểu câu hỏi và (b) bạn có một chút tự tin rằng bạn có thể cung cấp câu trả lời hữu ích. Chúc may mắn. –

+0

anh ta chỉ muốn xóa 2 bit thấp nhất, không phải toàn bộ thanh ghi (hoặc đăng ký phụ), phương thức của bạn loại bỏ quá nhiều bit, do đó nó hoàn toàn sai phương pháp, chỉ cần xem các phương thức ở trên của bạn. haha, 14 giây ninja Paul R là: P – Necrolis

2

Bạn có thể xóa bit bằng cách sử dụng AND -operation.

for each bit index `i` 
    result[i] = boolean_and(first[i], second[i]) 

.--------- commonly associated symbol for the operation 
| 

& 1 0 <- first argument 
------- 
1 | 1 0 <- result 
0 | 0 0 

^--------- second argument 

Một ví dụ với một byte:

00101100 
00111010 
     & 
00101000 

Vì vậy, bạn có thể sử dụng hoạt động này để mặt nạ và vùng lãnh thổ lật bit trong một thanh ghi. Vượt qua một hằng số như đối số thứ hai có bit lật lên bạn muốn theo kịp.

x86 mnemonic: AND a, b 
operation: a = a & b 

Dưới đây là làm thế nào để làm điều đó trừ khi bạn vẫn chưa hiểu nó:

AND eax, 0xfffffffc 

AL là phần byte thấp nhất của EAX -register để bạn có thể làm theo cách này.

Dưới đây là nhị phân -> bảng chuyển đổi hệ thập lục phân:

0000 | 0 
0001 | 1 
0010 | 2 
0011 | 3 
0100 | 4 
0101 | 5 
0110 | 6 
0111 | 7 
1000 | 8 
1001 | 9 
1010 | a 
1011 | b 
1100 | c 
1101 | d 
1110 | e 
1111 | f 

Oh, và bạn nên nhớ điều này từ phía sau đầu của bạn nếu bạn đang đi để trở thành một lập trình viên lắp ráp-biết tự trọng.

Cũng đọc về các hoạt động OR và XOR-bit.

1

có một cách khác để làm điều này bằng cách sử dụng xor
dụ:

mov al, ff 

xor al, 00000011b  

al = fc because we cleared bit 0 and 1 
+1

'xor' chỉ hoạt động nếu cả bit 0 và bit 1 trước ngày xor, nhưng câu hỏi không làm điều kiện tiên quyết như vậy và muốn xóa các bit bất kể. –

Các vấn đề liên quan