DATASG SEGMENT PARA ; открыть сегмент данных
MYTEXT DB 'fghijklmPQRSTUWX!' ,13,10, '$' ; переменная длиной в 10 байт
DATASG ENDS ; закрыть сегмент данных
STACKSG SEGMENT 'Stack' ; открыть сегмент стека
DB 12 DUP(?) ; задать стек 12 байт
STACKSG ENDS ; закрыть сегмент стека
CODESG SEGMENT PARA 'Code' ; открыть сегмент кода
BEGIN PROC FAR ; Процедура FAR с названием BEGIN
ASSUME SS:STACKSG, CS:CODESG, DS:DATASG ; Задать соответствия для сегментов
PUSH DS ; поместить в стек данные DS
SUB AX,AX ; AX - AX
PUSH AX ; поместить в стек данные AX
MOV AX, DATASG ; Инициализировать сегментный
MOV DS, AX ; регистр DS
LEA BX, MYTEXT ; Поместить в BX offset переменной
MOV CX, 10H ; CX = 10h ( = размеру переменной)
MT1: MOV AH, [BX] ; Задать метку MT1, AH = адреc BX
CMP AH, 66H ; сравнить (AH) и 66h
JB MT2 ; если (AH) < 66h то перейти к MT2
CMP AH, 7AH ; сравнить (AH) и 7Ah
JA MT2 ; если (AH) > 7Ah то перейти к MT2
CALL COR ; Вызвать процедуру COR
MT2: INC BX ; BX := BX + 1
LOOP MT1 ; CX := CX - 1, если CX > 0, идти к MT1
LEA DX, MYTEXT ; в DX поместить offset MYTEXT
MOV AH, 09H ; вывести на экран MYTEXT
INT 21H ; с помощью DOS
RET ; Завершить программу, и вернуться в DOS
BEGIN ENDP ; Окончание процедуры BEGIN
COR PROC NEAR ; Процедура NEAR с названием COR
NOP ; нет операции
AND AH, 0DFH ; Сместить старший разряд на D, младш. на F
MOV [BX], AH ; Поместить AH, в содержимое BX
RET ; Вернуться
COR ENDP ; Окончание процедуры COR
CODESG ENDS ; Окончание сегмента кода
END BEGIN ; Выход из метки BEGIN
Скачать готовое решение можно только после оплаты 150 рублей
Оплатить через Яндекс.Деньги
Оплатить через VISA или MasterCard
Оплатить через СМС
После завершения платежа не забудьте пройти по ссылке "Вернуться в магазин" - здесь откроется страница с прямой ссылкой на скачивание работы.
|