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

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


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

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

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

Выпуск № 1032
от 12.05.2008, 06:05

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 134548: Пожалуйста помогите написать прогу!!!Умоляю!!! Суть такая:Даны две квадратные матрицы А и В одинаковой размерности 3*3.Элементы-положительные числа-вводяться с клавиатуры,тип элементов-байт.Получить новую матрицу, каждый элемент которой равен max...
Вопрос № 134576: Здравствуйте. Решил начать изучение ассемблера и у меня возник ряд вопросов. Во первых в своей книге написано что в качестве текстового редактора лучше использовать DOS Navigator.Скажите,где и как мне его найти. Во вторых,написал програм...
Вопрос № 134580: Добрый день уважаемые эксперты! Подскажите как можно записать значение переменной (допустим х) в файл на процессорах 586-го типа заранее спасибо!!! .
Вопрос № 134581: Здравствуйте уважаемые эксперты! Начал изучать ассемблер. У меня вопрос как пользоваться средой Turbo Assembler. Ругается на команду tasm, говорит: "TASM" не является внутренней или внешней командой, исполняемой программой или пакетным файл...
Вопрос № 134699: Ув. эксперты, подскажите пожалуйста каким образом можно сменить метку диска. Пытался с помощью int 21h (69h) при AL=0 удачно считывает метку в буфер, при AL=1 писать новую не хочет.. Заранее благодарен .....
Вопрос № 134828: Здравствуйте, уважаемые профессионалы! Помогите пожалуйста справиться с задачей! Определить результативность стрельбы (n/n1) в круглую мишень радиусом R=10, где n - количество попаданий; n1 - количество выстрелов. Координаты встречи пули с ...
Вопрос № 134840: Помогите решить задачу! Ввести 2 символа С и D и число K. Вывести на экран K строк вида: CD CDCD CDCDCD CDCDCDCD...Например, если k=4. Особенно хочу знать как осуществляется перевод на другую строку...Заранее большое спасибо!...
Вопрос № 134916: УВАЖАЕМЫЕ ЭКСПЕРТЫ,помогите написать программу по теме: "Организация циклов и работа с целочисленными одномерными массивами", очень прошу, я не знаю как её написать, а здавать нужно уже завтра! Задача:найти отдельно сумму четных и сумму...
Вопрос № 135041: Здраствуйте. Помогите пожалуйста, у меня вопрос. как можно "После ввода двох строк, вывести одинаковые символы на экран? Заранее спасибо С уважением, Юрий!...
Вопрос № 135068: Здравствуйте, Уважаемые эксперты! Очень нужна Ваша помощь! Помогите разобраться с задачкой: Дан массив из 8 байтов. Рассматривая его как массив из 64 бит, посчитать длину самой длинной последовательности единиц....
Вопрос № 135099: Здравствуйте, уважаемые эксперты! Помогите пожалуйста! Возникла проблема с решением. Необходимо написать пример с использованием команд: movs, repne. std. Проблема в том, что movs ведь служит для пересылки строки, а тут repne - "повторять по...
Вопрос № 135243: Написать прог, осуществляющую подсчет числа разных символов в введенной пользователем строке.(т.е. кол-во разных символов напр строка: 111444ааабббкккк 1 - 3 4 - 3 а - 3 б - 3 к - 4 Всех символов(т.е. то что можно ввести с...
Вопрос № 135257: Здравствуйте! Заинтересовался написанием файлового менеджера и возник следующий вопрос: Обычно под сочетания <ALT+F1> и <ALT+F2> показывают список имеющихся дисковых устройств для последующего выбора. А вот как можно определит...
Вопрос № 135271: Здравствуйте! Никак не могу разобраться, как написать одну программку... Необходимо написать программ, которая удалит все скрытые и системные файлы из папки в которой она находиться. Вроде в функциях разобрался... а не получается... н...
Вопрос № 135280: Здрасте!! ПОМОГИТЕ! Немогу зделать в асемблере казалось бы элементарною вешь!!!! Как из двух строк, зделать одну.... что бы они разделялись пробелами!!!??? Ну, или , к примеру убирать слова из предложения!!!! Заранее огромное спс...
Вопрос № 135300: Здравствуйте, дорогие эксперты ! Помогите, пожалуйста, решить задачу ввести число К (К<5) и символ С. Вывести в следующем виде: С К С К С К ...(и так всего 80 символов). и данную строку вывести К раз. ВЫход по нажатию клавиши. ...
Вопрос № 135338: расскажите о всех аспектах прерываний в защищенном режиме. О шлюзах задач, прерываний и исключений вроде. О переносе IRQ на другие адреса и т. д. !!!!!!! ..
Вопрос № 135340: Здравствуйте Эксперты! Помогите пожалуйста написать такую программу на ассемблере: С клавиатуры вводятся 2 символа c и d и число k. Затем выводятся на экран в следующей последовательности: c d k c d (k-1) c d (k-2)....c d 1. выход по нажатию ...
Вопрос № 135572: Здравствуйте! Очень долго искал ошибку в приложении 1 при помощи отладчика. Никак поиск не получался. Как видите: маска файлов идет сразу после int 21h. Потом сделал вставку в виде db 0 и тогда все через отладчик получилось. Видимо не зря...
Вопрос № 135687: Доброго времени суток. Помогите сделать небольшую программку: В исходной строке указанное число символов, начиная с заданной позиции, переписать в конец строки. Спасибо за внимание и попытки помочь....

Вопрос № 134.548
Пожалуйста помогите написать прогу!!!Умоляю!!!
Суть такая:Даны две квадратные матрицы А и В одинаковой размерности 3*3.Элементы-положительные числа-вводяться с клавиатуры,тип элементов-байт.Получить новую матрицу, каждый элемент которой равен max(Aij,Bij).Вывести исходные и новую матрицы.В новой матрице поменять местами элементы строки номер N на элементы строки номер M.Значения N и M вводяться с клавиатуры.Вывести преобразованную матрицу.
Отправлен: 28.04.2008, 18:20
Вопрос задал: Cafu777 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Boriss
Здравствуйте, Cafu777!
Вот как это можно сделать. Обратите внимание, что директива n equ 3 позволяет легко изменить ранг матриц
Если что не понятно будет - пишите в минифоруме
Исходный код программы можно также скачать здесь: http://rusfaq.ru/upload/569


С учетом пожеланий в минифоруме программа переделана и снабжена комментариями. Скачать можно по адресу http://rusfaq.ru/upload/579


ЗЫ: теперь нужно получать EXE-файл

Приложение:

---------
Вывод - то место в тексте, где вы устали думать

Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: Мордовский госуниверситет, Саранск, Факультет Электронной Техники
WWW: Программирование на Паскале
----
Ответ отправлен: 29.04.2008, 13:15
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!Век не забуду!!!


Вопрос № 134.576
Здравствуйте. Решил начать изучение ассемблера и у меня возник
ряд вопросов. Во первых в своей книге написано что в качестве
текстового редактора лучше использовать DOS Navigator.Скажите,где и
как мне его найти. Во вторых,написал программу в текстовом редакторе
PWB и так и не понял как мне её ассемблировать. Напишите
пожалуйста,как ассемблировать программу и как запускать её под
отладчиком. Я читал книгу,но так этого и не понял,а понять хочется. Заранее благодарен.
Отправлен: 28.04.2008, 19:58
Вопрос задал: Рунков Артур Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

Написав программу в PWB.
1) Вам нужно наcтроить проэкт(см. рис1 - выбираете закладку Set Project Template и рис2 - выбираете тип исполняемой программы).
2) После этого у Вас появится возможности см. рис3 - компиляции и рис4 - запуска и отладки;
3) Выбрав отладку Вы попадаете в в окно CodeView, выбрав окна с нужной для Вас информацией, можете приступать к отладке управляя F8, F10 и F5(см. строку статуса).

DOS Navigator и ещё много разнообразных навигаторов и коммандеров - тут уже Вам выбирать.
Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 02.05.2008, 15:07


Вопрос № 134.580
Добрый день уважаемые эксперты!

Подскажите как можно записать значение переменной (допустим х) в файл на процессорах 586-го типа

заранее спасибо!!!
Отправлен: 28.04.2008, 20:44
Вопрос задал: Setored1 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Trulala
Здравствуйте, Setored1!

У процессора нет такой команды "записать значение переменной в файл", файл является высокоуровневой структурой, файлами занимается операционная система. Вам нужно определиться с операционной системой и использовать системные функции работы с файлами.
Обычно последовательность действий такая:
1. создать файл
2. произвести запись в файл
3. закрыть файл
Ответ отправил: Trulala (статус: 2-ой класс)
Ответ отправлен: 03.05.2008, 12:34


Вопрос № 134.581
Здравствуйте уважаемые эксперты! Начал изучать ассемблер. У меня вопрос как пользоваться средой Turbo Assembler. Ругается на команду tasm, говорит: "TASM" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Заранее благодарен.
Отправлен: 28.04.2008, 21:17
Вопрос задал: Михаил Иванович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Юрьевич Гуськов Андрей
Здравствуйте, Михаил Иванович!
У Вас не определены переменные окружения. То есть, когда Вы в командной строке набираете TASM, операционная система ищет этот файл в текущей папке, папке с Виндой и прочих. Естессно, не найдя его, ОС ругнётся про "неверную команду". Вывод: при запуске из командной строки прописывайте полный путь к ТАСМ, т.е. напр. C:Progra~1TASM32TASM.exe (если ваш тасм установлен в папку TASM32 в Program Files).
Ответ отправил: Юрьевич Гуськов Андрей (статус: 1-ый класс)
Ответ отправлен: 29.04.2008, 17:32


Вопрос № 134.699
Ув. эксперты, подскажите пожалуйста каким образом можно сменить метку диска. Пытался с помощью int 21h (69h) при AL=0 удачно считывает метку в буфер, при AL=1 писать новую не хочет..

Заранее благодарен ..

Приложение:

Отправлен: 29.04.2008, 16:13
Вопрос задал: HEND77 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Airyashov
Здравствуйте, HEND77!
Данная функция недокументирванна, так что её работу гарантировать нельзя.
Ответ отправил: Airyashov (статус: 5-ый класс)
Ответ отправлен: 29.04.2008, 17:15


Вопрос № 134.828
Здравствуйте, уважаемые профессионалы! Помогите пожалуйста справиться с задачей!

Определить результативность стрельбы (n/n1) в круглую мишень радиусом R=10, где n - количество попаданий; n1 - количество выстрелов. Координаты встречи пули с плоскостью мишени заданы в виде двух массивов Х(I) и У(I); I=1,2,..,10. Определение попадания снаряда в мишень оформить в виде подпрограммы.

Знания ассемблера ещё очень небольшие, так как изучать его начала только в апреле. Желательно чтобы в программе присутствовали комментарии. Заранее ОГРОМНОЕ спасибо!
Отправлен: 30.04.2008, 14:25
Вопрос задала: Lestatka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Trulala
Здравствуйте, Lestatka!

система координат - декартовая
координатная плоскость лежит в плоскости мишени
мишень - диск с радиусом R
начало координат находится в центре окружности диска мишени

Попадание в мишень будем считать успешным при r < R.
r = sqrt(x^2+y^2);
Без применения функции вычисления квадратного корня можно сравнивать квадраты радиусов:
(r < R) => (r^2 < R^2)
Тогда попадание в мишень произойдет при (x^2+y^2) < R^2

-----------------------------------------------------------

Программу для TASM смотрите в приложении.

Приложение:

Ответ отправил: Trulala (статус: 2-ой класс)
Ответ отправлен: 01.05.2008, 16:19


Вопрос № 134.840
Помогите решить задачу! Ввести 2 символа С и D и число K. Вывести на экран K строк вида:
CD
CDCD
CDCDCD
CDCDCDCD...Например, если k=4. Особенно хочу знать как осуществляется перевод на другую строку...Заранее большое спасибо!
Отправлен: 30.04.2008, 16:21
Вопрос задала: Дацковская Анна Андреевна (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

Смотрите код в приложении.
ps:вопросы задавайте в мини-форуме.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 05.05.2008, 22:20


Вопрос № 134.916
УВАЖАЕМЫЕ ЭКСПЕРТЫ,помогите написать программу по теме: "Организация циклов и работа с целочисленными одномерными массивами", очень прошу, я не знаю как её написать, а здавать нужно уже завтра!
Задача:найти отдельно сумму четных и сумму нечетных элементов.
Спасибо заранее!
Отправлен: 01.05.2008, 13:29
Вопрос задала: LapSia (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

В приложении образец написания такого вида программ.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 02.05.2008, 16:39
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное за помощь!!!!


Вопрос № 135.041
Здраствуйте.
Помогите пожалуйста, у меня вопрос. как можно "После ввода двох строк, вывести одинаковые символы на экран?
Заранее спасибо
С уважением, Юрий!
Отправлен: 02.05.2008, 16:28
Вопрос задал: Макалов Юрий (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

В приложении программа, вводит две строки и выводит только те символы, которые встречаются в обеих строках.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 06.05.2008, 15:54
Оценка за ответ: 5
Комментарий оценки:
Спасибо вам большое.
Я очень признателен вам Константин Николаевич за ваш ответ.


Вопрос № 135.068
Здравствуйте, Уважаемые эксперты! Очень нужна Ваша помощь! Помогите разобраться с задачкой: Дан массив из 8 байтов. Рассматривая его как массив из 64 бит, посчитать длину самой длинной последовательности единиц.
Отправлен: 02.05.2008, 19:10
Вопрос задал: Borman Karlovich (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

Программа в приложении.
ps: вопросы в мини-форум.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 06.05.2008, 13:48
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за Ваш более чем полный ответ!


Вопрос № 135.099
Здравствуйте, уважаемые эксперты!
Помогите пожалуйста! Возникла проблема с решением. Необходимо написать пример с использованием команд: movs, repne. std. Проблема в том, что movs ведь служит для пересылки строки, а тут repne - "повторять пока не"... Может, где-то должна находится переменная, с которой идет сравнение - пока она не встретится в пересылаемой строке? Перерыл интернет - ничего не нашел.
Большое спасибо за помощь!
Отправлен: 03.05.2008, 03:49
Вопрос задал: Mangoost (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Trulala
Здравствуйте, Mangoost!

MOVS/MOVSB/MOVSW/MOVSD
(MOVe String Byte/Word/Double word)
Пересылка строк байтов/слов/двойных слов

Алгоритм работы:

* выполнить копирование байта, слова или двойного слова из операнда источника в операнд приемник, при этом адреса элементов предварительно должны быть загружены:
o адрес источника — в пару регистров ds:esi/si ( ds по умолчанию, допускается замена сегмента);
o адрес приемника — в пару регистров es:edi/di (замена сегмента не допускается);
* в зависимости от состояния флага df изменить значение регистров esi/si и edi/di:
o если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;
o если df=1, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;
* если есть префикс повторения, то выполнить определяемые им действия (см. команду rep).

Выполнение команды не влияет на флаги.

Команды п ересылают элемент из одной ячейки памяти в другую. Размеры пересылаемых элементов зависят от применяемой команды. Команда movs может работать с элементами размером в байт, слово, двойное слово. В качестве операндов в команде указываются идентификаторы последовательностей этих элементов в памяти. Реально эти идентификаторы используются лишь для получения типов элементов последовательностей, а их адреса должны быть предварительно загружены в указанные выше пары регистров. Транслятор, обработав команду movs и выяснив тип операндов, генерирует одну из машинных команд movsb, movsw или movsd. Машинного аналога для команды movs нет. Для адресации операнда приемник обязательно должен использоваться регистр es.
Для того чтобы эти команды можно было использовать для пересылки последовательности элементов, имеющих размерность байт, слово, двойное слово, необходимо использовать префикс rep.
Префикс rep заставляет циклически выполняться команды пересылки до тех пор, пока содержим ое регистра ecx/cx не станет равным нулю.

REP/REPE/REPZ/REPNE/REPNZ
(REPeat string operation)
Повторить цепочечную операцию

указание условного и безусловного повторения следующей за данной командой цепочечной операции.

Алгоритм работы зависит от конкретного префикса. Префиксы rep, repe и repz на самом деле имеют одинаковый код операции, их действия зависят от той цепочечной команды, которую они предваряют:

* rep используется перед следующими цепочечными командами и их краткими эквивалентами: movs, stos, ins, outs. Действия rep:
1. анализ содержимого cx:
o если cx=0, то передать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);
2. уменьшить значение cx=cx–1 и вернуться к шагу 1;
* repe и repz используются перед следующими цепочечными командами и их краткими эквивалентами: cmps, scas. Действия repe и repz:
1. анализ содержимого cx и флага zf:
o если cx=0 или zf=0, то п ередать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);
2. уменьшить значение cx=cx-1 и вернуться к шагу 1;
* repne и repnz также имеют один код операции и имеют смысл при использовании перед следующими цепочечными командами и их краткими эквивалентами: cmps, scas. Действия repne и repnz:
1. анализ содержимого cx и флага zf:
2. уменьшить значение cx=cx–1 и вернуться к шагу 1.

Команды rep, repe, repz, repne и repnz в силу специфики своей работы называются префиксами. Они имеют смысл только при использовании цепочечных операций, заставляя их циклически выполняться и тем самым без организации внешнего цикла обрабатывать последовательности элементов фиксированной длины. Большинство применяемых префиксов являются условными, то есть они прекращают работу цепочечной команды при выполнении определенных условий.

У этой информации есть автор: Юров Виктор Иванович
преподаватель СПВУРЭ ПВО

-----
∙ Отредактировал: Зенченко Константин Николаевич (Профессионал)
∙ Дата редактирования: 07.05.2008, 18:46
Ответ отправил: Trulala (статус: 2-ой класс)
Ответ отправлен: 03.05.2008, 12:34

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

Префиксы REPE|REPZ имеют опкод 0F316(111100112)повторять пока равно или пока ZF=1,
Префиксы REPNE|REPNZ имеют опкод 0F216(111100102) повторять пока не равно или пока ZF=0,
делаем вывод, что именно последний бит указывает какое должно быть значение флага ZF для продолжения выполнения команды.
Опкод префикса REP совпадает с опкодом префиксов REPE|REPZ, отсюда ещё один вывод действие префикса зависит от того какая строковая команда стоит за ним. Т.е. для команд CMPS или SCAS порверяется последний бит и значение флага ZF(после выполнения этих команд), для остальных команд MOVS, STOS, LODS, INS и OUTS, он не проверяется или просто игнорируется процессором. Если учесть это, то опкод для этих команд будет 1111001х2 или 0F2х16, где х- любое значение бита. Отсюда делаем ещё один вывод, что использование любого префикса с условием, вместе с командами MOVS, STOS, LODS, INS и OUTS выполняется аналогично префиксу REP.
Проверьте на практике.
Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 07.05.2008, 18:39


Вопрос № 135.243
Написать прог, осуществляющую подсчет числа разных символов в введенной пользователем строке.(т.е. кол-во разных символов
напр строка: 111444ааабббкккк
1 - 3
4 - 3
а - 3
б - 3
к - 4
Всех символов(т.е. то что можно ввести с клавы)
Прога в приложение делает подсчет, но только цыфр.

Приложение:

Отправлен: 04.05.2008, 03:14
Вопрос задал: STALKER58 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, STALKER58!
Программа в приложении "делает подсчет", и не только цифр...

Приложение:

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

Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 07.05.2008, 10:39
Оценка за ответ: 5
Комментарий оценки:
Ответ развернуты и коментированный, большое спасибо в проге полностью разобрался.


Вопрос № 135.257
Здравствуйте!
Заинтересовался написанием файлового менеджера и возник следующий вопрос:
Обычно под сочетания <ALT+F1> и <ALT+F2> показывают список имеющихся дисковых устройств для последующего выбора.
А вот как можно определить список этих самых доступных букв?
Смотрел функции 0EH, 19H прерывания 21H – но там же получается нужно делать перебор? Т.е., как я понял, делаем какой-то диск текущим, и затем смотрим, получилось ли. Навряд ли это правильно.

И еще позвольте. В книге Зубкова много разных интересных функций по работе с длинными именами файлов, но я там не нашел функцию по переименованию файла (т.е. аналог прежней функции 56H).
Отправлен: 04.05.2008, 09:09
Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Бартосик Феликс Михайлович!
Как вариант, список дисков можно получить, пробежав по списку DPB.
Смотри приложение.

-----------
Добавлено 08.05.08:
И еще один вариант, тоже в приложении, используется тот факт,
что ф-я парсинга 29h сообщает о том, если диск не существует.
Работает при удалении/добавлении дисков!
----------

А для работы с длинными именами есть функция ah=71h.
При al=56h (не случайно в AL 56h ... :)) она служит как раз для перемещения/переименования файла
DS:DX -> ASCIZ (long allowed) старого имени файла или директории
ES:DI -> ASCIZ нового имени
Если второе имя без пути, то будет переименование...
Вернет: CF=0, если отработало
CF=1, если ошибка
AX = код ошибки
7100h если функция не поддерживается
Примечание: файл может быть переименован в другой директории, но не на другом диске.

Приложение:

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

Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 06.05.2008, 15:06
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо Игорь Витальевич ! Вы мне очень помогли! Посидел - повникал - все работает! Возникли небольшие вопросы, которые я сейчас наберу в мини-форум


Вопрос № 135.271
Здравствуйте!
Никак не могу разобраться, как написать одну программку...
Необходимо написать программ, которая удалит все скрытые и системные файлы из папки в которой она находиться.
Вроде в функциях разобрался... а не получается...
написать надо в ассемблере под дос. буду очень благодарен, если поможете
Отправлен: 04.05.2008, 11:13
Вопрос задал: Azazel (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Azazel!
Видать плохо в функциях разобрался...
Надо было свои пробы выложить, подправили бы, больше проку бы было...
Ну да ладно, держи программку под TASM в приложении...

Приложение:

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

Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 05.05.2008, 10:51
Оценка за ответ: 5
Комментарий оценки:
спасибо огромное!


Вопрос № 135.280
Здрасте!! ПОМОГИТЕ! Немогу зделать в асемблере казалось бы элементарною вешь!!!! Как из двух строк, зделать одну.... что бы они разделялись пробелами!!!??? Ну, или , к примеру убирать слова из предложения!!!! Заранее огромное спс
Отправлен: 04.05.2008, 12:56
Вопрос задал: Vadme28 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Boriss
Здравствуйте, Vadme28!
По адресу http://rusfaq.ru/upload/615 Вы можите скачать исходный файл, решающий Вашу первую проблему
Получить нужно .СОМ-файл. Ему при работе выделяется 64 килобайта памяти. В начале размещается код программы, в конце - стек. А середину можно использовать как хочешь.
Вот так и делается: в конце файла объявляется метка (имя) dst, которая определяет начала области, куда копируются строки поочереди с помощью удобных строковых инструкций. Есть еще удобнее - MOVSB. В сочетании с REP код будет еще компактнее. Если хотите - покажу.
Что касается второй, то возни чуть-чуть побольше. Если надо .... напишите в минифоруме
---------
Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: Мордовский госуниверситет, Саранск, Факультет Электронной Техники
WWW: Программирование на Паскале
----
Ответ отправлен: 05.05.2008, 09:46
Оценка за ответ: 5
Комментарий оценки:
Чё ещё за минфорум? Если не сложно, напиши текст !


Вопрос № 135.300
Здравствуйте, дорогие эксперты !
Помогите, пожалуйста, решить задачу
ввести число К (К<5) и символ С. Вывести в следующем виде:
С К С К С К ...(и так всего 80 символов). и данную строку вывести К раз. ВЫход по нажатию клавиши.

Для примера у меня имеется задача но с другим условиям в которой я не могу разобраться! Может быть это вам поможет!
(ввести число К и символ С. Вывести в следующем виде:
СК СК СК ...(и так всего 80 символов)..Выход по нажатию клавиши.)
Задача:
locals

ASSUME cs:code, ds:code

code SEGMENT
org 100h

entry_point:
jmp start

;данные COM
enter_digit_mess DB 'press digit K key:',0
enter_symbol_mess DB 'press symbol C key:',0

digit_K DB '0',0
symbol_C DB 'A',0

start:
;установка текстового видеорежима
mov ax,0003h
INT 10h

;ввод символа десятичной цифры K
lea ax,enter_digit_mess
mov dl,0
call PrintStr

mov ah,0
INT 16h
cmp al,'0'
jb exit_error
cmp al,'9'
ja exit_error

mov digit_K,al
lea ax,digit_K
mov dl,1
call PrintStr

;ввод символа C
lea ax,enter_symbol_mess
mov dl,2
call PrintStr

mov ah,0
INT 16h

mov symbol_C,al
lea ax,symbol_C
mov dl,3
call PrintStr

;вывод строки
mov ax,0B800h
mov es,ax
mov al,80*2
mov dl,5
mul dl
mov di,ax
cld
mov cx,80
mov ah,digit_K
mov al,symbol_C
mov dl,' '

write_string:
stosb
dec cx
test cx,cx
jz exit_OK
inc di
xchg ah,al
stosb
dec cx
test cx,cx
jz exit_OK
inc di
xchg ah,al
mov es:[di],dl
dec cx
test cx,cx
jz exit_OK
inc di
inc di
jmp write_string

exit_error:
mov al,1
jmp exit
exit_OK:
mov ah,0
INT 16h
mov al,0
exit:
mov ah,4Ch
INT 21h

;---------------------------------------------------------
;DS:AX - адрес выводимой строки; DL - номер строки дисплея
;---------------------------------------------------------

PrintStr PROC
push es
push si
push di

mov si,ax
mov ax,0B800h
mov es,ax
mov al,80*2
mul dl
mov di,ax
cld

next_char:
lodsb
test al,al
je @@exit
mov es:[di],al
inc di
inc di
jmp next_char

@exit:
pop di
pop si
pop es
ret
PrintStr ENDP

code ENDS

END entry_point

Говорю ,вам , всем спасибо даже за то , что прочитали мое письмо!
Спасибо до свидание!:):):)

Отправлен: 04.05.2008, 16:14
Вопрос задала: Обрезан Альфия Альбертовна (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Airyashov
Здравствуйте, Обрезан Альфия Альбертовна!

Если закидывать вопрос каждую неделю, то обязательно кто-нибуть поможет, на халяву?

Вот изменения которые надо внести в программу которая у Вас уже есть

write_string:
stosb
dec cx
test cx,cx
jz exit_OK

inc di
mov es:[di],dl
dec cx
test cx,cx
jz exit_OK

inc di
inc di
xchg ah,al
stosb
dec cx
test cx,cx
jz exit_OK

inc di
xchg ah,al
mov es:[di],dl
dec cx
test cx,cx
jz exit_OK

inc di
inc di
jmp write_string
Ответ отправил: Airyashov (статус: 5-ый класс)
Ответ отправлен: 04.05.2008, 16:39
Оценка за ответ: 5
Комментарий оценки:
Здравствуйте!Наверно можно уже сказать добрый вечер! вот даже и недумала о том , что кто-то может написать!у меня аш руки перестают слушатся, от такого волнения! если бы я в этом предмете хоть, как нибудь разбиралась, то я сама решила,но наверника мне этого недано. я рада , что кому-то можно обратится в трудный момент. от такой радасти,даже дар речи теряется! да и порой словами многое не скажеш! но несколько слов я все-таки скажу:спасибо вам за все!за вашу поддержку, и понимание о том, что какому-то маленкому человечку на этой большой планете необходимо помощь!пусть будет у вас в 100 раз больше такого счастья как у меня , когда я получила ваше письмо с ответом!желаю вам всего доброго и досвидание!:):):):):):):):):):):):):):):):):):):):):)


Вопрос № 135.338
расскажите о всех аспектах прерываний в защищенном режиме. О шлюзах задач, прерываний и исключений вроде. О переносе IRQ на другие адреса и т. д. !!!!!!!
Отправлен: 04.05.2008, 20:32
Вопрос задал: Blackshadow (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Blackshadow!
О защищенном режиме в двух словах не скажешь...
Читай литературу или зайди на сайт, там много электронных книг, в том числе и по защищенному режиму.
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 07.05.2008, 10:08
Оценка за ответ: 5
Комментарий оценки:
это то, что нужно. поиск мне не выдал такого полного сайта. мне понравился sasm.narod.ru, но тут больше конечно. спасибо


Вопрос № 135.340
Здравствуйте Эксперты! Помогите пожалуйста написать такую программу на ассемблере:
С клавиатуры вводятся 2 символа c и d и число k. Затем выводятся на экран в следующей последовательности: c d k c d (k-1) c d (k-2)....c d 1.
выход по нажатию клавиши.
Отправлен: 04.05.2008, 20:49
Вопрос задал: Jones (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

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

Программа в приложении.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 05.05.2008, 14:50
Оценка за ответ: 5


Вопрос № 135.572
Здравствуйте!
Очень долго искал ошибку в приложении 1 при помощи отладчика.
Никак поиск не получался. Как видите: маска файлов идет сразу после int 21h. Потом сделал вставку в виде db 0 и тогда все через отладчик получилось.
Видимо не зря, подумал я, что при компиляции приложения 2 между сегментами .code и .data автоматом компилируется db 0. (А зачем действительно этот нолик вставляется?)

А потом я подумал - не отладчик ли здесь виноват: может быть перед тем как выполнить int 21h он в начале маски вставляет int 3 ??

Помогите разобраться в этих мыслях.
Хотел было выполнить эксперимент без отладчика, но так и придумал как отделить звездочки от int 21h - ведь они потом будут выполняться как код?
И если не трудно, объясните разницу в оформлении приложений. Я привык все оформлять как в первом - так научился по рассылке Калашникова; но сейчас вижу, что большинство примеров в виде2. Может "name segment... name ends" и .code - синонимы (или как?).
И почему в первом приложении пишем "CCC ENDS END BEGIN" , а не наоборот? ведь в начале идет "CCC SEGMENT ...BEGIN:" Я в смысле , если рассуждать логически какой-то здесь перекрест идет.

Приложение:

Отправлен: 06.05.2008, 09:27
Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Бартосик Феликс Михайлович!
Давай по порядку...
1)Поиск не получается, потому что в cx задано искать файлы без атрибутов.
Т.к. все файлы наверняка с атрибутом "архивный", то ничего и не находит...
Обрати внимания: возвращается код возврата 12h (больше ничего не находится)
2)Думаю, не открою большую тайну для тебя, если скажу, что у сегментов
есть атрибут выравнивания (на байт, на слово, и т.д.)
Так вот, применение .code, .data приводит к созданию сегментов, выровненных
на СЛОВО (2 байта). У тебя длина кодового сегмента нечетная. Думаю, уже
понятно, откуда получается нолик между сегментами? :)
Кстати, загляни в конец листинга, там увидишь подтверждение моих слов...
3)Да, ты прав насчет отладчика. Действительно, при пошаговой
отладке отладчик заменяет первый байт, следующий за командой на 0cch
В твоем случае, попадаем на данные...
Другое дело, что данные так мешать с кодом нельзя! Не будет работать !
4)Чтобы поместить данные ("звездочки") в коде, можно, например, сделать jmp
перед данными на метку за данными. Или вставь перед звездочками код
завершения программы, а то чего-то незавершенность какая-то...
5)Более универсальным способом является первый способ.
Во втором .model, .code, .data и другие по сути являются макро, которые облегчают
описание сегментов.
Ну и, наконец, 6) В приложении 1 приведена программа, в которой задан сегмент ССС, который находится между SEGMENT и ENDS.
Если бы у нас были еще сегменты, то мы их разместили бы за CCC ENDS
Оператор же END завершает весь исходник. Все, что за END-ом не рассматривается!
Поэтому он должен быть последним!
Операндом у END-а является метка старта программы.
Она, кстати, (для формата EXE, разумеется) может быть в любом месте любого кодового сегмента.
Для формата COM точка входа всегда по адресу 100h

Удачи в освоении ассемблера! Искренне рад такому рв ению...
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 06.05.2008, 10:14
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо Игорь Витальевич, Вы всегда так здорово и подробно отвечаете! Но все-таки отладчик виноват, я догадался позже, как его вычислить - подробнее на мини-форуме.


Вопрос № 135.687
Доброго времени суток. Помогите сделать небольшую программку:

В исходной строке указанное число символов, начиная с заданной позиции, переписать в конец строки.

Спасибо за внимание и попытки помочь.
Отправлен: 06.05.2008, 21:50
Вопрос задал: Хохряков Виктор Вадимович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

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

Программа в приложении.
Есть только контроль введеного числа если оно превышает максимальную длину строки 255 байт.
Вместо этой строки
dbInpStr db 512 dup(?)
можно оставить только
dbInpStr db ?
Но это только для данной модели памяти и если эта запись находится в конце программы.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 07.05.2008, 14:06
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо! Очень интересное решение задачи.


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.92 pre 5.0 RC2 от 09.05.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное