
Сообщение от
b2m
Круто

Подозреваю, из-за неправильного количества тактов команд mul/div. Времянки пока не соответствуют действительности.
Ненене. Такты тут 99.99999% ни при чем. Вот в чем может быть дело:
Код:
;-----------------------------------------------------------------------------
; If this test passes, then we need some other means to differentiate between
; 8088/8088 and 80186/80188. This method I will use comes from "80186/188,
; 80C186/C188 Hardware Reference Manual" from Intel, PN# 270788, page
; A-2: "When a word write is performed at offset FFFFh in a segment, the
; 8086 will write one byte at offset FFFFh, and the other at offset 0, while
; an 80186 family processor will write one byte at offset FFFFh, and the
; other at offset 10000h (one byte beyond the end of the segment).
;-----------------------------------------------------------------------------
; Before we can blast a value out to FFFFh, we must save anything there, so
; we don't crash anybody else's data.
;-----------------------------------------------------------------------------
mov bx,ds:[0ffffh] ; get original data
mov word ptr ds:[0ffffh],0aaaah ; write signature at test location
cmp byte ptr ds:[0],0aah ; 8086?
mov ds:[0ffffh],bx
je short @Test_V20
inc ah
jmp short CPU_8086_Exit
То есть 8088 когда пытаются записать в конец сегмента слово, пишет один байт по смещению FFFF, а второй который не лезет - по смещению 0000. 186 и 286 - пишут один байт по смещению FFFF, а второй байт уже в другой сегмент по смещению 0.
---------- Post added at 17:13 ---------- Previous post was at 17:07 ----------
Еще почему CheckIT пишет NEC V20 - может из-за того, что в 8088 после mul всегда устанавливается ZF, даже если результат не ноль, а в V20 флаги устанавливаются в зависимости от результата.
Код:
;-----------------------------------------------------------------------------
; The V20 and 8086 differ with respect to the handling of FLAGS during a MUL
; instruction. The 8086 always sets ZF=0 (NZ). The V20 sets ZF according to
; the result.
;-----------------------------------------------------------------------------
@Test_V20:
push ax ; save results
xor al,al ; force ZF
mov al,40h ; multiplicand
mul al ; V20 doesn't affect ZF
pop ax ; restore results
jnz short CPU_8086_Exit ; Intel?
or ah,10h ; Set V20 flag
jmp short CPU_8086_Exit ; go split
И еще насколько помню, что-то там было с SHL, SHR - в 8088 может сдвигать только на несколько бит вправо влево, тогда как V20 и 188 - хоть на 255 в CL. Может найду код, покажу.
---------- Post added at 17:24 ---------- Previous post was at 17:13 ----------
Наоборот походу, 8086 может сдвигать на сколько хош туда сюда, 186 - ограничено. Кодес:
Код:
mov cx,0121h ; If CH can be shifted by 21h,
shl ch,cl ; then it's an 8086, because
jz short p1_8086 ; a 186+ limits shift counts.