Команды для работ со строками
Ассемблер (продолжение) Команды управления потоком Группа команд управления потоком представлена в табл. 7.1. Эта группа делится на четыре части. Таблица 7.1. Команды управления потоком.
Безусловный переход
Безусловный переход изменяет адрес следующей исполняемой программы. При безусловных переходах в регистр ip, а в некоторых случаях также в регистр кодового сегмента cs загружаются значения новых адресов. Пример 7.1. Использование подпрограммы AddReg. IDEAL MODEL small STACK 100h DATASEG exCode db 0 CODESEG Start: mov ax,@data mov ds,ax mov al,1 mov bl,2 call AddReg call AddReg call AddReg
Exit: mov ah,04Ch mov al,[exCode] int 21h
Proc AddReg xor ah,ah xor bh,bh adc ax,bx ret ENDP AddReg END Start Во время пошагового выполнения программы (пример 7.1.) в отладчике td можно заметить, что при исполнении команды call адрес возврата (адреса команды, следующей за командой call) проталкивается в стек. А во время исполнения команды ret адрес возврата выталкивается из стека в регистр ip. Пример 7.2. Использование команды jmp в качестве задержки. jmp $+2 Пример 7.3. Использование команды jmp для коротких переходов (длина команды 2 байта). jmp short ptr m1 ;… не более 35-40 команд m1: ;… или m1: ;…не более 35-40 команд jmp m1 Пример 7.4. Использование команды jmp для внутрисегментных переходов (длина команды 3 байта). m1: ;…расстояние более 128 байт и менее 64 КБайт jmp m1 или .data addr_m1 dw m1 ;… .code jmp addr_m1 ;… m1: или lea bx,m1 jmp bx ;… m1: … Пример 7.5. Использование команды jmp для межсегментных переходов (длина команды 5 байт). seg_1 segment ;… jmp far ptr m1; far здесь обязательно
;… m1 label far ;… seg_1 ends seg_2 segment ;… m2 label far jmp m1 Команды условного перехода Таблица 7.2. Окончание команд условного перехода
Команды управления процессором Группа команд управления процессором представлена в табл. 7.3. Эта группа делится на три части. Таблица 7.3. Команды управления процессором
Пример 7.6. Использование команды test. test di,08h ;проверить 3-й бит jz m1 ;если =0, то перейти на метку m1 stc ;иначе установить флаг переноса Команды для работ со строками Группа команд для работ со строками представлена в табл. 7.4. Эта группа делится на три части. Таблица 7.4. Команды обработки строк
Все строковые команды используют для выполнения своих функций определенные регистры. В отличие от других команд, для которых вы сами выбираете используемые регистры, строковые команды требовательнее и всегда работают с одними и теми же комбинациями регистров – ds:si и es:di – с индексными регистрами строки-источника и строки-назначения, которые определяют смещения в данных и сегментах. При операциях с байтами происходит вычитание или добавление 1 к регистру si и/или di; при операциях со словами добавляется или вычитается 2. Флаг направления df определяет, должна ли строковая команда приводить к уменьшению или увеличению si и di. Если df=1, тогда индексы изменяются в сторону меньших адресов. Если df=0, тогда индексы изменяются в сторону более высоких адресов. Для очистки флага df применяется команда cld (см. табл. 7.3.). Использование std (см. табл. 7.3.) приводит к установке флага df и автоматическому уменьшению si и di в сторону меньших адресов. Пример 7.7. Использование команды movsb без префикса повторения. cld ;автоувеличение si и di mov cx, 100;использование сх в качестве счетчика Repeat: movsb ;переслать 1 байт [es:di] ß [ds:si] dec cx ;счетчик цикла jnz Repeat;повторять цикл, пока cx<>0 Пример 7.8. Использование команды movsb с префиксом повторения rep. cld ;автоувеличение si и di mov cx, 100;использование сх в качестве счетчика rep movsb ;переслать 100 байт [es:di] ß [ds:si]
Директивы Директивами называются команды языка ассемблера, относящиеся к структуре программы и ее последующему ассемблированию. Таблица 7.5. Директивы определения сегментов
Таблица 7.6. Директивы выделения памяти
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|