Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 920
от 05.12.2007, 11:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 365, Экспертов: 21
В номере:Вопросов: 5, Ответов: 9


Вопрос № 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
Здравствуйте, Алена!
Код задач в приложении, надеюсь достаточно подробно прокомментирован
Удачи!

Исправлена строка
mov data1[0],13;
в приложении, по просьбе автора.

-----
∙ Отредактировал: Зенченко Константин Николаевич (Специалист)
∙ Дата редактирования: 30.11.2007, 17:58

Приложение:

Ответ отправил: Sov (статус: 8-ой класс)
Ответ отправлен: 29.11.2007, 20:55
Оценка за ответ: 5
Комментарий оценки:
Sov, я Вам ОЧЕНЬ БЛАГОДАРНА!!!:-)
СПАСИБО БОЛЬШОЕ!!!
Вам УДАЧИ!!!:-)

Отвечает: Овчинников Алексей
Здравствуйте, Алена!
Здесь обе задачи в одной программе
Написано под компилятор FASM

Приложение:

Ответ отправил: Овчинников Алексей (статус: 2-ой класс)
Ответ отправлен: 29.11.2007, 21:20
Оценка за ответ: 5
Комментарий оценки:
Спасибо ОГРОМНОЕ, Алексей!!!!!!!!!!!!!:-)
Удачи Вам!!!!!!!:-)


Вопрос № 111.591
Здравствуйте эксперты. Вопрос по адресации памяти. Почему для того, чтобы посчитать линейный адрес нужно значение сегмента умножить на 16, и только потом добавить смещение?
Отправлен: 29.11.2007, 17:12
Вопрос задал: Мясников Антон Евгеньевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Мясников Антон Евгеньевич!
Данный вопрос к разработчикам 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;
всё востановленно

Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 29.11.2007, 22:44


Вопрос № 111.631
Доброго времени суток, есть вопросик, имеется переменная типа 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
Здравствуйте, эксперты. Может вопрос,немножко не в рубрику, но подскажите, пожайлуста, где в сети можно найти литературу по Тестированию и отладке ПО. Нужно для написания курсовой по этой теме.
Отправлен: 30.11.2007, 05:33
Вопрос задал: Чепиков Александр Валерьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Boriss
Здравствуйте, Чепиков Александр Валерьевич!
Была (а может и сейчас существует?) даже рассылка на эту тему.
Простой поиск по Вашему запросу выдал неимоверное количество ссылок:
Тестирование и отладка
Тестирование проекта. Отладка. (Тематический каталог на Королевстве Delphi)
Тестирование и отладка (реферат) (если Вы любитель готовенького)
ТЕСТИРОВАНИЕ И ОТЛАДКА ПРОГРАММНОГО СРЕДСТВА (Лекция)
..
---------
Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: mte
WWW: Программирование на Паскале
----
Ответ отправлен: 30.11.2007, 08:12
Оценка за ответ: 5
Комментарий оценки:
Спасибо, буду читать. Видимо, поисковиком еще не научился толком пользоваться - вводил ничего конкретного не нашел.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.65 от 04.12.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное