Можно создать дубликат:
x86 Assembly - ‘testl’ eax against eax?Точка теста% EAX% EAX
Я очень новичок в программировании на ассемблере, и я в настоящее время пытается прочитать сборку язык, сгенерированный из двоичного файла. Я перебежать
test %eax,%eax
test %rdi, %rdi
или и т.д. и т.п. Я очень смущен относительно того, что это делает. Разве значения не равны %eax, %eax
? Что это такое? Я где-то читал, что он делает операцию AND
..... но так как это одно и то же значение, не будет ли он просто возвращать %eax
?
Ниже только один случай, когда я нашел это использование:
400e6e: 85 c0 test %eax,%eax
400e70: 74 05 je 400e77 <phase_1+0x23>
Я думал je
подскакивает, если оба значения сравниваемым равно ...... хорошо, потому что %eax
хорошо, сам по себе, в какой ситуации мы бы не прыгали?
Я начинаю программировать в целом, поэтому я был бы очень признателен, если бы кто-нибудь мог это объяснить мне. Благодаря!
Поскольку некоторые ответы кажутся немного неясными в этом вопросе, позвольте мне указать, что 'TEST' обновляет другие флаги, кроме' ZF'. См. Ссылку на набор инструкций. – Jester
@Jester фиксированный (в моем ответе), извините. –
Другой возможный дубликат: [Что делает инструкция 'test'?] (Http://stackoverflow.com/q/6002079) – jww