Консультация № 188200
15.11.2015, 17:50
0.00 руб.
0 7 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
помогите доделать программу, внизу код программы что смог сам сделать, не получается сделать задержку и очистку, помогите, или другой код программы дайте, срочно нужно
задание:
Вывести несколько строк произвольного текста, содержащие лишь латинские буквы. Каждые 10 секунд заглавные буквы сменяются строчными и т. д.


data segment
massbol db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','$'
massmal db 'abcdefghijklmnopqrstuvwxyz','$'
message db 'Vvedite proizvolnyi text ili nabor simvolov,lish v latinic:',0ah,'$'
stroka db 80 dup('$'),'$'
pust db 80 dup('$'),'$'
data ends
code segment
assume cs:code,ds:data


begin:mov ax,data
mov ds,ax
lea dx,message
mov ah,09h
int 21h
lea dx,stroka
mov ah,0ah
int 21h


lea si,stroka+2
xor cx,cx
mov cl,stroka+1
beg:
xor sp,sp
mov sp,26
lea di,massbol
lea bx,massmal
verh:
mov ah,[si]
mov al,[di]
cmp ah,al
jne da1
mov dl,[bx]
da1:
mov ah,[si]
mov al,[bx]
cmp ah,al
jne da2
mov dl,[di]
da2:
inc di
inc bx
dec sp
cmp sp,0
jne verh
mov ah,02h
int 21h
inc si
loop beg

quit:mov ax,4c00h
int 21h
code ends
end begin

если можно, с комментариями эту исправить, т.к. это я писал для компилятора emu8086

Обсуждение

давно
Посетитель
7438
7205
16.11.2015, 11:33
общий
Адресаты:
Здравствуйте. В Вашем задании больше всего убивает вот такие моменты:
Каждые 10 секунд

На Вашей 64-разрядной системе под EMU8086 это вообще нереально...
Под EMU8086 можно разве что прошагать, посмотреть ход выполнения скоротечно выполняющихся команд.
Интервалы времени в 1 секунду, а тем более в 10 секунд - это полный отпад
Нельзя найти где-то 32-разрядную XP? Запустили бы TD и все было бы замечательно...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
16.11.2015, 11:34
общий
16.11.2015, 11:35
Адресаты:
Или давайте сделаем так: вводим строку, меняем большие на малые (и наоборот) выводим и завершаемся... Как и сделано в этой...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399158
228
16.11.2015, 11:41
общий
да, толкьо в этой есть маленький косяк, там можно вводить тольок 1 слово, если 2, то получается бред. это можно исправить? и еще добавить: завершение программы осуществляется при вводе цифры 0.
если не трудно, с комментариями, где что происходит....
давно
Посетитель
7438
7205
16.11.2015, 11:50
общий
Адресаты:
Там косяк не только в этом
Лады, если никто раньше не сделает, в течение дня сделаю... Занят несколько...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399158
228
16.11.2015, 14:32
общий
спасибо, буду ждать
давно
Посетитель
7438
7205
17.11.2015, 00:24
общий
это ответ
Здравствуйте, Посетитель - 399158!
Строки с большими и малыми буквами лишние.
Они отличаются значением 20h.
Этим и воспользуемся...
[code h=200]data segment
message db 'Vvedite proizvolnyi text ili nabor simvolov,lish v latinic:',0dh,0ah,'$'
stroka db 80,0,80 dup(?) ;для функции 0ah требуется указать в первом байте
;длину буфера, во втором будет реальная длина
data ends

code segment
assume cs:code,ds:data

begin:
mov ax,data
mov ds,ax
lea dx,message
mov ah,09h
int 21h
lea dx,stroka
mov ah,0ah
int 21h ;ввели строку

mov dl,0ah
mov ah,2
int 21h ;перейдем на новую строку

lea si,stroka+2 ;все правильно - имеем адрес самой строки
mov dx,si ;сохраним для вывода, все замены сделаем на месте
xor cx,cx ;счетчик байт
mov cl,stroka+1 ;реальное количество введенных байт
mov ah,20h ;большие и малые буквы отличаются этим битом!
;будем превращать их друг в друга xor-я с этим байтом!
beg:
mov al,[si] ;читаем очередной байт
xor al,ah ;превращаем одного в другого (и неважно, какой он был!)
mov [si],al ;возвращаем на место
inc si ;адрес следующего
loop beg ;цикл по всем

mov byte ptr [si],'$' ;закрываем строку для функции 9
mov ah,9
int 21h ;выводим

mov ah,0
int 16h ;ждем нажатие на клавишу

mov ax,4c00h
int 21h
code ends
end begin
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399158
228
17.11.2015, 00:32
общий
Спасибо большое, вы очень помогли.
Форма ответа