Вопрос № 111553: Здравствуйте, Уважаемые Эксперты!!! Хочется разобраться, как решаются задачки на обработку строк на Ассемблере поэтому, если Вас не затруднит, то покажите, ПОЖАЛУЙСТА, решение двух следующих примеров и, если можно, побольше комментариев, так как ОЧЕН...Вопрос № 111591: Здравствуйте эксперты. Вопрос по адресации памяти. Почему для того, чтобы посчитать линейный адрес нужно значение сегмента умножить на 16, и только потом
добавить смещение?...Вопрос № 111629: Здравствуйте. Возникли вопросы...
В программе нужно было инвертировать строку текста.
делал ввод строки с клавиатуры, и под вводимую строку сразу отводил опр. длину и забивал её пробелами. То же самое делал со строкой, в которую записывал ре...Вопрос № 111631: Доброго времени суток, есть вопросик, имеется переменная типа db и нужно поменять местами первый и последний бит этой меременной, пожалуйста подскажите как это сделать... спасибо....Вопрос № 111670: Здравствуйте, эксперты. Может вопрос,немножко
не в рубрику, но подскажите, пожайлуста, где в сети можно найти литературу по Тестированию и отладке ПО. Нужно для написания курсовой по этой теме....
Вопрос № 111.553
Здравствуйте, Уважаемые Эксперты!!! Хочется разобраться, как решаются задачки на обработку строк на Ассемблере поэтому, если Вас не затруднит, то покажите, ПОЖАЛУЙСТА, решение двух следующих примеров и, если можно, побольше комментариев, так как ОЧЕНЬ хочется понять что к чему:-)
Заранее Всем спасибо!!!
1) Вводится строка s. Зашифровать строку s: букву на следующую (последнюю на первую).
2) Вводится строка s и число k. Вывести k символов с левого конца строки s.
Отправлен: 29.11.2007, 13:50
Вопрос задала: Алена (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Sov
Здравствуйте, Алена! Код задач в приложении, надеюсь достаточно подробно прокомментирован Удачи!
Приложение:
Ответ отправил: Sov (статус: 8-ой класс)
Ответ отправлен: 29.11.2007, 20:55 Оценка за ответ: 5 Комментарий оценки: Sov, я Вам ОЧЕНЬ БЛАГОДАРНА!!!:-) СПАСИБО БОЛЬШОЕ!!! Вам УДАЧИ!!!:-)
Отвечает: Овчинников Алексей
Здравствуйте, Алена!
Здесь обе задачи в одной программе
Написано под компилятор FASM
Приложение:
Ответ отправил: Овчинников Алексей (статус: 2-ой класс)
Ответ отправлен: 29.11.2007, 21:20 Оценка за ответ: 5 Комментарий оценки: Спасибо ОГРОМНОЕ, Алексей!!!!!!!!!!!!!:-) Удачи Вам!!!!!!!:-)
Вопрос № 111.591
Здравствуйте эксперты. Вопрос по адресации памяти. Почему для того, чтобы посчитать линейный адрес нужно значение сегмента умножить на 16, и только потом добавить смещение?
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Мясников Антон Евгеньевич! Данный вопрос к разработчикам Intel-а :) Вот так они сделали... Необходимость подобного "ухищрения" вызвана тем, что регистры 8086/8088 16-битные, а адресная шина 20-битная (адресуется 1 Мб)... Надо же как-то адресовать все пространство...
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 29.11.2007, 17:43 Оценка за ответ: 4 Комментарий оценки: Честно говоря рассчитывал на более развернутый ответ...
Вопрос № 111.629
Здравствуйте. Возникли вопросы...
В программе нужно было инвертировать строку текста.
делал ввод строки с клавиатуры, и под вводимую строку сразу отводил опр. длину и забивал её пробелами. То же самое делал со строкой, в которую записывал результат. В итоге, даже если с клавы вводилось 5 символов, в программе обращалась строка из 64(такую длину задавал), т.е. всё вместе с пробелами.
Так вот, вопросы: Как сделать длину строки задаваемой динамически, как при этом узнать её длину ? (для кол-ва повторений цикла) ? и как при этом сделать строку-приемник той же, нужной длины?
Спасибо.
Отправлен: 29.11.2007, 20:14
Вопрос задал: Petrovich (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 6)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Petrovich!
Динамически это делается только когда используется стек. Используя функция 21h / 0Ah, больше 255 символов Вы ввести не можете. Значит директива STACK 256 превращается в STACK 256+512(для строк по 255 байт)=768. mov dx,offset message int 21h mov byte ptr source, 62 cli;запрещаем прерывания push bp;запоминаем регистр mov bp,sp;запоминаем
регистр стека mov ax,dbMaxSize;максимальный размер не больше 255 символов sub sp,ax;резервируем адрессное пространство для строки ввода mov si,sp;запоминаем указатели mov di,sp;на строку ввода push ax;значение AL будет на месте размера вводимой строки mov
dx,sp;в адрес вводимой строки sub sp,ax;резервируем пространство для 2-й строки push ds;запоминаем регистр push ss;будем работать с регистром стека pop ds;настраиваемся на регистр стека т.к. ds:dx - нужно для прерывания mov ah,0ah ;будем читать строку sti;разрешаем прерывания
и сразу вызываем функию ввода строки lea dx, source int 21h LEA SI,SOURCE ;переходим на первый символ строки inc si inc si LEA DI,DEST;всё вычеркиваем dec di;переходим на кол-во введеных символов mov cl,[di];читаем xor ch,ch mov byte ptr[di],'$';записываем признак оконч
ания строки dec di; Дальше идет копирование и вывод как в Вашей программе inc di mov dx,di
осталось востановить регистры cli pop ds mov sp,bp pop bp sti;всё востановленно
Удачи!
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Доброго времени суток, есть вопросик, имеется переменная типа db и нужно поменять местами первый и последний бит этой меременной, пожалуйста подскажите как это сделать... спасибо.
Отправлен: 29.11.2007, 20:28
Вопрос задал: Pesick (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Овчинников Алексей
Здравствуйте, Pesick!
делается это с помощью логических операций
и операций сдвига
см приложение
Приложение:
Ответ отправил: Овчинников Алексей (статус: 2-ой класс)
Ответ отправлен: 29.11.2007, 21:46 Оценка за ответ: 3 Комментарий оценки: Меняет местами только если на ноль единицу, а наоборот. если старший ноль а младший еденица - нет (
Отвечает: Стас
Здравствуйте, Pesick!
mov al,x
rol al,4
mov x,al
....
x db 12h
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 30.11.2007, 08:43
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Pesick! Еще одно решение при помощи минимума регистров и команд сдвига Смотри приложение
Приложение:
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 30.11.2007, 12:30 Оценка за ответ: 5 Комментарий оценки: Спасибо:)
Отвечает: an42
Здравствуйте, Pesick!
Занесем переменную в AL (в al будет представлять так L??????R)
Выделим крайний левый бит:
mov bl,al ;bl= L??????R
shl bl,7 ;bl=0000000L
Выделим крайний правый бит:
mov bh,al ;bh=L??????R
shr bh,7 ;bh=R0000000
Обнулим в AL крайние биты:
and al,011111110b ;al=0??????0
Вставим крайние биты:
or al,bl ;al=0??????L
or al,bh ;al=R??????L
В AL поменяли крайние биты.
В приложение показано как это происходит программно
Удачи
Приложение:
Ответ отправил: an42 (статус: 6-ой класс)
Ответ отправлен: 01.12.2007, 08:58
Вопрос № 111.670
Здравствуйте, эксперты. Может вопрос,немножко не в рубрику, но подскажите, пожайлуста, где в сети можно найти литературу по Тестированию и отладке ПО. Нужно для написания курсовой по этой теме.
Ответ отправил: Boriss (статус: Профессор) Россия, Саранск Организация: mte WWW:Программирование на Паскале ---- Ответ отправлен: 30.11.2007, 08:12 Оценка за ответ: 5 Комментарий оценки: Спасибо, буду читать. Видимо, поисковиком еще не научился толком пользоваться - вводил ничего конкретного не нашел.