2010-04-26 14 views
7

Bạn được yêu cầu phải viết tối đa là hai hướng dẫn trong lắp ráp phải làm như sau:Viết tối đa là hai hướng dẫn rõ ràng, thiết lập và bổ sung một số bit trong AL đăng ký

  1. Rõ ràng bit 0 và 7 của AL đăng ký, tức là làm cho chúng 0
  2. Đặt bit 3 và 4 của thanh ghi AL, tức là làm cho chúng 1.
  3. Bổ sung bit 1 và 5 của thanh ghi AL.
  4. Giữ tất cả các bit khác trong thanh ghi AL như không thay đổi giá trị của chúng.
+2

Có mùi giống như bài tập về nhà ... –

+3

Giải pháp hướng dẫn **** ***: 'al -> al & 0b01111110 | 0b00011000^0b00100010'. Phần khó khăn là giảm bớt 2 hướng dẫn này. – kennytm

+0

Tôi đồng ý với Paliath. – Puppy

Trả lời

9

Bí quyết ở đây là phải làm như sau:

  1. việc sử dụng hoặc hướng dẫn để thiết bit 0, 3, 4 và 7

  2. sử dụng một lệnh XOR để bổ sung bit 0, 1, 5 và 7

Lưu ý rằng bit 0 và 7 đầu tiên được đặt trong (1) và sau đó xóa ed in (2).

Tôi sẽ để lại hướng dẫn asm thực tế cho bạn, vì đây là bài tập về nhà của bạn, sau khi tất cả.

+2

Cảm ơn bạn Mr.Paul. Đây phải là mã: HOẶC AL, 10011001 XOR AL, 10100011 – Nick

+0

@Nick: vâng, có vẻ đúng, tùy thuộc vào chính xác CPU và bộ lắp ráp bạn đang sử dụng. –

+1

cách khác là xóa bit 0, 3, 4, 7 rồi bổ sung bit 1, 3, 4, 5. [Clang có thể thực hiện tối ưu hóa này] (https://godbolt.org/g/yan2Kr) –

4

Một lệnh DB xác định một mảng giá trị 256 "kết quả" và một lệnh di chuyển để di chuyển phần tử của mảng này thành al, sử dụng giá trị hiện tại bằng al làm chỉ mục.

Điều đó có hiệu quả không? Có thể thậm chí còn lập luận rằng đây thực ra là một giải pháp hướng dẫn đơn, vì DB không thực sự là một lệnh thực hiện tại thời gian chạy, thay vào đó nó là một khai báo thời gian biên dịch.

+0

Bạn có thể làm rõ thêm được không? – Nick

+0

Anh ấy đề xuất bảng tra cứu có giá trị kết quả cho mỗi giá trị đầu vào 256 có thể. Danh sách được tạo bằng lệnh DB. Tra cứu được thực hiện bằng cách sử dụng lệnh 'di chuyển AL, bắt đầu + chỉ mục' đơn giản. – mafu

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