Почему mov ah, bh и mov al, bl вместе намного быстрее, чем одна инструкция mov ax, bx?

Я обнаружил, что

mov al, bl
mov ah, bh

намного быстрее, чем

mov ax, bx

. Кто-нибудь может объяснить мне, почему? Я использую Core 2 Duo 3 Ghz в 32-битном режиме под Windows XP. Компиляция с использованием NASM, а затем связывание с VS2010. Команда компиляции Nasm:

nasm -f coff -o triangle.o triangle.asm

Вот основной цикл, который я использую для визуализации треугольника:

; some variables on stack
%define cr  DWORD [ebp-20]
%define dcr DWORD [ebp-24]
%define dcg DWORD [ebp-32]
%define dcb DWORD [ebp-40]

loop:

add esi, dcg
mov eax, esi
shr eax, 8

add edi, dcb
mov ebx, edi
shr ebx, 16
mov bh, ah

mov eax, cr
add eax, dcr
mov cr, eax

mov ah, bh  ; faster
mov al, bl
;mov ax, bx

mov DWORD [edx], eax

add edx, 4

dec ecx
jge loop

Я могу предоставить весь проект VS с исходными кодами для тестирования.

18
задан Assad Ebrahim 7 October 2012 в 04:26
поделиться