SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: vikhtor en Lunes 21 de Mayo de 2007, 06:00

Título: De Masm A Tasm
Publicado por: vikhtor en Lunes 21 de Mayo de 2007, 06:00
Bueno soy nuevo en este foro, y tengo este programa, yo acostumbrado a usar TASM, no entendi algunas lineas de este programa( la parte de ASM), pero se supone q el programa corre y pide dos datos (coordenadas) y de acuerdo a esos datos la parte de ASM coloca el cursor en la posicion de las coordeadas pedidas desde C, pero al monento de compilar el programa me sale errores en la parte de ASM y no entiendo mucho de ellos ya que como dije antes no estoy acostumbrado a la estructura de los programas en MASM, bueno creo por los programas q he visto en este foro que es MASM. agradezco si alguien me aconseja como convertir esto de tal manera q quede a lo q acostumbro-->TASM
Código: Text
  1. #include <stdio.h>
  2. void main (void)
  3. {
  4. extern int curso(int,int);
  5. int temp_row, temp_col;
  6. printf("Enter cursor Row:");
  7. scanf("%d",&temp_row);
  8.  
  9. printf("Enter Cursor Column:");
  10. scanf("%d",&temp_col);
  11.  
  12. set_curs(temp_row, temp_col);
  13. printf("New Cursor Location\n");
  14. }
  15. //------------------------------
  16.  
  17. _DATA segment word 'DATA'
  18. row equ [bp+4]
  19. col equ [bp+6]
  20. DATA ends
  21.  
  22. _TEXT SEGMENT BYTE PUBLIC 'CODE'
  23. _DGROUP GROUP _DATA
  24.        ASSUME CS:_TEXT, DS:GROUP, SS:DGROUP
  25.  
  26.   PUBLIC _SET_CURS
  27. _SET_CURS PROC NEAR
  28.   PUSH BP
  29.   MOV BP,SP
  30.  
  31.   MOV AH,02H
  32.   MOV BX,0
  33.   MOV DH,ROW
  34.   MOV DL,COL
  35.   INT 10H
  36.  
  37.   POP BP
  38.   RET
  39. _SET_CURS ENDP
  40. _TEXT ENDS
  41.  
  42.   END
  43.  
  44.  
Título: Re: De Masm A Tasm
Publicado por: Eternal Idol en Lunes 21 de Mayo de 2007, 09:20
Primero y principal es que eso no parece que deba ser compilado por un compilador de C/C++ sino que parece ser un modulo de assembly independiente. De otra manera solo serian instrucciones encerradas entre asm { } o algo parecido (__asm por ejemplo). Puede ser para enlazar mediante codigo objeto (.obj) por ejemplo o libreria estatica (.lib).

Segundo, el codigo tal como lo mostras no ensambla de ninguna manera. Si cambiamos la linea DATA ends por _DATA ends tal vez podria ensamblar en alguna version de MASM, en la que yo tengo de 16 bits no ensambla por esto:
_DGROUP GROUP _DATA

Segun encontre por ahi es valido pero no se ...

Igualmente si sabes usar TASM, adapta este codigo que es lo unico que realmente hace el trabajo:

Código: Text
  1.  
  2.   PUSH BP
  3.   MOV BP,SP
  4.  
  5.   MOV AH,02H
  6.   MOV BX,0
  7.   MOV DH,[bp+4]
  8.   MOV DL,[bp+6]
  9.   INT 10H
  10.  
  11.   POP BP
  12.   RET
  13.  
  14.  

Solo cambie los equ's de row y col pero me parece que TASM tambien los soportaba ... e incluso tenia una forma de ensamblar segun MASM ...