Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

команда TEST assembler

#ассемблер


По какому принципу работает команда 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 прыгнет.

Комментариев нет:

Отправить комментарий