Консультация № 159863
07.02.2009, 16:19
0.00 руб.
0 12 1
Только начинаю программировать на Астме у меня версия masm611 по самоучителю Калашникова первая программа не могу получить Com файл строкой
ML.EXE PROGRAM1.ASM/AT из командной строки пишет ml.exe не является приложением win32 или пробую так >ML.EXE PROGRAM1.ASM/AT вообще просто открывает файл с текстом программы программка написана в блокноте в чем проблема помогите пожалуйста?

Приложение:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin

Обсуждение

Неизвестный
09.02.2009, 10:15
общий
На такую тему было уже много вопросов и ответов. Попробуйте поискать в этом же разделе. Если ответа на свой вопрос не найдете - напишите здесь
Но, как правило, нужно уточнить порядок Вашей работы. Последовательно: 1) что сделали сначала, (как и что вызываете)...
давно
Посетитель
7438
7205
09.02.2009, 10:38
общий
это ответ
Здравствуйте, Alekc100!
Вы молодец, что решили изучить ассемблер! Удачи Вам на этом пути!
Есть несколько путей, чтобы запустить ассемблирование, проще всего, наверное, так:
Пишем исходник в папку \masm11\bin
Запускаем cmd и делаем, чтобы \masm11\bin была текущей - cd \masm11\bin
Запускаем ml program1.asm /AT (кстати, обратите внимание - пробел между именем исходника и параметром /AT)
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
09.02.2009, 21:49
общий
С созданием com файла получилось но что то эта программка открывается и сразу закрывается т.е не выводит сообщение 'Hello, world!'
Неизвестный
09.02.2009, 22:24
общий
Дошло запускать надо было из CMD еще раз спасибо
давно
Старший Модератор
31795
6196
10.02.2009, 21:05
общий
Alekc100:

Перед строкой int 20h вставьте строки:
xor ax,ax
int 16h

Прочитать символ с клавиатуры, они заставят программу ожидать символ и она будет открыта до нажатия любой клавиши, а после нажатия закроется. Это одна из особенностей работы CMD от WinХР(приложения для DOS - запускаются в эмуляторе), в Win9х command.com работает по другому(окно само не закрывается).


А ещё, есть ещё несколько способов компиляции:
- Использование ВАТ-файлов:
= записываете ML.EXE PROGRAM1.ASM /AT строку в файл и запускаете его из проводника в папке BIN> , где и должна быть сама программа(для каждой программы нужно переписывать или создавать новый).
= использование в ВАТ-файлах параметров командной строки(один файл для компиляции любых программ)
- использование утилиты MAKE.EXE(NMAKE.EXE), но это нужно больше для больших проэктов.
Практически все способы компиляции есть в архиве рассылки. Пользуйтесь поиском. В архиве также есть ответы на все примеры по книге О.Калашникова.

Другая особенность CMD - по умолчанию не устанавливается текстовый видеорежим, поэтому пишите в начале программы ещё и:
mov ax,3
int 10h

Удачи Вам в изучении асеемблера!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
11.02.2009, 20:16
общий
спасибо полезная информация для новичка .Если не сложно ответить на такой вопрос в программе выше прерывание 21h заканчивает программу и выходит откуда ее вызывали, а где же тогда находится последняя строка Message db 'Hello, world!$' я так думаю в памяти если он берет ее адрес в mov dx,offset Message пользуюсь отладчиком CodeView там тоже на этом прерывание заканчивается и не видно этой строки.Может я захожу вперед не разобравшись, но хотелось бы изначально понять. Заранее спасибо
давно
Старший Модератор
31795
6196
11.02.2009, 21:06
общий
Alekc100:
Запустил компиляцию с включенным листингом:
Turbo Assembler Version 2.0 02/11/09 19:43:23 Page 1
control.ASM
1 0000 CSEG segment
2 org 100h
3 0100 Begin:
4 0100 B4 09 mov ah,9
5 0102 BA 0109r mov dx,offset Message
6 0105 CD 21 int 21h
7 0107 CD 20 int 20h
8 0109 48 65 6C 6C 6F 2C 20+ Message db 'Hello, world!$'
9 77 6F 72 6C 64 21 24
10 0117 CSEG ends
11 end Begin
Turbo Assembler Version 2.0 02/11/09 19:43:23 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "02/11/09"
??FILENAME Text "control "
??TIME Text "19:43:23"
??VERSION Number 0200
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text CONTROL
@WORDSIZE Text 2
BEGIN Near CSEG:0100
MESSAGE Byte CSEG:0109
Groups & Segments Bit Size Align Combine Class
CSEG 16 0117 Para none

Итого всё что выделено, это те байтики которые будут хранится в самой программе-файле. Но и те которые загружаются в память начиная с адреса 100Н, дальше всё завист от используемой модели памяти. Для этой модели РС отводит всё свободное адресное пространство, но рабочимы есть только 64кб.

Я начинал с TASM 2.00, своего отладчика там нет, но всегда есть возможность запусить системный DEBUG.EXE, так по привычке и пользуюсь.
-N prog.com
-L
-D

Вот и все команды для работы(подробно команда -?), но Вы увидете всё сами то, что Вам выдал файл листинга.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
11.02.2009, 21:39
общий
что то у меня Debug не может найти файл уже поместил файл в корень с: не видит
давно
Старший Модератор
31795
6196
11.02.2009, 22:06
общий
С помощью команд
CD .. - выйти из папки
CD папка - зайти в папку
disk: - сменить текущий диск
зайдите в папку с программой, как пример посмотрите URL >> у меня компиляторы(разные) расположены в отдельных папках, а рабочая папка одна. С помощью ВАТ-файлов компилирую программу и если нужно отлаживаю.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
11.02.2009, 22:34
общий
Ещё уточнение URL >>
Посмотрите сколько у меня различных компиляторов в различных папках(не хвастовство, а так для информации). На рисунке Вы также найдете параметры(свойство) настройки иконки с рабочего стола(для запуска сразу рабочей папки). Рабочая папка одна: my_Lib, все вопросы и ответы по порталу хранятся там.
В Ват-файлах я прописываю пути, к примеру для TASM(цветом выделены комментарии):
..\tasm\tasm.200\tasm %1 /l - вызываю транслятор
..\tasm\tasm.200\tlink %1 /t - вызываю компилятор
echo off
dlt - удаляю ненужные файлы, после компиляции
echo on

Командная строка у меня выглядит так > tc control, т.е %1 - это параметр подставляемый из командной строгки
Я так работаю.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
11.02.2009, 23:10
общий
Круто получилось спасибо а насчет bat- файлов я пробовал получается тоже. К стати в CodeView другой дамп памяти этой программы выдает почему то. Настрою тоже также
рабочую папку так удобнее как у Вас
давно
Старший Модератор
31795
6196
11.02.2009, 23:21
общий
CV я не проверял, а вот то что Debug дает результат анлогичный с листингом, тут уж не поспориш.
Удачи Вам в изучении!
Но помните не Вы первый могли задать этот вопрос. Проверяйте архивы.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа