• XSS.stack #1 – первый литературный журнал от юзеров форума

АССЕМЛЕР _ помогите

b1t

(L2) cache
Пользователь
Регистрация
16.06.2006
Сообщения
326
Реакции
5
Здраствуйте.

Народ я начинающий кодер на ассемблере, т.к. у меня проблема с "HELLO WORLD"-ом... Наварно вам смешно, но это так..
Я написал 2 исходника: под EXE , и под COM ... дело в том, что COM-овский получился, а вот проблема с EXE-шником :bang:

Компилятор: TASM 5.0

Имя исходного кода: HELLO(.asm)
Выдает ошибку:

Assembling file: hello.asm
**Error** hello.asm(2) Undefined symbol: DATA
**Error** hello.asm(3) Undefined symbol: DATA
**Error** hello.asm(5) Undefined symbol: MES
**Error** hello.asm(14) Illegal instruction
**Error** hello.asm(15) Code or data emission to undeclared segment
*Warning* hello.asm(16) Unmatched ENDS: DATA
Error messages: 5
Warning messages: 1
Passes: 1
Remaining memory: 452k

А вот сам исходный код:

Код:
Code segment
Assume CS:code, DS:data
mov AX, data
mov DS, AX
mov DX, offset mes
mov AH, 9
int 21h
mov AH, 10h
int 16h
mov AX, 4C00h
int 21h
code ends

Data cegment
mes db 'HELLO, WORLD!', 13, 10, '$'
data ends
end

Помогите исправить ошибку.. :sorry:
 
:angry: Ты че, прикалываешся?
Уменя есть многие учебники про ассемблера.. но там ТАК И НАПИСАНО, а уменя выдает такую ошибку... :rtfm:
 
b1t
А я думал стандартный "Hello World!" делается так:

CSEG segment
org 100h

Begin:

mov ah,9
mov dx,offset Message
int 21h

int 20h

Message db 'Hello, world!$'
CSEG ends
end Begin
 
Это под COM так пишутся, там односегментный код..
а под ЕХЕ по другому (т.е. я написал как, но как то неработает..).
Я сказал, с СОМ-ом все нормально...

ПРОШУ, КОГДА ПИШИТЕ, НЕНАДО УМНИЧАТЬ..
Если не знайте, то зря не сорите.. :diablo:
 
С тасмом не знаком, но первое , что бросилось в глаза
Код:
Data cegment
Це ж segment, а не cegment
А точка входа не нужны?Ты уверен в правильности сорса?
 
А точка входа не нужны?Ты уверен в правильности сорса?

Ага, нужен, вот я исправил cegment на segment, синтаксис вроде работает нормально, т.к. создал обектный файл (hello.obj), а линковать НЕ ПОЛУЧАЕТСЯ..
Fatal: No program entry point

А вот обясните пожалуйста, как понять точка входа? и где надо че-то добавить?
 
попробуй так...
Код:
Code segment
Assume CS:code, DS:data
main:
mov AX, data
mov DS, AX
mov DX, offset mes
mov AH, 9
int 21h
mov AH, 10h
int 16h
mov AX, 4C00h
int 21h
code ends
        end main

Data segment
mes db 'HELLO, WORLD!', 13, 10, '$'
data ends
end
Точка входа - то место, откуда начинается выполнение программы.
Для COM-приложений c этого места копируеться в память сам бинарный код по смещению 256 байт. Для EXE - точно не скажу, но вроде бы начитнаеться копирование(загрузка) в память с заголовка,включая сигнатуру MZ.
Да кстати плюнь на тасм, хотя как хочешь. Начни лучше изучение отсюда - http://kalashnikoff.ru/
Затем многие советую Питера Абеля "Ассемблер для IBM PC"- это уже, как сам хочешь. Мне он не понравился=)
PS. НЕ трогай экзе-приложения для дос. Они тебе нафиг не нужны. Ограничься COM. Это такой совет ;)
 
Неа :nono:

этот код тоже выдает почти тот же ошибку...
Assembling file: hello1.asm
**Error** hello1.asm(2) Undefined symbol: DATA
**Error** hello1.asm(4) Undefined symbol: DATA
**Error** hello1.asm(6) Undefined symbol: MES
Error messages: 3
Warning messages: None
Passes: 1
Remaining memory: 453k

:help:
 
1)Можно вопрос: сколько тебе лет?
2)попробуй соблюдать регистр символом
 
Можно вопрос: сколько тебе лет?
А причем тут возраст??
Если про ошибках, то я не русский, и плохо знаю русский язык, так что я ИНОСТРАНЕЦ !

попробуй соблюдать регистр символом

А это что и как?
 
Товарищи, у меня лично под ТАСМ всю жизнь работало вот это:

;------------------------------------------
.model small
.386

.data

mes db 'HELLO, WORLD!', 13, 10, '$'

.code

start:

mov ax, @data
mov ds, ax
mov DX, offset mes
mov AH, 9
int 21h
mov AH, 10h
int 16h
mov AX, 4C00h
int 21h

end start
;------------------------------------------

З.Ы. Никогда не любил я почему-то слова segment и assume. Хотя вот так тоже работает:

;------------------------------------------
Data segment
mes db 'HELLO, WORLD!', 13, 10, '$'
data ends

Code segment

Assume CS:code, DS:data

me_wanna_entrypoint_dude_yo:

mov AX, data
mov DS, AX
mov DX, offset mes
mov AH, 9
int 21h
mov AH, 10h
int 16h
mov AX, 4C00h
int 21h
code ends

end me_wanna_entrypoint_dude_yo

;------------------------------------------
Маразм - объявлять энтрипойнт инструкцией END, ну да что ж теперь поделать...
 
Код:
Работает...
Code segment
Assume CS:code, DS:Data
main:
mov AX, Data
mov DS, AX
mov DX, offset mes
mov AH, 9
int 21h
mov AH, 10h
int 16h
mov AX, 4C00h
int 21h
Code ends
   
Data segment
	mes db 'HELLO, WORLD!', 13, 10, '$'
[/B]Data ends
end main

Работает...
Code segment para 'Code'
Begin proc FAR
Assume CS:code, DS:Data
mov AX, Data
mov DS, AX
mov DX, offset mes
mov AH, 9
int 21h
mov AH, 10h
int 16h
mov AX, 4C00h
int 21h
Begin endp
Code ends

Data segment
	mes db 'HELLO, WORLD!', 13, 10, '$'
Data ends
   end Begin

make.bat
Код:
c:\tasm\dos-forever\TASM.EXE hello.asm
c:\tasm\dos-forever\TLINK.EXE hello.obj

Маразм - объявлять энтрипойнт инструкцией END, ну да что ж теперь поделать...
Сорри,но не понял,что ты хотел этим сказать?? :huh1:
 
Код:
.model small
.stack 100h

.data
msg db 'Hello world!$'

.code
start:
  mov ax,DGROUP
  mov ds,ax
  lea dx,msg
  mov ah,9
  int 21h
  
  mov ah,10h
  int 16h
  
  ret
end start

работало под Masm =)

компилил так:

Код:
ml /c proga.asm
C:\MASM\BINR\LINK.exe proga.obj
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх