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

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


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

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

Выпуск № 776
от 11.06.2007, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 385, Экспертов: 34
В номере:Вопросов: 6, Ответов: 11


Вопрос № 90221: Здравствуйте, сделайте пожалуйста такую вот задачку: Найти все четырехзначные десятичные числа, у которых сумма первых двух цифр равна сумме двух других. Рузультат вывести в на экран и в файл. ...
Вопрос № 90243: Здравствуйте! Подскажите пожалуйста, как получить целую часть результата деления отбросив отаток....
Вопрос № 90301: Привет! Подскажите, пожалуйста, где и какие книги можно скачать для начинающих?...
Вопрос № 90319: помогите пожалуйста нужно вывести на экран кол-во ЧЕТНЫХ байт в массиве, и как проверить является ли число отрицательным....
Вопрос № 90321: Здравствуйте. Нужны примеры блок-схем программ на ассемблере, по учебе задали. Хорошо было бы пояснить особенности таких блок-схем с учетом специфики ассемблера (я имею в виду отсутствие имен переменных и исп. только регистров и работа с ячейками пам...
Вопрос № 90331: Здравствуйте, мне нужно написать пару резидентов под DOS и в итоге образовалась пара вопросиков. 1) Где и как можно узнать список запущенных программ? Чтобы можно было потом вывести их названия на экран. 2) Как можно заблокировать (а пот...

Вопрос № 90.221
Здравствуйте, сделайте пожалуйста такую вот задачку:

Найти все четырехзначные десятичные числа, у которых сумма первых двух цифр равна сумме двух других. Рузультат вывести в на экран и в файл.
Отправлен: 06.06.2007, 06:48
Вопрос задал: Белоусов Руслан Владимирович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Белоусов Руслан Владимирович!

Для этого делите числа на 1000, 100, 10 - получаете соответствующие цифры. Затем идёт арифметика и логика по разбору и блок вывода чисел.

Например, начать можно так:

mov ecx, 1000
mov ebx, ecx
mov esi, 100
mov edi, 10

m1:
mov eax, ecx
sub edx,edx
div ebx

xchg eax, esp

mov eax, ecx
sub edx, edx
div esi

add esp, eax

ну и т.п.

успехов


---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +79519145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 06.06.2007, 10:54

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Белоусов Руслан Владимирович!

Смотрите приложение.
Суммы равны когда число1+число2-число3-число4=0
В BX хранятся числа 1и2, в DX- 3 и 4
Удачи!

Приложение:

---------
И только наступив на грабли мы преобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 06.06.2007, 12:17

Отвечает: An42
Здравствуйте, Белоусов Руслан Владимирович!
Поиск десятичных чисел происходит по следующей схеме.
Интервал чисел 1000…9999, от 3e8h до 270fh
Рассматриваются текущие числа в шестнад. формате, переводятся в процедуре b10ascii в неупакованных двоично-десятичный формат.
В процедуре s10sum происходит сравнения сумм двух крайних чисел
Если суммы равные то вывод на экран процедура p10con, и в файл file.001 процедура f10file.
Пояснения в программе
Удачи

Приложение:

Ответ отправил: An42 (статус: 4-ый класс)
Ответ отправлен: 07.06.2007, 12:58


Вопрос № 90.243
Здравствуйте! Подскажите пожалуйста, как получить целую часть результата деления отбросив отаток.
Отправлен: 06.06.2007, 10:15
Вопрос задала: Marg1378 (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Marg1378!
Команды div и idiv результат заносят в два регистра - частное и остаток.
Например, в результате:
mov ax,25h
xor dx,dx
mov cx,10
div cx
число из DX:AX = 37 разделится на 10, в результате в AX будет 3, а в DX - 7
Берем AX и получаем требуемое
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 06.06.2007, 10:26

Отвечает: Евгений Иванов
Здравствуйте, Marg1378!

Используйте DIV, IDIV. Получите целое в одном регистре, остаток будет в другом.

Успехов.
---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +79519145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 06.06.2007, 10:43

Отвечает: An42
Здравствуйте, Marg1378!
Деление:

Слово на байт
Делимое AX после деления в AH=остаток, AL=частное

Двойное слово на слово
Старшая часть делимого DX, младшая часть делимого AX, после деления DX=частное, AX=остаток

DIV делитель (без знаковое деление)
IDIV делитель (деление со знаком)
Удачи
Ответ отправил: An42 (статус: 4-ый класс)
Ответ отправлен: 07.06.2007, 13:07


Вопрос № 90.301
Привет! Подскажите, пожалуйста, где и какие книги можно скачать для начинающих?
Отправлен: 06.06.2007, 16:57
Вопрос задала: Ioanna (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Ioanna!

Около 50 книг на любой вкус.

Зубков:Ассемблер.
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 06.06.2007, 17:08
Оценка за ответ: 5
Комментарий оценки:
Спасибочки!!!


Вопрос № 90.319
помогите пожалуйста
нужно вывести на экран кол-во ЧЕТНЫХ байт в массиве, и как проверить является ли число отрицательным.
Отправлен: 06.06.2007, 18:58
Вопрос задал: Zmey22 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Zmey22!

Oтрицательное число Вы можете обнаружить проверяя старший бит байта

or al,al
js ok_minus
plus:. . .

четное число можно обнаружить проверяя младший бит, способов много:
test al,01h
jnz chet


или


push ax
shr al,1
pop ax
jc chet

или

push ax
and al,01h
pop ax
jz chet

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


Вопрос № 90.321
Здравствуйте. Нужны примеры блок-схем программ на ассемблере, по учебе задали. Хорошо было бы пояснить особенности таких блок-схем с учетом специфики ассемблера (я имею в виду отсутствие имен переменных и исп. только регистров и работа с ячейками памяти (как у меня в программе)). Как отобразить на блок-схеме запись и чтение из файла, особенно когда имя файла введено пользователем?
Если сложно, то просто дайте ссылку на нормальную схему к программе на паскале. А то в инете много всяких "блок-схем бизнес-процессов" и пр.
Отправлен: 06.06.2007, 19:08
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Blackie!

Редактор блок-схем.
посмотрите может пригодится, тут же можно найти и примеры.
фигуры:
"прямоугольник" называется "выражение" в нем производятся любые вычисления
mov ax,200
mov bx,300
add ax,bx


"паралелограм" - "ввод/вывод" в нем Вы указываете как происходит общение с пользователем(ввод/вывод символа или строки).
mov ah,09
mov dx,offset out_str;
вывод строки out_str
int 21h

"ромб" - "условие" в нем Вы проверяете что нибуть.
cmp ax,bx
jz yes_equ;
если равны то переход на метку, иначе дальше
no_equ:. . .

"елипс" это метки начала и конца программы
"шестигранник" этой фигурой обозначаются циклы. в редакторе я ее не увидел
но циклы можно организовывать используя условие.
mov cx,max_loop
my_loop: . . .

тело цикла
. . .

loop my_loop

Если кратко.
Удачи!


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


Вопрос № 90.331
Здравствуйте, мне нужно написать пару резидентов под DOS и в итоге образовалась пара вопросиков.

1) Где и как можно узнать список запущенных программ? Чтобы можно было потом вывести их названия на экран.
2) Как можно заблокировать (а потом разблокировать) доступ к дисководу?

Заранее спасибо.
Отправлен: 06.06.2007, 20:22
Вопрос задал: LOST (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Стас
Здравствуйте, LOST!
1) В DOS нет такой возможности. Это однозадачная система. Значит и запущена одна программа, Ваша. (конечно в памяти сидит еще и сама DOS)
Если имеются в виду резиденты, то они стараются не оставлять информации кто ини и откуда. (Чуть мусора остается в PSP).
В принципе можно попытаться, как это делает mem /d, пребрать всю выделенную память, проанализировать и прерывания и таким образом собрать инфу.
2) в DOS? можно попытаться испортить информацию по адресу, если не ошибаюсь,0:78h это может помочь против программ использующих прямой доступ к флоппу через порты (а может и не помочь, если они не полюзуются этой инфой).
Ну а для простоты подменить int13 и на все обращения к дисководу (dl=1) возвращать ошибку.
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 07.06.2007, 08:35
Оценка за ответ: 4

Отвечает: Лысков Игорь Витальевич
Здравствуйте, LOST!
Я не согласен со Стасом по первому вопросу. Нет ничего невозможного....
Имена всех программ и резидентов, и не резидентов (например, одна программа запустила другую...)
можно элементарно узнать, пробежав по списку блоков MCB.
Начиная с ДОС4 (или5), имя запущенной программы хранится в конце сегмента окружения.
Разумеется, если программа освободила свой сегмент окружения, то узнать уже невозможно...
Узнать начало списка MCB можно, узнав адрес "списка списков" по ф-ии 52h int 21h.
Сегмент окружения - по строке "COMSPEC=" в начале. Программу - по CDh 20h (int 20h)
В приложении моя давнишняя программка, которая просто пробегает по всем блокам MCB и показывает, ЧТО за блоки.
Осталось только в сегментах окружения добраться до конца (там будут четыре байта 0,0,1,0), за ними будет имя программы...
Удачи!

Приложение:

---------
Удачи!

Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 08.06.2007, 10:59
Оценка за ответ: 5


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

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

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

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

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


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


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

В избранное