Я обнаружил, что
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 с источниками для тестирования.