"Hello, World!" на ассемблере

Ничего нового не скажу, просто хотелось бы опубликовать простое упражнение, которое выполняли сегодня на курсах: набрать в текстовом редакторе исходник на ассемблере по образцу и откомпилировать. Всё это в среде Linux.

section	.text
    global _start	;декларируется для линкера (ld)

_start:			;точка входа

	mov	edx,len	;длина выводимого сообщения ("Hello, World!")
	mov	ecx,msg	;указатель на сообщение
	mov	ebx,1	;файловый дескриптор (stdout - это тоже какбэ файл)
	mov	eax,4	;номер системного вызова (sys_write)
	int	0x80	;обращаемся к ядру
	mov	eax,1	;номер системного вызова (sys_exit)
	int	0x80	;обращаемся к ядру

section	.data

msg	db	'Hello, world!',0xa	;выводимая на экран строка как массив байт
len	equ	$ - msg			;ее длина (вычисляется в момент компиляции)


Компилируем, линкуем, запускаем:

$ nasm -f elf hello.asm		# эта команда создаст файл hello.o - объектный файл в формате ELF
$ ld -s -o hello hello.o	# эта команда сформирует исполняемый файл
$ ./hello


Источник.

Комментарии (3)

RSS свернуть / развернуть
+
0
неплохо
avatar

Sergei_T

  • 14 сентября 2011, 09:24
+
+1
В прошлом году изучал TASM, как-то так:
title hello
codsg segment para,'code'
org 100h
co proc
assume cs:codsg, ds:codsg, ss:codsg, es:nothing
;---Установка режима
mov ah,00
mov al,03
int 10h
;---Очистка экрана
mov ax,0600h
mov bh,07h
mov cx,0000h
mov dx,148fh
int 10h
;---Смещение курсора на 10-10
mov ah,02
mov bh,00
mov dh,10
mov dl,10
int 10h
;---Печать строки
mov ah,09
lea dx,string
int 21h
;---Еще какие-то страшные строчки
mov ah,00
int 16h
int 20h
ret
co endP
;---Собственно строка
string db 'Hello World','$'
codsg ends
end
avatar

illuthion

  • 14 сентября 2011, 19:41
+
0
Спасибо большое, на следующем занятии попробуем откомпилировать и такой вариант. Попутно даю ссылку, где можно скачать TASM.
avatar

yababay

  • 14 сентября 2011, 21:11

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.