Trên x86 các NOP
hướng dẫn làXCHG AX, AX
2 hướng dẫn ghi nhớ lắp ráp đến Bơm này cực kỳ nhị phân tương tự mã.
(Thực ra, tôi cho rằng một người lắp ráp có thể sử dụng bất kỳ
xchg
của một thanh ghi nào, nhưng
AX
hoặc
EAX
là những gì thường được sử dụng cho số
nop
theo như tôi biết).
xchg ax, ax
có các thuộc tính thay đổi không có giá trị đăng ký và thay đổi không có cờ (hey - đó là không có op!).
Sửa (để đáp lại một lời nhận xét bởi Anon.):
Oh đúng - bây giờ tôi nhớ có một số mã hóa cho các hướng dẫn xchg
. Một số có một bộ mod/r/m bit (giống như nhiều hướng dẫn kiến trúc Intel x86) chỉ định nguồn và đích. Những mã hóa này có nhiều hơn một byte. Ngoài ra còn có một mã hóa đặc biệt sử dụng một byte đơn và trao đổi một thanh ghi mục đích chung với (E)AX
. Nếu thanh ghi được chỉ định cũng là (E)AX
, bạn có lệnh NOP một byte. bạn cũng có thể chỉ định rằng (E)AX
được trao đổi với chính nó bằng cách sử dụng biến thể lớn hơn của lệnh xchg
.
Tôi đoán rằng MSVC sử dụng phiên bản nhiều byte xchg
với nguồn và đích khi muốn nhai nhiều hơn một byte không hoạt động - phải mất cùng một số chu kỳ như một byte xchg
, nhưng sử dụng nhiều không gian hơn. Trong quá trình tháo gỡ, bạn sẽ không thấy nhiều byte xchg
được giải mã dưới dạng NOP
, ngay cả khi kết quả giống nhau.
Cụ thể xchg eax, eax
hoặc nop
có thể được mã hóa dưới dạng mã vạch 0x90
hoặc 0x87 0xc0
tùy thuộc vào việc bạn có muốn sử dụng hết 1 hoặc 2 byte hay không. Trình tách Visual Studio (và có thể là những người khác) sẽ giải mã mã opcode 0x90
làm hướng dẫn NOP
và sẽ giải mã opcode 0x87 0xc0
là xchg eax, eax
.
Nó được một lúc kể từ khi tôi đã thực hiện công việc ngôn ngữ lắp ráp chi tiết, vì vậy rất có thể là tôi sai trên ít nhất một số ở đây ...
Nguồn
2010-01-25 22:13:49
là các byte được liên kết với các hướng dẫn này giống nhau không? nop nên được hex 90. là xchg axe, ax một hướng dẫn 2 byte? –
Điều này hóa ra lại là một câu hỏi có chút sắc thái hơn tôi nghĩ ban đầu (hoặc vẫn nhớ). –
hey bạn có thể cho tôi biết làm thế nào để nhìn vào mã lắp ráp như của bạn. tôi muốn xem làm thế nào một prgoram đơn giản được chuyển đổi để lắp ráp. thanks – masfenix