Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по МО.doc
Скачиваний:
47
Добавлен:
01.06.2015
Размер:
353.79 Кб
Скачать

Int 21h ; позиции удаления

lea DX, N_BUFLEN

mov AH, 0Ah

Int 21h ;Ввод строки числа

lea BX, N_INPBUF ;Адрес строки представления числа

mov CL, N_FACTLEN ;Длина этой строки

call VAL ;Перевод в целое число

jc LLL1 ;Ошибка? - повторить ввод

cmp AL, 0 ;Ноль?

je LLL1 ;Повторить ввод

cmp AL, S_FACTLEN ;Превышает длину строки?

jg LLL1 ;Повторить ввод

mov POSDEL, AX ;Запомнить позицию удаления

; Ввод длины удаляемой части

LLL2: lea DX, MESS3 ;Приглашение

mov AH, 09h ; к вводу

Int 21h ; числа удаляемых

lea DX, N_BUFLEN

mov AH, 0Ah

Int 21h ;Ввод строки числа удаляемых

lea BX, N_INPBUF ;Адрес строки представления числа

mov CL, N_FACTLEN ;Длина этой строки

call VAL ;Перевод в целое число

jc LLL2 ;Ошибка? - повторить ввод

mov LENDEL, AX ;Запомнить число удаляемых

add AX, POSDEL ;Подсчитать, не выходит ли

dec AX ; удаляемая часть

cmp AL, S_FACTLEN ; за конец строки?

jg LLL2 ;Если да - повторить ввод

; Занесение параметров в стек и вызов п/п удаления

lea AX, S_INPBUF

push AX ;1-й параметр - адрес строки

push POSDEL ;2-й параметр - позиция удаления

push LENDEL ;3-й параметр - число удаляемых

call DELSUBS ;Вызов подпрограммы

; Вывод результата

lea DX, MESS4

mov AH, 09h

Int 21h ;Заголовок вывода

lea BX, S_INPBUF

mov CX, 80

LLL3: cmp byte ptr [BX],0;Цикл поиска конца строки и выход

je LLL4 ; - когда конец строки найден

Inc bx ;Сдвиг по строке

loop LLL3

LLL4: mov byte ptr [BX],'$';Заменить признак конца строки

lea DX, S_INPBUF

mov AH, 09h

Int 21h ; Вывод результата

jmp MLOOP ; На повторение работы

QUIT: exitcode 0

;Действие:

; функция вычисляет целое число по его строковому представлению.

; Результат не может быть больше 255.

; Для неверно введенных чисел устанавливает флаг переноса

;Параметры:

; BX - адрес строки - предстваления числа

; CX - длина этой строки

;Возвращает:

; CF - установлен, если в строке не цифры, AX - не определен

; сброшен, строка нормальная, AX - число

; AX - преобразованное число, если сброшен

VAL proc near

push DX ;Сохранить все изменяемые регистры,

; кроме AX, в котором результат

mov CH, 0 ;Расширяем длину до слова

mov AX, 0 ;Начальное значение результата

mov DL, 10 ;Основание системы счисления

__1: imul DL ;Умножить на основание

jc __2 ;Переполнение байта?

mov DH, [BX] ;Очередная цифра

sub DH, '0' ;Получить значение цифры

jl __2 ;Это была не цифра!

cmp DH, 9

jg __2 ;Это опять же была не цифра!

add AL, DH ;+ значение цифры к результату

jc __2 ;Переполнение байта?