Hola, estoy aprendiendo a usar el nasm en linux, tengo muchos ejemplos q corren bajo windows, o incluso en linux pero usando el dosbox, que es el emulador de dos en linux, pero al correrlo directamente desde consola (./nombreEjecutable), me dan fallo de segmentacion, alguna idea del porq pasa esto al correrlo?
Este es uno de los codigos que me corren bien en el dosbox, pero me da fallo de segmentacion en la consola.
global _start
section .data
section.text
_start:
call pantallaGrafica
mov ah,0Ch ;Coloca un pixel en pantalla
mov al,07h ;color gris
mov bh,00h ;página
mov cx,250d ;posición X, Inicio
mov bp,200d ;posición Y. Inicio
mov si,280d ;posición Y. Final
mov di,350d ;posición X. Final
call colorearCuadrado
mov ah,0Ch ;Coloca un pixel en pantalla
mov al,06h ;color gris
mov bh,00h ;página
mov cx,240d ;posición X, Inicio
mov bp,190d ;posición Y. Inicio
mov si,200d ;posición Y. Final
mov di,360d ;posición X. Final
call colorearCuadrado
mov ah,0Ch ;Coloca un pixel en pantalla
mov al,03h ;color gris
mov bh,00h ;página
mov cx,260d ;posición X, Inicio
mov bp,220d ;posición Y. Inicio
mov si,250d ;posición Y. Final
mov di,290d ;posición X. Final
call colorearCuadrado
mov ah,0Ch ;Coloca un pixel en pantalla
mov al,06h ;color gris
mov bh,00h ;página
mov cx,315d ;posición X, Inicio
mov bp,240d ;posición Y. Inicio
mov si,280d ;posición Y. Final
mov di,340d ;posición X. Final
call colorearCuadrado
call cerrar
int 10h
pantallaGrafica:
mov ah,00h
mov al,12h ;640x480(16 colores)
int 10h
ret
cerrar:
mov ah,00h
int 16h
cmp al,'s'
jne cerrar
ret
lineaHorizontal:
int 10h
inc cx
cmp cx,si
jbe lineaHorizontal
ret
lineaVertical:
int 10h
inc dx
cmp dx,si
jbe lineaVertical
ret
lineaOblicua:
int 10h
inc dx
inc cx
cmp dx,si
jbe lineaOblicua
ret
colorearCuadrado:
mov dx,bp ;posición Y
call lineaVertical
inc cx
cmp cx,di
jbe colorearCuadrado
ret
colorearTriangulo:
mov dx,bp ;posición Y
call lineaVertical
inc bp
inc cx
cmp cx,di
jb colorearTriangulo
ret
para ejecutarlo desde la consola
nasm -f elf proy2.asm
ld proy2.o -o proy2
./proy2
si lo ejecuto con el dosbox
nasm proy2.asm -o proy2.com
dosbox -noautoexec proy2.com
Muchas Gracias