Консультация № 193338
31.05.2018, 16:19
0.00 руб.
0 3 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
нужно подогнать программу на ассемблере не для слова "END" а для слова которое вводится с клавиатуры.

Приложение:
.model small ; модель пямяти для программы типа EXE
.286 ; разрешить использовать команда 80286
.stack 200h ; сегмент стека
.data ; сегмент данных
mR_Yes db 'Yes',10,13,'$' ; строка вывода если условие выполняется
mR_No db 'No',10,13,'$' ; строка вывода если условие не выполняется
MyStr db 'sdfdgawfekldjklnss' ; заданная строка
SizeS=$-MyStr ; длина строки
mGood db 10,13,'Работа программы окончена! ',10,13,'$' ; строки с сообщениями об успешном завершении программы
.code ; сегмент кода
@start: ; точка входа в программу
mov ax,@data; инициализация семента данных
mov ds,ax
mov es,ax
mov cx,SizeS ; cx=длина строки
mov dx,offset mR_No ; занести в dx адрес строки с предполагаемым результатом
mov di,offset MyStr ; di=адрес заданной строки
mov al,'d' ; al='d'
repne scasb ; поиск символа в строке
je @next1 ; нашли продолжить поиск
jmp @no ; если не нашли переход
@next1:
mov al,'n' ; al='n'
repne scasb ; поиск символа в строке
je @next2 ; нашли продолжить поиск
jmp @no
@next2:
mov al,'e' ; al='e'
repne scasb ; поиск символа в строке
jne @no ; не нашли переход
mov dx,offset mR_Yes ; занести в dx адрес строки с полученным результатом
@no:
; вывод результата
mov ax,0900h ; вывести заголовок для ввода элемента массива
int 21h ; вызов DOS

@end_prog:
mov ax,0900h ; вывести заголовок для ввода элемента массива
mov dx, offset mGood ; адрес выводимой строки
int 21h ; вызов DOS
mov ax,0c07h ; ожидаем нажатие клавиши
int 21h ; вызов DOS
;выход из программы
mov ax,4c00h; функция DOS завершение программы
int 21h ; вызов DOS
end @start

Обсуждение

давно
Старший Модератор
31795
6196
31.05.2018, 18:14
общий
31.05.2018, 18:14
Адресаты:
Задание полностью как выглядит?
В этой программе ищется первая буква 'd', после этого - первая 'n' после буквы 'd', а потоом первая 'e', после 'n'.

для слова "END"

Словом "END", тут и не пахнет- "DNE"- которое размазали по строке.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
01.06.2018, 20:32
общий
Адресаты:
Ау!!!

В строке: end end end end
Программа выдаст: end end end end
Повторяю:
Цитата: Зенченко Константин Николаевич
Задание полностью как выглядит?

Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
08.06.2018, 15:19
общий
это ответ
Здравствуйте, illidan!

[code lang=asm h=250]model small
.code
begin: mov ax,@data
mov ds,ax
mov es,ax
mov ah,9
lea dx,dbStr
int 21h
mov ah,10
lea dx,dbStrM
int 21h
mov ah,9
lea dx,dbSub
int 21h
mov ah,10
lea dx,dbSubM
int 21h
mov cl,dbStrL
xor ch,ch
mov bl,dbSubL
xor bh,bh
lea di,dbStrD
lea si,dbSubD
cld
lodsb
lea dx,dbNo
@@01: repne scasb
or cx,cx
jz @@02
cmp cx,bx
jb @@02
push di
push cx
mov cx,bx
dec cx
repe cmpsb
pop cx
pop di
; or cx,cx
jnz @@01
lea dx,dbYes
@@02: mov ah,9
int 21h
mov ax,4C00h
int 21h
.data
szStr equ 200
dbNo db 10,13,'No$'
dbYes db 10,13,'Yes$'
dbStr db 10,13,'Enter main string:$'
dbSub db 10,13,'Enter sub string:$'
dbStrM db szStr
dbStrL db ?
dbStrD db szStr dup(?)
dbSubM db szStr
dbSubL db ?
dbSubD db szStr dup(?)
.stack
end begin[/code]
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа