Скачать презентацию Команда CMP op 1 op 2 Скачать презентацию Команда CMP op 1 op 2

Prezent42.ppt

  • Количество слайдов: 10

Команда CMP op 1, op 2 ; – сравнение. В соответствии с результатом устанавливаются Команда CMP op 1, op 2 ; – сравнение. В соответствии с результатом устанавливаются следющие флаги: op 1 op 2 > >= = <= < Числа со знаком Числа без знака ZF=0 и SF=OF ZF=1 и SF<>OF (SF OF = 1) CF=0 и ZF=0 CF=0 ZF=1 CF=1 и ZF=1 CF=1 Состояние всех флажков определяется получаемой разностью op 1 op 2 и их можно проверить командами условного перехода. Команды преобразования операнда. Для правильной работы команды деления необходимо подготовить старшие разряды делимого (AH, DX, EAX), заполнив их знаковым разрядом (AL, AX, EAX). CBW – преобразовать байт в слово знак AL расширяется в AH CWD слово в DWORD, знак AX в DX CWDE слово в DWORD, знак AX в EAX старшие 16 бит CDQ – DWORD в QWORD, знак EAX в EDX

Команды передачи управления (переходы и циклы) Специальные команды, которые модифицируют указатели программной памяти – Команды передачи управления (переходы и циклы) Специальные команды, которые модифицируют указатели программной памяти – регистры CS: EIP/IP, называются командами передачи управления (или командами управления программами). Сегментная организация памяти определяет два вида команд передачи управления: · Внутрисегментные – при этом изменяется только регистр EIP/IP, т. е. адрес перехода задает смещение (байт, слово, двойное слово) внутри сегмента кода. Ее называют близкой, т. е. имеющей тип NEAR. · Межсегментные – модифицируют CS и EIP/IP. Адрес перехода задается полным (20, 32, 48 битным) указателем CS: EIP/IP/. Переход называется дальним, т. е. имеет тип FAR. В программе на ассемблере адрес перехода задается просто меткой той команды, которой передается управление. Assembler в соответствии с типом NEAR или FAR формирует нужную команду.

Команды безусловного перехода. Формат: JMP op ; op метка/(рег. / память) Команда JMP имеет Команды безусловного перехода. Формат: JMP op ; op метка/(рег. / память) Команда JMP имеет 5 форм, определяемых типом перехода и способом задания адреса перехода. Внутрисегментный переход: 1) JMP SHORT M 1 ; Внутрисегментный короткий прямой переход, . . . ; смещение 1 байт ( от 128 до +127). . . ; IP = IP + смещение ( смещение = М 1: mov ax, bx ; = OFFSET M 1 OFFSET (JMP + SIZE JMP)) 2) JMP NEAR M 2. . . M 2 mov cx, 100 ; Внутрисегментный ближний прямой переход, ; IP/EIP = IP/EIP + смещение 16/32 бита 3) JMP reg/mem ; Внутрисегментный косвенный переход. Адрес ; перехода в регистре или памяти 16/32 бита ; ( reg/mem ) > IP/EIP Например: . . . ADRM 3 DW M 3 . . . MOV DX, ADRM 3 JMP DX . . . M 3: NOP

Межсегментный переход: 4) JMP FAR PTR M 4 ; Межсегментный прямой переход ( дальний Межсегментный переход: 4) JMP FAR PTR M 4 ; Межсегментный прямой переход ( дальний ), метка М 4 в дтугом программном сегменте, CS < SEG M 4 IP/EIP < OFFSET M 4 5) JMP DWORD PTR MEM ; Межсегментный косвенный переход IP/EIP < ( MEM ) CS < ( MEM + 2 ) Например: JMP DWORD PTR MEM 1 . . MEM 1 DD OFFSET M 5 SEG M 5 ; M 5 в другом сегменте кода ;

Команды условного перехода (передачи управления ) Позволяют проверить любое соотношение между знаковыми ( >, Команды условного перехода (передачи управления ) Позволяют проверить любое соотношение между знаковыми ( >, <, >=, <=, =, != ) и беззнаковыми ( "выше" (above) "ниже" (below) ) числа ми, а также состояния всех арифметических флажков, кроме флажка AF в регистре EFLAGS(FLAGS). Все команды условного перехода осуществляют передачу управления только в пределах текущего сегмента кода (т. е. содержимое CS не изме яется). Переход реализуется прибавлением к рег. EIP/IP н смещения, на одящегося в команде. х Формат: Jcc метка сс комбинация символов L (less), G (greater), E (equal), N (no) для знаковых чисел(результата операции) и А (above), B (below), E, N для беззнаковых. C, O, Z, P, S c E и/или N для флажков. Для процессоров 8086/80286 переход осуществляется в пределах от 128 до +127 байт от адреса следующей после Jcc команды ( смещение в команде 8 бит ) Для процессоров i 386, i 486 и выше переход возможен в пределах всего текущего сегмента кода ( т. е. допустимо полное 16 или 32 бито вое смещение )

Команды условного перехода Мнем Альтерн. мнем. Проверяемое условие Название: Перейти, если JZ JE ZF=1 Команды условного перехода Мнем Альтерн. мнем. Проверяемое условие Название: Перейти, если JZ JE ZF=1 = 0 или равно JNZ JNE ZF=0 не 0 или не равно JS SF=1 (знак установлен) JNS SF=0 + (знак сброшен) JO OF=1 переполнение JNO OF 0 нет переполнения JP JPE PF=1 паритет установлен (четный пар) JNP JPO PF=0 паритет сброшен (нечетный пар) JB JNAE, JC CF=1 ниже (не выше или = ) JNB JAE, JNC CF=0 не ниже (выше или = ) JBE JNA CFZF=1 ниже или равно (не выше) JNBE JA CFZF=0 не ниже или выше JL JNGE SFOF=1 меньше JNL JGE SFOF=0 не меньше (>=) JLE JNG (SFOF)ZF=1 не больше (<=) JNLE JG (SF=OF)ZF=0 SF=OF больше

Команды управления циклом. Используют регистр СХ (ЕСХ) в качестве счетчика циклов. Альтернативная мнемоника Изменение Команды управления циклом. Используют регистр СХ (ЕСХ) в качестве счетчика циклов. Альтернативная мнемоника Изменение СХ, проверяемое условие для перехода, СХ = СХ 1; IF (( СХ ) != 0) GOTO метка: LOOPZ метка LOOPE метка LOOPNZ метка LOOPNE метка JCXZ метка СХ = СХ 1; IF (( СХ ) != 0 & ZF= = 1) GOTO метка: СХ = СХ 1; IF (( СХ ) != 0 & ZF = = 0) GOTO метка: IF ((CX= = 0) GOTO метка Мнемоника, формат LOOP метка

Пример 1. Определить сумму элементов массива АR 1[100]. data segment para public 'data' AR Пример 1. Определить сумму элементов массива АR 1[100]. data segment para public 'data' AR 1 dw 100 dup(? ) sum dw ? data ends. CODE. STARTUP start: push ds push ax mov ax, data mov ds, ax. . . ; Ввод и преобразование массива AR 1. . . mov cx, 100 mov bx, offset AR 1 ; lea bx, AR 1 xor ax, ax mov si, ax M 1: add ax, [bx][si] inc si ; add si, 2 inc si loop M 1 mov sum, ax . . . ; Вывод результата на экран. . . ; продолжение программы pop ax pop ds mov ax, 4 C 00 h int 21 h. EXIT END

Пример2. Табличные преобразования. Перекодировать текст 256 байт из строки st 1 в строку st Пример2. Табличные преобразования. Перекодировать текст 256 байт из строки st 1 в строку st 2 в код Грея. D 1 segment para public 'data' st 1 db 256(? ) st 2 db 256(? ) GRAY db 256(? ) ; Таблица кода Грея D 1 ends C 1…………… pr 1: mov ax, D 1 mov ds, ax mov es, ax. . . ; Ввод строки st 1 mov cx, 256 mov si, offset st 1 mov di, offset st 2 lea bx, GRAY jcxz CON 1 MET 1: lods st 1 ; lodsb xlat GRAY stos st 2 ; stosb loop MET 1. . . CON 1: . . . C 1 ends end pr 1

Адресные передачи. Команды передачи адресных объектов. Реализуются командами: LEA reg, mem ; Загрузить эффективный Адресные передачи. Команды передачи адресных объектов. Реализуются командами: LEA reg, mem ; Загрузить эффективный адрес (смещение) Например: lea bx, AR 1 lea ax, [bx][si] lea eax, [ax][ax*4] ; ax = ax + 4*ax = 5*ax Команды загрузки сегментных регистров. Lxx reg, mem ; Загрузка полного набора указателей из памяти в соответствующий сегментный регистр reg, заданный первым операндом. xx GS, SS, DS, ES, FS CS загружать нельзя! Например: LDS SI, MEM 1 ; MEM 1: offsetadr, segadr (16, 32 бита) ( 16 бит )