Федеральное агентство по образованию ГОУ ВПО «Российский химико-технологический университет имени Д.И. Менделеева» Новомосковский институт (филиал) Кафедра ВТИТ Предмет «Системное программное обеспечение» Лабораторная работа №5 Студент: Кривогуз А.Н. Группа: АС-08-02 Преподаватель: Силин В.В. Выполнение: Защита: Новомосковск 2010 Цель работы: Ввести с клавиатуры строку символов. Длина строки не менее 20 символов, содержащую латиницу, кириллицу, символы, знаки. Нечетные варианты преобразуют прописные латинские в строчные латинские, четные варианты наоборот. Все остальные варианты оставить без изменений. Листинг: 1 ;laba 5 2 0000 CSEG segment 3 assume CS:CSEG, DS:CSEG, SS:CSEG, ES: CSEG 4 org 100h 5 0100 Begin: 6 0100 E8 0031 call ClrScr ; очистка экрана 7 0103 8D 2E 0164r lea bp, Message 8 0107 E8 0042 call PrintS ; вывод строки в указанную позицию 9 10 ;преобразование символов из прописных в строчные 11 010A 8D 36 0164r lea si, Message ; загрузить адрес строки 12 010E B9 000D mov cx, 13 ; количество повторений 13 0111 8A 1C lab: mov bl, byte ptr [si] ; присваиваем регистру bl значение si 14 0113 B2 41 mov dl, 'A' ; в dl первый символ для сравнения 15 0115 3A DA sim: cmp bl, dl ; сравниваем символ из строки с 16 прописным символом таблицы 17 0117 74 09 jz preobr ; если символы равны, то переход на 18 метку preobr 19 0119 FE C2 inc dl ; переход к следующему символу таблицы 20 011B 80 FA 5B cmp dl, 'Z'+1 ; сравнение значения dx с символом 21 после Z 22 011E 74 07 jz next ; если символ равен символу после Z, то 23 переходим к следующему символу строки 24 0120 EB F3 jmp sim 25 0122 80 C3 20 preobr: add bl, 32 ; преобразование из прописного в строчный 26 0125 88 1C mov byte ptr [si], bl ; сохранение измененного символа 27 0127 46 next: inc si ; переход к следующему символу строки 28 0128 E2 E7 loop lab ; переходим по метке 29 30 012A B4 09 mov ah, 09 31 012C 8D 16 0164r lea dx, Message 32 0130 CD 21 int 21h 33 0132 CD 20 int 20h 34 35 ; процедуры 36 37 ;процедура очистки экрана 38 0134 ClrScr proc 39 0134 50 push ax 40 0135 53 push bx 41 0136 51 push cx 42 0137 52 push dx 43 0138 B4 06 mov ah, 6 ;прокрутка экрана вверх 44 013A B0 00 mov al, 0 ;0-заполняет весь экран пробелами 45 013C B9 0000 mov cx, 0 ;верхний левый угол 0,0 46 013F B6 18 mov dh, 24 ;номер строки нижнего правого угла 47 0141 B2 4F mov dl, 79 ;номер столбца нижнего правого угла 48 0143 B7 07 mov bh, 7 ;атрибут экрана черно-белый 49 0145 CD 10 int 10h 50 0147 5A pop dx 51 0148 59 pop cx 52 0149 5B pop bx 53 014A 58 pop ax 54 014B C3 Ret 55 014C ClrScr EndP 56 ; процедура установки курсора в 6 строку 19 столбец 57 014C PrintS proc 58 014C 50 push ax 59 014D 53 push bx 60 014E 51 push cx 61 014F 52 push dx 62 0150 B4 13 mov ah, 13h ;вывести строку символов 63 0152 B0 00 mov al, 0 ;режим вывода 64 0154 B9 000D mov cx, 13 ;число выводимых символов 65 0157 B3 0F mov bl, 0Fh ;цвет выводимых символов (белый на черном фоне) 66 0159 B6 06 mov dh, 6 ;номер строки 67 015B B2 13 mov dl, 19 ;номер столбца 68 015D CD 10 int 10h 69 015F 5A pop dx 70 0160 59 pop cx 71 0161 5B pop bx 72 0162 58 pop ax 73 0163 C3 Ret 74 0164 PrintS EndP 75 76 ; данные 77 0164 48 65 4C 4C 6F 2C 20 + Message db 'HeLLo, WOrLD!$' 78 57 4F 72 4C 44 21 24 79 80 0172 CSEG ends 81 end Begin