1 / 10

Команда CMP op 1, op 2 ; – сравнение.

op 1 op 2. Числа со знаком. Числа без знака. > >= = <= <. ZF=0 и SF=OF SF=OF ZF=1 ZF=1 и SF<>OF SF<>OF (SF OF = 1). CF =0 и ZF =0 CF=0 ZF=1 CF =1 и ZF =1 CF =1. Команда CMP op 1, op 2 ; – сравнение.

conan-dyer
Download Presentation

Команда CMP op 1, op 2 ; – сравнение.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  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 бит ) Для процессоров i386, i486 и выше переход возможен в пределах всего текущего сегмента кода ( т.е. допустимо полное 16- или 32- бито­вое смещение )

  6. Мнем Альтерн. мнем. Проверяемое условие Название: Перейти, если 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 больше Команды условного перехода

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

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

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

  10. Адресные передачи.Команды передачи адресных объектов. Реализуются командами: LEA reg, mem ; Загрузить эффективный адрес (смещение) Например: lea bx, AR1 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, MEM1 ; MEM1: offsetadr, segadr (16, 32 бита) ( 16 бит )

More Related