испытательная платформа x86-32bit
.В чем смысл «mov% reg8, (% reg32)» (не movb)?
Я знаю, что на x86-32bit
, у нас есть два опкоды movsbl
и movzbl
, который имеет следующую семантику:
%eax = 0x12345678
%edx = 0xAAAABBBB
MOVB %dh, %al %eax = 0x123456BB
MOVSBL %dh, %eax %eax = 0xFFFFFFBB
MOVZBL %dh, %eax %eax = 0x000000BB
Приведенный выше пример из here.
Тогда я вроде путать с семантикой следующей инструкции:
mov %dl, 0x2c(%esp)
Что такое точное значение выше mov
, он равен movsbl
? или равна movzbl
? Или нет?
Ничего, это простой 8-битный ход. Он будет писать только один байт памяти. Обратите внимание, что это не 'mem32', а' mem8' (неявный из-за использования 8-битного регистра). – Jester
Спасибо @Jester. Значит, вы на самом деле равны 'movb% dl, 0x2c (% esp)'? – computereasy
Да, он генерирует тот же машинный код. Ассемблер вывел размер 'b' из используемого регистра. – Jester