• Domingo 22 de Diciembre de 2024, 08:18

Autor Tema:  Problema NASM en Linux  (Leído 2406 veces)

nickitafvdr

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema NASM en Linux
« en: Viernes 11 de Diciembre de 2009, 02:45 »
0
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
  1.  
  2. global _start
  3.  
  4. section .data
  5.  
  6.  
  7. section.text
  8. _start:
  9. call pantallaGrafica
  10.  
  11.  
  12.  
  13. mov ah,0Ch          ;Coloca un pixel en pantalla
  14.  
  15. mov al,07h          ;color gris
  16.  
  17. mov bh,00h          ;página
  18.  
  19. mov cx,250d         ;posición X, Inicio
  20.  
  21. mov bp,200d         ;posición Y. Inicio
  22.  
  23. mov si,280d         ;posición Y. Final
  24.  
  25. mov di,350d         ;posición X. Final
  26.  
  27. call colorearCuadrado
  28.  
  29.  
  30.  
  31. mov ah,0Ch          ;Coloca un pixel en pantalla
  32.  
  33. mov al,06h          ;color gris
  34.  
  35. mov bh,00h          ;página
  36.  
  37. mov cx,240d         ;posición X, Inicio
  38.  
  39. mov bp,190d         ;posición Y. Inicio
  40.  
  41. mov si,200d         ;posición Y. Final
  42.  
  43. mov di,360d         ;posición X. Final
  44.  
  45. call colorearCuadrado
  46.  
  47.  
  48.  
  49. mov ah,0Ch          ;Coloca un pixel en pantalla
  50.  
  51. mov al,03h          ;color gris
  52.  
  53. mov bh,00h          ;página
  54.  
  55. mov cx,260d         ;posición X, Inicio
  56.  
  57. mov bp,220d         ;posición Y. Inicio
  58.  
  59. mov si,250d         ;posición Y. Final
  60.  
  61. mov di,290d         ;posición X. Final
  62.  
  63. call colorearCuadrado
  64.  
  65.  
  66.  
  67. mov ah,0Ch          ;Coloca un pixel en pantalla
  68.  
  69. mov al,06h          ;color gris
  70.  
  71. mov bh,00h          ;página
  72.  
  73. mov cx,315d         ;posición X, Inicio
  74.  
  75. mov bp,240d         ;posición Y. Inicio
  76.  
  77. mov si,280d         ;posición Y. Final
  78.  
  79. mov di,340d         ;posición X. Final
  80.  
  81. call colorearCuadrado
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91. call cerrar
  92.  
  93. int 10h
  94.  
  95.  
  96.  
  97. pantallaGrafica:
  98.  
  99. mov ah,00h
  100.  
  101. mov al,12h          ;640x480(16 colores)
  102.  
  103. int 10h
  104.  
  105. ret
  106.  
  107.  
  108.  
  109. cerrar:
  110.  
  111. mov ah,00h
  112.  
  113. int 16h
  114.  
  115. cmp al,'s'
  116.  
  117. jne cerrar
  118.  
  119. ret
  120.  
  121.  
  122.  
  123. lineaHorizontal:
  124.  
  125. int 10h
  126.  
  127. inc cx
  128.  
  129. cmp cx,si
  130.  
  131. jbe lineaHorizontal
  132.  
  133. ret
  134.  
  135.  
  136.  
  137. lineaVertical:
  138.  
  139. int 10h
  140.  
  141. inc dx
  142.  
  143. cmp dx,si
  144.  
  145. jbe lineaVertical
  146.  
  147. ret
  148.  
  149.  
  150.  
  151. lineaOblicua:
  152.  
  153. int 10h
  154.  
  155. inc dx
  156.  
  157. inc cx
  158.  
  159. cmp dx,si
  160.  
  161. jbe lineaOblicua
  162.  
  163. ret
  164.  
  165.  
  166.  
  167. colorearCuadrado:
  168.  
  169. mov dx,bp               ;posición Y
  170.  
  171. call lineaVertical
  172.  
  173. inc cx
  174.  
  175. cmp cx,di
  176.  
  177. jbe colorearCuadrado
  178.  
  179. ret
  180.  
  181.  
  182.  
  183. colorearTriangulo:
  184.  
  185. mov dx,bp               ;posición Y
  186.  
  187. call lineaVertical
  188.  
  189. inc bp
  190.  
  191. inc cx
  192.  
  193. cmp cx,di
  194.  
  195. jb colorearTriangulo
  196.  
  197. ret
  198.  
  199.  
  200.  
  201.  

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema NASM en Linux
« Respuesta #1 en: Viernes 11 de Diciembre de 2009, 08:15 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.