Только что наткнулся на тотальный бред. Не знаю как, когда и при каких обстоятельствах, но в куему может не работать xchg rax, r8.
Пример:
Код:
DebugOut r8, clRed ; дебаг-вывод
DebugOut rax, clGreen
xchg rax, r8 ; тот самый xchg
DebugOut r8, clRed
DebugOut rax, clGreen
mov rbx, MemDefTab
call MemFree ; освобождение памяти
mov rax, r8 ; восстановление rax
Макрос DebugOut просто выводит содержимое регистра выбранным цветом, выводятся числа в столбик.
Вывод:
Вложение:
Комментарий к файлу: Дебаг-вывод
XCHG.png [ 1.39 КБ | Просмотров: 3893 ]
В дебагАуте багов нет, потому что я его пользую уже больше года и выводил всё, что только можно. На всякий случай, его код:
Код:
macro DebugOut v1, v2=clWhite
{
push rax rbx rcx r14 rcx
call GetColor
xchg [rsp], rcx
mov rax, v1
mov cl, v2
mov r14, SetColor
call r14
mov rcx, rax
mov rax, DebugVar
mov rbx, [rax]
mov r14, 12
add [rax], r14
mov rax, 300
mov r14, RCXOutHex
call r14
pop rcx
call SetColor
pop r14 rcx rbx rax
}
Как видно, все регистры тут сохранены, а R8 не используется вовсе.
Черт, полностью отпало желание разрабатывать под куему и его аналогами-эмуляторами. 2 часа потратил на поиск в коде ошибки, которой нет. На реальном железе и в VMWare все идеально работает. Жаль только, что на ноутбуке без эмулятора никак.
Куему у меня какая-то старая (та, которая с QEMU-Manager'ом идет, совсем из консоли сидеть с эмулятором как-то не хочется), но все же выпускать программу с ТАКИМИ багами - это не дело.
UPD:
Да, баг нашли и пофиксили:
Цитата:
target-i386: fix xchg rax,r8
только вот в QEMU-Managere версия та, которая была, и обновить ее не так просто.