Hola Mundo - en ASM

Iniciado por ProcessKill, Febrero 24, 2010, 03:56:25 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 24, 2010, 03:56:25 PM Ultima modificación: Mayo 01, 2014, 08:42:31 AM por Expermicid
Gnu/linux:

Código: asm
format ELF executable

entry start

;Comentarios con ;
segment readable executable
start:

mov eax, 4 ;Servicio 4, escribir
mov ebx, 1 ;manejador de STDOUT
mov ecx, msg ;el mensaje
mov edx, msg_len ;tamanio del mensaje
int 80h ;ejecuta la llamada al sistema

mov eax, 1 ;Servicio 1 termina el proceso
mov ebx, 0 ;envia 0 como código de salida
int 80h ;ejecuta la llamada al sistema

segment readable writable

msg db 'Hola Mundo',0 ;cadena
msg_len = $-msg ;tamaño de la cadena



Windows

Código: asm

include '..\fasm\include\win32ax.inc'

.data ;variables aqui
   cuerpo db 'Hola mundo', 0
   titulo db 'Saludo', 0

.code ;codigo
start:
   push 0           ;parametros de MessageBoxA
   push titulo
   push cuerpo
   push 0
   call [MessageBoxA] ;llamamos al api

   push 0
   call [ExitProcess] ;llamando a ExitProcess con parametro 0

.end start



Ahora en 16 bits :D


Código: asm

;para crear un exe
format MZ

      ;estabilizando la pila
push cs

pop ds

mov ah, 9 ;el servicio que queremos usar, 9 para imprimir
mov dx,hello ;parametros
int 21h ;llamada a la int

mov ax,4C00h ;servicio 4Ch para salir
int 21h ;llamada a la int

hello db 'Hello world!', 24h ;cadena mensaje



Ahora en .Com

Código: asm

; Programa 16-bit COM

org 100h ; el codigo comienza en el offset 100h
use16 ; usando codigo 16-bit

mov ah, 9 ;llamando al servicio 9
mov dx, hello ;mensaje a imprimir

int 21h
;llamando a la int 21h


mov ax,4C00h ;servicio 4Ch para salir
int 21h ;llamada a la int


hello db 'Hello world!', 24h ;cadena mensaje



bytes ;)
by Ni0!

Agosto 24, 2011, 09:44:22 PM #1 Ultima modificación: Junio 03, 2013, 11:46:48 AM por Expermicid
Dejo un hello world para Turbo Assembler con string terminada en \0 para poder mezclarlo con C en MSDos:
Código: asm

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Hello World     ;;
;;   ByAlmamu     ;;
;;   ForMSDOS     ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TITLE HELLOWORLD
JUMPS
.model small
.stack 100h
.data
hello db "Hello World!$",13,10

.code
.8086
start:
; Reseteamos el stack
mov ax,@data
mov ds, ax
mov es, ax
and sp, not 3

; Movemos hello al registro dx, usado en el int 21h
; para llevar la informacion del mensaje
mov dx, offset hello

; Elejimos la acción que vamos a realizar, en este caso escribir en pantalla
mov ah, 9h ; 9->escribir en pantalla

; Creamos interrupcion de software 21 para que se escriba en pantalla
int 21h

; Finalizamos el programa y lo cerramos para evitar bucle infinito
mov ax, 4c00h ; 4c->terminar, 00->errno
int 21h
end start