#ассемблер
По какому принципу работает команда TEST? Понятно, что это логическое и. Устанавливаются флаги. Сколько их и по какому принципу они устанавливаются, если в результате применения к двум числам логической функции получается число? mov ax,5878h mov bx,6B36h mov cx,5CFDh P: mov al,bl Q: test bh,cl jpe E mul ch shl ax,3 jmp F E: imul cl xor cl,ah F: sub ah,cl Вот еще пример, в нем при применение теста - результат True, как это получилось?
Ответы
Ответ 1
TEST устанавливает флаги PF, SF и ZF. Parity Flag - 1, если в результате AND четное количество установленных (1) бит. Sign Flag - 1, если результат AND получился отрицательным (старший - знаковый - бит = 1) Zero Flag - 1, если результат AND = 0 и сбрасывает CF и OF. Вот общая схема: Operation TEMP ← SRC1 AND SRC2; SF ← MSB(TEMP); IF TEMP = 0 THEN ZF ← 1; ELSE ZF ← 0; FI: PF ← BitwiseXNOR(TEMP[0:7]); CF ← 0; OF ← 0; Сам результат AND при этом выбрасывается. В вашем примере: 6Bh AND FDh = 69h = 01101001b PF будет установлен в 1. jpe прыгнет.
Комментариев нет:
Отправить комментарий