Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/35: Рейтинг темы: голосов - 35, средняя оценка - 4.71
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444

hello world!

13.02.2011, 10:34. Показов 7267. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел в интернете книжку "Крупник - изучаем ассемблер". Очень понятно написано. Вроде бы....
Программирую на MASM.
Авто порекомендовал написать код и посмотреть как в отладчике произойдёт реагирование на переполнение.
Assembler
1
2
3
4
5
6
7
8
.386
.model flat.stdcall; показывает в какой среде будет жить программа
.code; далее следует код
start:
    mov eax, 999999999
    add eax, 999999999
    ret;возврат из программы
end start
а компилятор выдал кучу ошибок:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Microsoft Windows [Version 6.1.7600]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
 
C:\Users\Dimarik>cd c:\masm32\bin
 
c:\masm32\bin>ml \c 1.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
 
c:\masm32\bin>ml /c 1.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
 
 Assembling: 1.asm
1.asm(2) : error A2008: syntax error : .
1.asm(3) : error A2013: .MODEL must precede this directive
1.asm(4) : error A2034: must be in segment block
1.asm(5) : error A2034: must be in segment block
1.asm(6) : error A2034: must be in segment block
1.asm(7) : error A2034: must be in segment block
1.asm(8) : error A2006: undefined symbol : start
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2011, 10:34
Ответы с готовыми решениями:

Hello World в MASM32
Значит .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include...

Не выводится Hello, World
.model small .stack 256 .data mesg db "Hello World! $" .code start: mov ax,0B800h mov es,ax

Com hello world tasm
Обычный exe я делать умею, а вот про ком незнаю ничего... Подскажите код привет мир для com под tasm16 или 32 и пример как скомпилить...

13
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
13.02.2011, 11:08
Assembler
1
2
3
4
5
6
7
8
.386
.model flat
.code; далее следует код
start:
        mov eax, 999999999
        add eax, 999999999
        ret;возврат из программы
end start
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
13.02.2011, 12:33  [ТС]
.model flat.stdcall; показывает в какой среде будет жить программа
Это опечатка в книге была что ли?О_о
как я понял - это условие сделано для того чтобы программа изначально не запускалась, апример, на MAC OS, дабы не было ошибок в ходе выполнения, чтобы программа закрылась в самом начале. Правильно?
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
13.02.2011, 12:43
Я не силён в MASM`е

flat - означает, что программа для защищённого режима
stdcall - соглашение о вызове функций (наверное это для макроса invoke).
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
13.02.2011, 13:43  [ТС]
Сейчас решил выполнить отладку и посмотреть, как ведет себя программа.
Открыл AFD PRO командой cmd:afdpro.exe 1.com


Первая строка в моей программе - это mov eax, 999999999
в 16-ричном представлении это будет выглядеть так:
mov eax,3B9AC9FF
Но почему-то первым оператором является mov ax, cdff
второй оператор call cdff:053b ;вызывает какую-то процедуру. что он вызывает? В каком мануале это можно прочитать?
Далее идет
add dl,[bx+si+40];тут вообще ниче непонятно
Далее add ax,e402;откуда это счастье?? я это не писал
далее inc sp; инкремент непонятно откуда взялся... неужели ассемблер когда прибавляет к числу a прибавляет число b делает такую операцию
C++
1
2
for(int i = 0; i < b; i++)
a++;//где а - результат сложения a и b
Далее идет команда add [bx+di], al
Далее in al,[44]
Далее db 8c
А что за числа стоят перед командами?
Вот, допустим, перед первой командой написано
0100 B8FFC9 и далее MOV AX,C9FF
Ну а затем INVALID OPCODE. И где про переполнение написано?.....
В отладчике, конечно, есть куча полей, раздереленных линиями
В одном что-то про стек, в верхнем, как я понял - про регистры, так?
P.S. Если не трудно, подскажите, что это за области, помеченные цифрами 1 и 2?
В них написано DS:0000 .................
Миниатюры
hello world!  
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
13.02.2011, 14:22
Dimarik__, очевидно твой отладчик не понимает 32 разрядных команд
1
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
13.02.2011, 14:33
Если ты линкуешь com, тогда код должен быть таким
Assembler
1
2
3
4
5
6
7
8
.model tiny
.code
org 100h
.startup
    mov ax,99999
    add ax,99999
    ret
end
1
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
13.02.2011, 15:12
Пишы в RadASM и не будет проблем !!!
0
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
13.02.2011, 15:31  [ТС]
Цитата Сообщение от vital792 Посмотреть сообщение
Dimarik__, очевидно твой отладчик не понимает 32 разрядных команд
а каким порекомендуешь тогда пользоваться? Калашников советовал AFD PRO. Может есть его 32-битная версия?

Добавлено через 11 минут
Цитата Сообщение от murderer Посмотреть сообщение
Если ты линкуешь com, тогда код должен быть таким
Assembler
1
2
3
4
5
6
7
8
.model tiny
.code
org 100h
.startup
    mov ax,99999
    add ax,99999
    ret
end
Извиняюсь за ламерский вопрос, а какая разница между *.com и *.exe?
и чтобы получить .exe надо писать doslnk *.obj
Кстати. Когда вылетает баг (переполнение), выскакивает ошибка, в хэндле которой было написано 16-bit MS-DOS SubSystem
Почему именно 16-битной MS-DOS, а не 32-битной? У меня винда 32-битная стоит.
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
13.02.2011, 16:24
Извиняюсь за ламерский вопрос, а какая разница между *.com и *.exe?
В твоём случае никакой. Но если-бы у тебя были переходы или вызовы процедур, то код получился-бы не рабочим т.к. не поставлена директива "org 100h". Дело в том, что com-программы загружаются по смещению 100h и соответственно нужно ко всем адресам меток прибавить это смещение. Есть другой вариант - увеличить CS на 16 и обнулить IP (но в этом случае не сработает ret для выхода).
0
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
13.02.2011, 16:58  [ТС]
Цитата Сообщение от vital792 Посмотреть сообщение
Dimarik__, очевидно твой отладчик не понимает 32 разрядных команд
а почему?
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
13.02.2011, 17:25
Сделай асм-вставку в Visual Studio или в Delphi и воспользуйся встроенным отладчиком.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
14.02.2011, 11:49
Assembler
1
Почему именно 16-битной MS-DOS, а не 32-битной? У меня винда 32-битная стоит.
Потому что DOS'овские .com проги запускаются в 16битном "эмуляторе". В .com файлах нет еах, есть только ах, а AFD не может отлаживать 32битные проги. Под винду есть другие отладчики.
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
14.02.2011, 12:19
Цитата Сообщение от Morgot Посмотреть сообщение
В .com файлах нет еах
Morgot,а это разве не com-программа ? Прекрасно работает
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
cseg segment
.386
org 100h
start:
mov eax,65538
add eax,2
mov s,eax
int 20h
;____________
s dd ?
cseg ends
end start
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2011, 12:19
Помогаю со студенческими работами здесь

Программа hello world не работает
вот код model small .data mesg db &quot;Hello World! $&quot; data end .code main proc mov ax, @data mov ds, ax

Masm64 console hello world
Надыбал кое что, вроде и ошибок нет а ничего не выводит( OPTION DOTNAME option casemap:none include temphls.inc include...

Hello, World
помогите пожалуйста Наберите программу, которая выводит на экран сообщение Hello, World! No war and bomb! Let us live friendly and...

Hello World
программа компилируется, но сообщение Hello World не появляется .386 .model flat, stdcall includelib C:\masm32\LIB\kernel32.lib...

Hello, world!
Здравствуйте, вот решил начать изучение Assembler. По книге написал hello world и получил ошибку компиляции и прилинковки. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru