Có một số mã NOP được đối xử khác với những mã khác?


12

Tôi tò mò về điều này, hãy nói rằng tôi có:

00000000001 90                              nop        
00000000002 90                              nop        
00000000003 90                              nop 

Nó được thực hiện chính xác như thế này?

00000000001 0F1F00                          nop        dword [ds:rax]

Ví dụ thứ hai có ảnh hưởng gì so với ví dụ thứ nhất?


1
Tôi sẽ có khuynh hướng nghĩ rằng cái thứ hai sẽ thực thi nhanh hơn cái thứ nhất vì nó là một chỉ dẫn chứ không phải là 3. Có thể rằng đường ống hiện đại sẽ thay đổi điều đó.
Loren Pechtel

1
Tại sao điều này được gắn thẻ c ?
Keith Thompson

Google cho multi byte nop, bật lên khá nhiều kết quả.
phant0m

1
@KeithThndry - Tôi đã kéo các thẻ kiểu C và mã hóa; họ không thuộc về.

@ phant0m - bạn có thể đưa nhận xét đó vào câu trả lời và tóm tắt một số kết quả phù hợp hơn không? Không phải tất cả chúng ta đều có nền tảng để hiểu chính xác những gì sẽ trở lại từ truy vấn tìm kiếm đó.

Câu trả lời:


2

Nó phụ thuộc vào kiến ​​trúc máy. KA-10 cổ điển (pdp-10) có rất nhiều mã nop, có lẽ là hệ quả của tập lệnh rất thường xuyên và thực tế là tất cả được thực hiện bởi các thành phần giải mã, không phải bởi vi mã. Một số NOP tham chiếu bộ nhớ, một số là các bài kiểm tra bỏ qua không bao giờ bỏ qua, nhưng dù sao cũng đã kiểm tra điều kiện có thể gây ra bỏ qua, v.v. "JFCL 0", được quảng cáo trong hướng dẫn là nop nhanh nhất.


Tôi đã làm việc trên một trình biên dịch (8085?) Một lần cung cấp tùy chọn thay thế nhiều NOP bằng một lệnh JMP duy nhất. Bạn đã có sự liên kết mà bạn muốn với việc trả tiền phạt hiệu suất. Tiện dụng khi bạn có các chuỗi trong PIC, không tiện dụng nếu bạn có các vòng lặp thời gian dựa trên CPU (đó là lý do tại sao nó bị tắt theo mặc định).
TMN

Hầu hết các lệnh NOP được sử dụng để chèn một độ trễ ngắn, thường là kết quả của một số phụ thuộc phần cứng hoặc lỗi thiết bị hoạt động xung quanh. Hình phạt hiệu suất là lý do để sử dụng NOP.
uɐɪ

1
nops có rất nhiều công dụng aesoteric. Một số kiến ​​trúc có các yêu cầu căn chỉnh byte cho các bước nhảy. Mã tự sửa đổi (khủng khiếp!) Đã sử dụng nops làm điểm nối. Các hệ thống lỗi đã sử dụng nops để lưu trữ thông tin về các xác nhận thất bại.
ddyer

@ddyer: Một số bộ xử lý có hướng dẫn (đôi khi được ghi thành tài liệu, đôi khi không) sẽ tìm nạp byte bộ nhớ và bỏ qua hoàn toàn giá trị được tìm nạp hoặc không làm gì với nó ngoại trừ đặt cờ mà lập trình viên có thể không quan tâm. Trên 6502, việc sử dụng lệnh "BIT abs" là một phương tiện để ngấu nghiến hai byte tiếp theo; cũng có một số opcodes không có giấy tờ hoạt động tương tự ngoại trừ họ không cập nhật bất kỳ cờ nào. Mặc dù vậy, một cảnh báo với các thủ thuật như vậy: chúng sẽ khiến một byte không gian địa chỉ được đọc. Một số thiết bị ngoại vi 6502 có thể phản ứng với các hoạt động đọc.
supercat

0

Có vẻ như ví dụ thứ hai sẽ chạy nhanh hơn ví dụ thứ nhất. Trong ví dụ đầu tiên, ba hướng dẫn riêng biệt sẽ được thực thi. Trong lần thứ hai, chỉ có một hướng dẫn. Các NOP nhiều byte được dự định sẽ được sử dụng cho các "gợi ý" của CPU (chính xác là cách thức và thời điểm rõ ràngbí mật ). Chúng có thể hữu ích cho các mục đích căn chỉnh (để bắt đầu một vòng lặp chặt chẽ trên một dòng bộ đệm), nhưng hiện tại chúng không có sử dụng khác. Không rõ liệu CPU có thực sự đánh giá các đối số hay không, vì vậy không thể nói liệu nó có làm tăng thời gian giải mã lệnh hay chịu hình phạt truy cập bộ nhớ hay không. Bất cứ ai có ICE tốt đều muốn kiểm tra một trong số này và xem địa chỉ nào bật lên trên dấu vết xe buýt?


Mặc dù nhiều trình biên dịch 6502 sử dụng "NOP" ghi nhớ cho các opcode không có giấy tờ thực hiện tìm nạp bộ nhớ (ví dụ: NOP $ 1FF9) sẽ là một lệnh hai byte đọc địa chỉ 0x1FF9 và bỏ qua giá trị đọc), tôi không mong đợi nhà sản xuất chip sử dụng thuật ngữ "nop" cho một lệnh không làm gì vượt quá con trỏ lệnh / bộ đếm chương trình vì không có gì đảm bảo bộ xử lý sẽ không được nối với phần cứng kích hoạt các hành động (ví dụ: chuyển sang mã ngân hàng 1) khi một số địa chỉ nhất định (như 0x1FF9 ) được truy cập và kích hoạt như vậy không chính xác là "không hoạt động" ,.
supercat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.