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

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


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

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

Выпуск № 631
от 16.12.2006, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 373, Экспертов: 29
В номере:Вопросов: 8, Ответов: 12


Вопрос № 66395: Я использую masm32.В приложении прога.При превращении в obj-файл MASM32 выдаёт: Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp.1981-1997. All rights reserved. Assembling: fatal error A1000: cannot open f...
Вопрос № 66399: У меня есть вопрос по Assmу. Я только начал изучать его и у меня появились вопросы. При создании программы в оболочке Far создаем файл с именем 11.asm. Потом создали командный файл amake.bat. Дальше переходим на 11.asm. и запускаем в командной с...
Вопрос № 66481: При линковании в экзешник пишет "Warning: No stack " но все работает к чему бы эта надпись??? D:TASM>tlink lab1 Turbo Link Version 4.0 Copyright (c) 1991 Borland International Warning: No stack...
Вопрос № 66485: Здравствуйте уважаемые эксперты! Объясните пожалуйста, как ассемблер использует функции 3dh, 3fh, 40h, 3eh 21-го прерывания при работе с файлами. Выполнив трансляцию следующего кода и запустив файл я естественно не увидел процесса открытия...
Вопрос № 66486: Уважаемые эскперты: Ниже пример программы ввода вывода чисел. сейчас происходит примерно так: запустили программу c:1.exe спрашивают введите число: "вводим" 12345 Получаем - Ваше число 12345 как сделать так что бы ввод ...
Вопрос № 66490: Здравствуйте. В задаче есть такой кчосек: Х^5 (переменная Х в пятой степени). Как реализовать на ассемблере возведение числа в степень? А то как то умножать число само на себя 4 раза нелепо. Заранее спасибо!...
Вопрос № 66509: Добрый день. У меня Win XP, использую его дос, когда я пробую запустить ком файл своего резидента, то получаю сообщение о том, что обнаружена недопустимая инструкция процессора по такому-то адресу. В чем может быть проблема? Может мне использ...
Вопрос № 66551: -Скачал с вашего сайта MASM611 все сделал как в (книге Калашникова) > книге в приложении№1 (распаковал и тд.зашел в папку BIN) , но вот > где писать программу?, как ее активировать?, куда?(в каком именно файле и на какой он подействует)...

Вопрос № 66.395
Я использую masm32.В приложении прога.При превращении в obj-файл
MASM32 выдаёт:
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp.1981-1997. All rights reserved.
Assembling: fatal error A1000: cannot open file : D:masm32Tryrunpr1.asm
_
Assembly Error

Приложение:

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

Отвечает: Mashin
Здравствуйте, Loriendil!
Это ошибка означает что ассемблер не может найти исходный файл.
Убедитесь что файл pr1.asm расположен по адресу D:masm32Tryrun
Ответ отправил: Mashin (статус: 2-ой класс)
Ответ отправлен: 10.12.2006, 22:57


Вопрос № 66.399
У меня есть вопрос по Assmу.
Я только начал изучать его и у меня появились вопросы. При создании программы в оболочке Far создаем файл с именем 11.asm. Потом создали командный файл amake.bat. Дальше переходим на 11.asm. и запускаем в командной строке amake 11. И тут пролет он пишет «amake» не является внутренней или внешней командой, исполняемой программой или пакетным файлом. В чем моя ошибка. Подскажите пожайлуста.
Система ОС – ХР
Проц. AMD Athlon-64 3000.
Отправлен: 10.12.2006, 20:22
Вопрос задал: Merlin09 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Волков Павел Юрьевич
Здравствуйте, Merlin09!
Батник amake.bat, должен быть в папке компилятора, туда же положите и исходник(текст программы). Месторасположение батника не включено в переменную PATH, поэтому или положите в одну из папок, включенных в PATH (список папок можно узнать через "set path", в коммандной строке) или выполняйте его в текущей папке.
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 10-ый класс)
Ответ отправлен: 11.12.2006, 08:11

Отвечает: Луковкин Николай Иванович
Здравствуйте, Merlin09!
Прежде чем ответить на основной Ваш вопрос, давайте с Вами проверим правильно ли установлены файлы компилятора в оболочке FAR?
1.Откройте папку, где у Вас установлена оболочка FAR (у меня в корневом каталоге диска С:)
2. Проверьте в этом же месте, где и оболочка FAR, наличие папки с названием myasm (т.к. у меня компилятор MASM). Название этой же папки,соответсвенно, должно присутствовать и на панели оболочки FAR.
3.Создаем командные файлы компилятора:
3.1.Открываем папку myasm, далее папку bin. Поочередно открываем (думаю объяснять не надо как это делается) командные файлы: amake.bat, cmake.bat, dmake.bat, wmake.bat и нижней строчкой пишем фразу:
path=c:myasmin
3.2.Сохраняем в каждом файле нашу фразу и чтобы изменения вступили в силу перезагружаем ПК.
4.Указываем путь к программе-ассемблеру:
4.1. В OS Windows XP открываем:
Панель управления->Система->Дополнительно->Переменные среды
Если переменная path уже создана для каких-то других программ, строчкой ниже пишем:
path=<уже существующая=>
path=%path%;c:myasmin
Чтобы изменения вступили в силу перезагружаем ПК.
5.Теперь дошли до Вашего вопроса: чтобы подобные ошибки как Ваша не возникали делаем следующее (с одним условием, что мы ассемблерный листинг прогаммы написали правильно и без ошибок):
5.1. Открываем myasm->bin. Из папки bin копируем и устанавливаем (с помощью контекстного меню) в корневой каталог диска С: (где у нас установлена оболочка FAR)следующие файлы:
amake.bat, cmake.bat, dmake.bat, wmake.bat,exe2bin, link.exe, link16.exe, ML.EXE, RC.EXE, MSPDB50.DLL
6. Уверяю Вас если Вы сделали все как я описал подобных ошибок возникать не будет.
7. Хочу напомнить в дальнейшем и предупредить, когда будете писать com.программу для DOS (командный файл для компиляции - cmake) и exe.программу для DOS (dmake),файлы com. и exe. на исполнение запускайте не в среде Windows и оболочке FAR, а в Norton Commander for DOS в полноэкранном режиме.
8. Письмо получилось длинным по одной причине: в последнее время часто на портал приходят вопросы от начинающих изучать Ассемблер с подобными вопросами, которые используют в работе оболочку FAR и компилятор MASM. А причина только одна (с условием что без ошибок написали программу):
- неправильно или не до конца установили и настроили среду (командные файлы компилятора) для компиляции написанных программ, не указали путь к программе-ассемблеру.
Желаю удачи в изучении Ассемблера!
Николай
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 4-ый класс)
Ответ отправлен: 11.12.2006, 09:14


Вопрос № 66.481
При линковании в экзешник пишет "Warning: No stack "
но все работает к чему бы эта надпись???

D:TASM>tlink lab1
Turbo Link Version 4.0 Copyright (c) 1991 Borland International
Warning: No stack
Отправлен: 11.12.2006, 09:53
Вопрос задал: Snik (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Boriss
Здравствуйте, Snik!
Это значит, что Вы не определили стек в EXE-файле (в упрощенных задается
.stack 1024)
А он нужен и используется вне Вашего желания системными функциями.
В Вашей программе использует в качестве стека оставшееся от 64К пространство над Вашей программой. Но Вы не предупредили систему, что это пространство Вами используется, и она может использовать его по своему усмотрению.
Проблем в учебных маленьких программах, действительно, не возникает
---------
Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: mte
WWW: Программирование на Паскале
----
Ответ отправлен: 11.12.2006, 12:00

Отвечает: Луковкин Николай Иванович
Здравствуйте, Snik!
Данная надпись сообщает о том, что Вы забыли указать стек в ехе.файле.
Если Вы написали прогу типа .СОМ, а линкуете ее как .ЕХЕ, опуская необходимые параметры для .СОМ-файла, то .СОМ- программа будет работать некорректно.
Если Вы линкуете ЕХЕ.файл, то игнорируйте эту надпись или создайте сегмент стека.
Николай
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 4-ый класс)
Ответ отправлен: 12.12.2006, 09:58

Отвечает: Брона Вячеслав
Здравствуйте, Snik!
По всей видимости у Вас не обьявлен в явном виде сегмент стека.
Ответ отправил: Брона Вячеслав (статус: 1-ый класс)
Ответ отправлен: 12.12.2006, 11:37


Вопрос № 66.485
Здравствуйте уважаемые эксперты!

Объясните пожалуйста, как ассемблер использует функции 3dh, 3fh, 40h, 3eh 21-го прерывания при работе с файлами. Выполнив трансляцию следующего кода и запустив файл я естественно не увидел процесса открытия файла в винде:

; Открываю файл для записи.
mov ax, 3d01h
mov dx, offset firstfile
int 21h
mov handle, ax

Затем я попробовал добавить функцию записи 16-ти байт.

; Записываю в файл 16 байт.
mov ah, 40h
mov bx, ax
mov cx, 10h
mov dx, offset buffer
int 21h
; Закрываю файл.
mov ah, 3eh
mov bx, handle
int 21h
ret
firstfile db 'c:myfile.txt', 0
buffer equ $
handle dw ?

также ничего не произошло. Файл как был пустой, так и остался, хотя атрибут "Только чтение" был снят. Может ассемблер работает с файлами как кто по другому, не так как мы привыкли?
И ещё, не знаю какая функция позволяет скопировать файл из одной директории в другую.
Спасибо!
Отправлен: 11.12.2006, 10:19
Вопрос задал: Paltus (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: IceWolf
Здравствуйте, Paltus!
По порядку:
1.
cds segment
org 100h ;<-обязательно, иначе адреса будут неверные
2.
У Вас:
mov handle, ax ;в ax хэндл
mov ah, 40h ;в al младшая часть хэндла, в ah 40h
mov bx, ax ;т.е. если хэндл был 5h мы передаём ф-ции 4005h, а такого хэндла нет
А надо:
mov handle, ax
mov bx, ax ;просто
mov ah, 40h ;поменять местами
3.
buffer db 'Наши 16 символов' ;Вы же пишете в файл строку, а не адрес переменной handle
С уважением, IceW0|f.

---------
Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 5-ый класс)
Ответ отправлен: 11.12.2006, 20:46

Отвечает: Олег Владимирович
Здравствуйте, Paltus!

Возможно, это опечатка, но перед записью в файл нужна не MOV BX,AX а MOV BX,handler!
Далее, что значит buffer equ $ ? В нём должна быть строка, предназначенная для записи, прерывание не рассчитывает получить константу, содержащую номер текущей ячейки. Так что поправьте на buffer db 'Sixteen characters...'
И, наконец, предлагается не открывать существующий файл для записи (3Dh), а создавать (перезаписывать при необходимости) пустой файл (3Ch). Пример в приложении
Good luck
PS. Функции копирования, насколько мне (не)известно, у INT 21h нет.

Приложение:

---------
Факультет ПМ-ПУ - лучший в СПбГУ!

Ответ отправил: Олег Владимирович (статус: 8-ой класс)
Ответ отправлен: 11.12.2006, 21:24


Вопрос № 66.486
Уважаемые эскперты: Ниже пример программы ввода вывода чисел.
сейчас происходит примерно так:
запустили программу c:1.exe
спрашивают введите число: "вводим" 12345
Получаем - Ваше число 12345
как сделать так что бы ввод числа происходил в командной строке?
примерно так:
c:1.exe 12345
Ваше число: 12345

Приложение:

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

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

Берите командную строку по адресу 128 в PSP.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 11.12.2006, 12:07


Вопрос № 66.490
Здравствуйте.
В задаче есть такой кчосек: Х^5 (переменная Х в пятой степени). Как реализовать на ассемблере возведение числа в степень? А то как то умножать число само на себя 4 раза нелепо. Заранее спасибо!
Отправлен: 11.12.2006, 11:00
Вопрос задал: Snatch (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Bob Johnson
Здравствуйте, Snatch!
ну 4 раза умножать и не надо :) а вот 3 - придется... возведение в степень на компьютере без использования сопроцессора реализуется так же, как умножение на процессоре, который этого не умеет, только вместо команды сложения используется команда умножения. т.е. в твоем примере:
5 = 0101b, значит
x^5 = ((x^8)^0)*((x^4)^1)*((x^2)^0)*((x^1)^1) = x^4*x^1
это можно сделать так:
mov eax, [x]
mul eax
mul eax
mul [x]
Ответ отправил: Bob Johnson (статус: Академик)
Россия, Калуга
WWW: Программирование
----
Ответ отправлен: 11.12.2006, 11:43


Вопрос № 66.509
Добрый день.
У меня Win XP, использую его дос, когда я пробую запустить ком файл своего резидента, то получаю сообщение о том, что обнаружена недопустимая инструкция процессора по такому-то адресу. В чем может быть проблема?
Может мне использовать просто дос, а не его вин эмуляцию?
Спасибо.
Отправлен: 11.12.2006, 12:35
Вопрос задал: Lestat (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Луковкин Николай Иванович
Здравствуйте, Lestat!
Запустите свою программу в Norton Comander for DOS в полноэкранном режиме.
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 4-ый класс)
Ответ отправлен: 11.12.2006, 12:48


Вопрос № 66.551
-Скачал с вашего сайта MASM611 все сделал как в (книге Калашникова)
> книге в приложении№1 (распаковал и тд.зашел в папку BIN) , но вот
> где писать программу?, как ее активировать?, куда?(в каком именно файле и на какой он подействует) у меня не получается (в книге об этом поверхностно)
> (смотрел подобные вопросы на сайте, ответы к сожалению очень
> скупые и короткие), если не сложно пожалуйста ответьте пошагово(где,
> куда и как?). обидно так как это единственное что не понятно в книге
Отправлен: 11.12.2006, 18:34
Вопрос задал: тимоф (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: IceWolf
Здравствуйте, тимоф!
Программу пишем в любом тестовом реддакторе без форматирования, например, Блокнот, AkelPad http://akelpad.sourceforge.net/ru/index.php ,встроеный редактор Far'а,но не M$ Word.
Компилируем: ml /AT <имя_файла>.asm
Получаем .com файл, запускаем, радуемся.
А вообще в архиве рассылки на kalashnikoff.ru ,есть подробные инструкции по получению исполняемого файла.
С уважением, IceW0|f.

---------
Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 5-ый класс)
Ответ отправлен: 11.12.2006, 20:05


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное