![]() |
Quote:
|
Видимо, я не совсем понимаю, как работает aad
|
AAD : AL = AH*x + AL ;AH = 0
И все флаги от результата AX- (SF, ZF, PF, OF, CF, AF) |
Хорошо, флаги я забыл сделать, но AL=AH*x+AL именно так я и сделал. Разве что старший байт после умножения я отбросил, но ты пишешь AH=0...
---------- Post added at 17:21 ---------- Previous post was at 17:20 ---------- Есть такой вот тест, но он явно не пройдёт у меня :) |
2 Attachment(s)
Ну я не знаю как так может быть. Вот в тесте печатает hex числа от 0 до FE.
Некоторые сорцы из эмулей: Code:
case 0xD5: /*AAD*/Code:
/* OP D5: AAD imm8 */Code:
case 0xD5: /* D5 AAD I0 */ |
Проблема оказалась в команде aaa, забыл ah обновить. Теперь пишет как и положено - 005D.
Обновил эмулятор. |
1 Attachment(s)
Гуд, будем копать дальше :) На всякий случай собрал тест AAD, должен выводить 3FFF. DosBox кстати неправильно работает -)
Ваш эмуль тоже не проходит тест. PCem так же не проходит. На моем Поиске выдает 3FFF, как и положено. |
Также не учитывается еще одна особенность 8088/86, а именно:
Code:
push sp ; save SP on stack to look atCode:
; 8086/80186 80286+ |
1 Attachment(s)
Так же интересно, почему если в качестве биос подсунуть некий тест, эмуль вообще падает по ексепшену. Тест div.bin, там устанавливается вектор прерывания int 00h, далее в коде происходит деление на ноль. Должно сгенерироваться int 0, но где-то тут наверно происходит крах системы -) В то же время, подобный тест sub.bin отрабатывает без ошибок. Правда в нем нет никаких обработчиков прерываний. Файлы res_div.bin и res_sub.bin содержат эталонные значения, с которыми можно сравнить содержимое памяти начиная с 0000:0000. В случае sub.bin все верно, ну кроме старших бит во флагах, но это так и должно быть. А вот с div.bin непонятно, так как эмуль падает.
|
1 Attachment(s)
С умножением похоже нелады во флагах после операций. И это не только старшие биты. Запускать вместо BIOS, потом сравнить память с res_mul.bin Флаги это важно, возможно checkit из-за этого падает с math-error
|
| All times are GMT +4. The time now is 04:56. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.