Hola, estoy trabajando por primera vez en nasm, en linux, tengo varios programas hechos en ensamblador que corren perfectamente en windows, pero en linux no, lo compilo con nasm y no me da ningun error, pero al momento de ejecutarlo da fallo de segmentacion. utilice gdb, y me dice lo siguiente:
GDB:
------------------------------------------------------------------------------------------------
Leyendo símbolos desde /home/vlad/Descargas/asm/proy2/proy2...hecho.
(gdb) run
Starting program: /home/vlad/Descargas/asm/proy2/proy2
Program received signal SIGSEGV, Segmentation fault.
pantallaGrafica () at proy2.asm:161
161 int 10h
(gdb)
------------------------------------------------------------------------------------------------
Error en la línea 161, función pantallaGrafica (), instrucción "int 10h".
La interrupción 10h (0x10) no es posible de ejecutarse en Linux porque el Kernel trabaja completamente en modo protegido y ningún programa a nivel de usuario puede tocar el hadware directamente.
Si no puedo utilizar la int 10h, que otras opciones tengo?
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
Gracias