Питань: 8. Відповідей: 12
Питання № 66.395
Питання № 66.399
У мене є питання по Assmу.
Я тільки почав вивчати його і у мене з'явилися питання. При створенні програми в оболонці Far створюємо файл з ім'ям 11.asm. Потім створили командний файл amake.bat. Далі переходимо на 11.asm. і запускаємо в командному рядку amake 11. І тут проліт він пише «amake» не є внутрішньою або зовнішньою командою, що виконується програмою або пакетним файлом. У чому моя помилка. Подскажите пожайлуста.
Система ОС - ХР
Проц. AMD Athlon-64 3000.
Відповідає: Волков Павло Юрійович
Привіт, Merlin09!
Батник amake.bat, повинен бути в папці компілятора, туди ж покладіть і исходник (текст програми). Місцезнаходження батника не включене в змінну PATH, тому або покладіть в одну з папок, включених в PATH (список папок можна дізнатися через "set path", в командної рядку) або виконуйте його в цій папці.
---------
Вік живи вік учись.
Відповідає: Луковкін Микола Іванович
Привіт, 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. А причина тільки одна (з умовою що без помилок написали програму):
- неправильно або не до кінця встановили і налаштували середу (командні файли компілятора) для компіляції написаних програм, не вказали шлях до програми-асемблеру.
Бажаю удачі у вивченні Ассемблера!
Миколай
---------
Головним критерієм ефективності того чи іншого шляху може служити лише те, досяг чи ні крекер кінцевого результату.
Питання № 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?
також нічого не сталося. Файл як був порожній, так і залишився, хоча атрибут "Тільки читання" був знятий. Може асемблер працює з файлами як хто по іншому, не так як ми звикли?
І ще, не знаю яка функція дозволяє скопіювати файл з однієї директорії в іншу.
Дякуємо!
---------
Ідеальних захистів не існує, бо те, що створено людським розумом, їм же буде і зруйновано!
Відповідає: Олег Володимирович
Привіт, Paltus!
Можливо, це помилка, але перед записом у файл потрібна не MOV BX, AX а MOV BX, handler!
Далі, що означає buffer equ $. У ньому повинна бути рядок, призначена для запису, переривання не розраховує отримати константу, яка містить номер поточної комірки. Так що поправте на buffer db 'Sixteen characters. '
І, нарешті, пропонується не відкривати існуючий файл для запису (3Dh), а створювати (перезаписувати при необхідності) порожній файл (3Ch). Приклад в додатку
Good luck
PS. Функції копіювання, наскільки мені (не) відомо, у INT 21h немає.
---------
Факультет ПМ-ПУ - кращий в СПбДУ!
Відповідає: Луковкін Микола Іванович
Привіт, Lestat!
Запустіть свою програму в Norton Comander for DOS в повноекранному режимі.
---------
Головним критерієм ефективності того чи іншого шляху може служити лише те, досяг чи ні крекер кінцевого результату.
Питання № 66.551
-Скачав з вашого сайту MASM611 все зробив як в (книзі Калашникова)
> Книзі в пріложеніі№1 (розпакував і тд.зашел в папку BIN). але ось
> Де писати програму. як її активувати. куди? (в якому саме файлі і на який він подіє) у мене не виходить (в книзі про це поверхнево)
> (Дивився подібні питання на сайті, відповіді на жаль дуже
> Скупі і короткі), якщо не складно будь ласка дайте відповідь покроково (де,
> Куди і як?). прикро так як це єдине що не зрозуміло в книзі
---------
Ідеальних захистів не існує, бо те, що створено людським розумом, їм же буде і зруйновано!