Трансляция всех модификаций команд add и cmp — страница 10

  • Просмотров 7222
  • Скачиваний 403
  • Размер файла 20
    Кб

первый символ строки ; то je gen1 ; переходим на чтение следующей lea si,command ; Будем искать строку CMP mov cx,3 ; Длина искомой строки 3 символа repe cmpsb ; Начинаем поиск je gen3 ; Переход, если CMP найдена wrt error06 ; Вывод сообщения об ошибке call WrtStr ; Вывод ошбочной строки mov flag_err,1 ; Устанавливаем флаг ошибки jmp gen1 ; Переход на чтение следующей строки gen3: call Coding cmp flag_err,0 jne gen1 call Fwrite jnc gen1 ret gen4: mov bx,dest ; Если трансляция проведена успешно call Fclose ; Закрываем

выходной файл Wrt m2 ; Вывод сообщения о завершении Wrt m3 ; Вывод сообщения о строках call WrtStr ; Вывод числа обработаных строк Wrt m1 ; Вывод CR,LF ret ; ВЫХОД В DOS ; Далее располагаются метки перехода по различным ошибкам source_error: Wrt error01 ret dest_error: Wrt error02 ret open_source_error: Wrt error03 ret create_dest_error: Wrt error04 ret read_error: cmp flag_eof,1 ; Смотрим был ли конец файла je skip_err_message ; Если да, то это не ошибка Wrt error05 ; Иначе выводим сообщение об ошибке mov flag_err,1 ; Устанавливаем флаг ошибки

skip_err_message: mov bx,source ; Заносим дескриптор выходного файла call Fclose ; Закрываем выходной файл cmp flag_err,0 ; Смотрим флаг ошибки je gen4 ; Если ошибок нет, то переход call Fdel ; Иначе удаляем выходной файл Wrt m1 ; Вывод CR,LF Wrt bell ; Вывод сигнала ret general endp

;┌──────────────────────────────────────────────────────┐ ;│ Переводит значение регистра AX в десятичный формат │

;└──────────────────────────────────────────────────────┘ Decimal proc near call clear ; Очищаем строку вывода mov cx,0010 ; Заносим в CX делитель lea si,outstr+4 ; Указатель на конец строки b20: cmp ax,0010 ; Сравниваем AX с 10 jb short b30 ; Переход, если меньше xor dx,dx ; Обнуляем DX div cx ; Делем AX на CX or dl,30h ; Добавляем 48,

чтобы получить 1 mov [si],dl ; Заносим в выходную строку dec si ; Движемся влево jmp short b20 ; Переход на следующий символ b30: or al,30h ; Добавляем 48, чтобы получить 1 mov [si],al ; Заносим в выходную строку ret ; Вспомогательная процедура. Очищает строку outstr (забивает нулями) clear proc near lea si,outstr ; Загружаем адрес выходной строки mov cl,48 ; 48 - символ нуля mov [si],cl ; Забиваем нулями символы mov [si+1],cl mov [si+2],cl mov [si+3],cl mov [si+4],cl ret ; Выход clear endp outstr db ' $' Decimal endp