а специальные команды переставляющие байты нельзя использовать?
правда я их с ходу не вспомню. не доводилось использовать
ну или хотя бы ROL уже будет проще, но эти команды по такту на смещение используют - неэкономно получится
BSWAP Цитата:
mov eax, dword ptr [value]
bswap eax
mov dword ptr [value], eax
Цитата: .686
.model flat, stdcall
option casemap :none
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
.data
mestitle db "Bomz",0
form db "EAX: %x", 0
value dd 1A2B3C4Dh
.data?
buffer db 512 dup(?)
.code
start:
mov eax, dword ptr [value]
bswap eax
mov dword ptr [value], eax
invoke wsprintf,ADDR buffer,ADDR form,eax
invoke MessageBox,0,ADDR buffer,ADDR mestitle,MB_ICONASTERISK
invoke ExitProcess,0
end start
работкаит
Добавлено: Цитата: .486
.model flat, stdcall
option casemap :none
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
.data
mestitle db "BSWAP",0
form db "EAX: %x",13,10,"EBX: %x", 0
value dd 1A2B3C4Dh
.data?
buffer db 64 dup(?)
.code
start:
mov ebx, dword ptr [value]
mov eax, ebx
bswap ebx
mov dword ptr [value], ebx
invoke wsprintf,addr buffer,addr form,eax,ebx
invoke MessageBox,0,addr buffer,addr mestitle,MB_ICONASTERISK
invoke ExitProcess,0
end start
http://rghost.ru/39992136 486 процессор уже BSWAP поддерживал
Добавлено: и еще - не особо понял твой алгоритм, у тебя переставляются байт в памяти, а это гораздо медленне чем переставлять их в регистрах. дажене смотря на то что все это будет делать в кеше
Добавлено: вот с rol
Цитата: .386
.model flat, stdcall
option casemap :none
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
.data
mestitle db "ROL",0
form db "EAX: %x",13,10,"EBX: %x", 0
value dd 1A2B3C4Dh
.data?
buffer db 64 dup(?)
.code
start:
mov ebx, dword ptr [value]
mov eax, ebx
rol bx, 8
rol ebx, 16
rol bx, 8
mov dword ptr [value], ebx
invoke wsprintf,addr buffer,addr form,eax,ebx
invoke MessageBox,0,addr buffer,addr mestitle,MB_ICONASTERISK
invoke ExitProcess,0
end start
Добавлено: а если препод будет возбухать скажи, что на это надо давать задачу на сортировку массива или быструю сортировку строк, а в этой задачи учащиеся ознакомились с командами ROL и SWAP в чем гораздо больше пользы, чем учиться неоптимально тупорыло задачи поставленные решать