Форум программистов, компьютерный форум, киберфорум
Наши страницы
FASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
valeriy007
77 / 22 / 18
Регистрация: 27.10.2014
Сообщений: 420
#1

Ошибка при компиляции программы типа HelloWorld

08.10.2015, 22:38. Просмотров 1074. Ответов 10
Метки нет (Все метки)

Не компилится, ругается на mov dx, hello
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
format pe64
 
mov ax, cs
mov ds, ax
mov dx, hello
 
mov ah, 9h
int 21h
 
mov ax, 4c00h
int 21h
 
hello: db "Hello World!$"
в чем проблема?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2015, 22:38
Ответы с готовыми решениями:

При компиляции программы выдается ошибка
"Сan't locate file: windows.inc" что это значит? и как исправить????...

Ошибка при компиляции
Подскажите, что это за ошибка:

Ошибка при компиляции
format PE GUI 4.0 entry start include 'win32a.inc' include...

Ошибка при компиляции
Подскажите, почему у меня не запускается проект: Набрал такой код: CSEG...

Ошибка при компиляции
Собственно сабж, есть код : CSEG segment org 100h Begin : mov ah,9...

10
Mikl___
Автор FAQ
11733 / 6045 / 543
Регистрация: 11.11.2010
Сообщений: 11,027
09.10.2015, 04:48 #2
valeriy007,
Цитата Сообщение от valeriy007 Посмотреть сообщение
format pe64
Программа предназначена для Windows x64
Цитата Сообщение от valeriy007 Посмотреть сообщение
int 21h
программа предназначена для DOS
ты уж определись для чего пишешь и учебник (лекции) за одно перечитай

прочитай хотя бы это Все, что нужно знать, чтобы начать программировать для 64-разрядных версий Windows
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
format PE64 GUI 5.0
entry start
include 'win64a.inc'
section '.text' code readable executable
 
  start:
   invoke MessageBoxA,0,msgBoxText,msgBoxCaption,0
   invoke ExitProcess,0
 
section '.data' data readable writeable
 
msgBoxText  db "Hello World!",0
msgBoxCaption db "valeriy007",0
 
section '.idata' import data readable writeable
 
  dd 0,0,0,RVA kernel_name,RVA kernel_table
  dd 0,0,0,RVA user_name,RVA user_table
  dd 0,0,0,0,0
 
  kernel_table:
    ExitProcess dq RVA _ExitProcess
    dq 0
  user_table:
    MessageBoxA dq RVA _MessageBoxA
    dq 0
 
  kernel_name db 'KERNEL32.DLL',0
  user_name db 'USER32.DLL',0
 
  _ExitProcess dw 0
    db 'ExitProcess',0
  _MessageBoxA dw 0
    db 'MessageBoxA',0
1
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,603
28.07.2018, 16:48 #3
Цитата Сообщение от Mikl___ Посмотреть сообщение
format pe64
та же проблема у меня винда 32 бита
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
format mz
 
mov ax,cs
mov ds,ax
mov dx,hello
 
mov ax,9h
int 21h
 
mov ax.4c00h
int 21h
 
hello: db"Hello, world!$ "
Добавлено через 5 минут
Цитата Сообщение от valeriy007 Посмотреть сообщение
Не компилится, ругается на mov dx, hello
Цитата Сообщение от sch[quote="Mikl___ Посмотреть сообщение
программа предназначена для DOS
erbakovss201;12567693"]та же проблема у меня винда 32 бита[/quote]
чувствителен к пробелам,вот так правильно

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
format mz
 
mov ax,cs
mov ds,ax
mov dx,hello
 
mov ax,9h
int 21h
 
mov ax,4c00h
int 21h
 
hello: db "Hello, world!$ "
0
ФедосеевПавел
Модератор
3602 / 1985 / 825
Регистрация: 01.02.2015
Сообщений: 6,609
28.07.2018, 18:44 #4
Скорее уж к точке вместо запятой в строке 10.

Скажите, а где вы взяли такой необычный пример?

Исходник имеет необычную структуру. Программа явно для DOS exe (т.е. итоговый файл кроме кода программы будет иметь служебный заголовок типа mz) и может иметь несколько сегментов, в частности сегмент данных, кода, стека.
Однако, пользуясь возможностью создавать подобное, в вашей программе объединяются сегменты данных и кода, отсутствует сегмент стека. Впечатление, что взяли программу типа DOS com втиснули в шаблон DOS exe и допилили до подобия выполнения.
Конечно, никто не в праве запрещать использовать подобные трюки, но не при изучении HelloWorld.
1
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,603
29.07.2018, 09:21 #5
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Впечатление, что взяли программу типа DOS com втиснули в шаблон DOS exe и допилили до подобия выполнения.
Так и есть.Хотелось уменьшись количество строк кода.Цель получилось достигнуть.Который раз убеждаюсь,что пределу совершенства не пределов.Люди сами себя ограничивают правилами и шаблонами.
0
ФедосеевПавел
Модератор
3602 / 1985 / 825
Регистрация: 01.02.2015
Сообщений: 6,609
29.07.2018, 09:53 #6
Это не моё дело. Как запутаетесь - возвращайтесь.
Вариант DOS com for FASM
Assembler
1
2
3
4
5
6
7
8
9
10
use16               ;Генерировать 16-битный код
org 100h            ;Программа начинается с адреса 100h
 
    mov dx,hello    ;В DX адрес строки.
    mov ah,9        ;Номер функции DOS.
    int 21h         ;Обращение к функции DOS.
 
    int 20h         ;Завершение программы
;-------------------------------------------------------
hello db 'Hello, world!$'
Добавлено через 3 минуты
И ещё варианты в теме
Написать программу, выводящую строку "Hello World" на экран

Добавлено через 12 минут
Мой скептицизм вызван тем, что вы не понимаете разницы между DOS exe и DOS com программами. Но из разрозненных примеров собираете чудовище Франкенштейна, которое как бы что-то делает.

Одно радует - DOS уже ушёл из массового обихода и вам не пригодятся эти странные знания. Займитесь изучением ассемблера сразу под Windows (Linux) - собственно в программах различия будут лишь при обращении к системным вызовам (вывод на экран, ввод с клавиатуры).

Не теряйте время на DOS.
1
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,603
29.07.2018, 11:10 #7
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Одно радует - DOS уже ушёл из массового обихода и вам не пригодятся эти странные знания. Займитесь изучением ассемблера сразу под Windows (Linux) - собственно в программах различия будут лишь при обращении к системным вызовам (вывод на экран, ввод с клавиатуры).
Посоветуйте курс,лучше видео.
Разница между com(16 bit) и ехе -32 бит,состоит в разрядности и механизмах доступа к памяти.
0
ФедосеевПавел
Модератор
3602 / 1985 / 825
Регистрация: 01.02.2015
Сообщений: 6,609
29.07.2018, 12:22 #8
Ознакомление с инструкциями процессора - любой учебник. Не знаю, что посоветовать. Попробуйте поиск в разделе по слову "книги".
Но вот проверка - лучше в MASM32 с остальными атрибутами Windows.

Видеокурсы хороши при обучении работы с оболочкой (IDE) для программирования. Программирование только с карандашом в руках и записями на полях книг.
1
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,603
29.07.2018, 13:16 #9
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Но вот проверка - лучше в MASM32 с остальными атрибутами Windows.
Видеокурсы хороши при обучении работы с оболочкой (IDE) для программирования. Программирование только с карандашом в руках и записями на полях книг.
Недостатком книг является то,что если человек не сталкивался ни разу,то ему очень трудно найти и понять где та или иная настройка.К тому же у меня очень туго с пониманием,доходит через месяц))
0
R71MT
3213 / 1274 / 284
Регистрация: 29.07.2014
Сообщений: 2,297
Записей в блоге: 5
31.07.2018, 02:29 #10
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

scherbakovss201, если ты в досе, то системе пришёл пипец.
говорят, что дос умер, -- да он умер, но зато живёт биос.
на асме можно кодить без систмы, -- только биосом.
дос не нужен, и вообще не нужен никто - ты и и система: проц и чипсет

Добавлено через 2 минуты
биос делает погоду, а ты её можешь поменять
1
R71MT
3213 / 1274 / 284
Регистрация: 29.07.2014
Сообщений: 2,297
Записей в блоге: 5
31.07.2018, 02:49 #11
а вообше не учи асм, а учи php и ему подобное,
на асме возьмёшь один раз., но от ворд-пресс возмёшь за это время 10-раз,
и это доказывает жизнь.. АСМ твой нужен только тебе
1
Миниатюры
Ошибка при компиляции программы типа HelloWorld  
31.07.2018, 02:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2018, 02:49

Ошибка при компиляции
Добрый день! При компилировании исходника вылетает ошибка: undefined symbol В...

Ошибка при компиляции exe файла
Пытаюсь скомпилировать пример из книги Assembly Language for x86 processor...

Задача из книги Юрова, ошибка при компиляции
Помогите пожалуйста откомпилировать программу. В книге Юрова Assembler: Учебник...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru