Programación General > ASM (Ensamblador)

 Problema NASM en Linux

(1/1)

nickitafvdr:
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?


--- Código: ASM --- 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

Eternal Idol:
Lo mismo te pasaria en Windows, seguramente estas ensamblando en 16 bits programas para MS-DOS queWindows emula. La interfaz de los servicios de Linux es la int 0x80 pero no conozco ninguno que te sirva para hacer eso, con los tipicos servicios de leer y escribir archivos podrias trabajar con la consola, pero en modo texto.

Navegación

[0] Índice de Mensajes

Ir a la versión completa