Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: benedyt en 5 Abril 2010, 22:08 pm



Título: ayuda con lenguaje ensamblador 8086
Publicado por: benedyt en 5 Abril 2010, 22:08 pm
hola:
haber si me podeis ayudar, tengo unproblema con este codigo.
al correrlo con l turbodebugger me sale un error(indicado abajo), y no se de q puede ser, ya q no me dio ningun error antes al compilarlo.   

       
           .MODEL SMALL
>
>         .STACK 100h
>
>         .DATA
>
>         Barco_A    DB 1,2,3,4,5,6,7,8,9,10,11,12
>          Barco_B    DB 13,14,15,16,17,18,19,20,21,22,23,24
>          Barco_C DB 1,2,3,4,5,6,7,8,9,10,11,12
>          Venta_media_Barco_A DB ?
>         Venta_media_Barco_B DB ?
>         Venta_media_Barco_C DB ?
>         Resultado DB 3 DUP (?)
>
>         .CODE
>
>      MACRO_MEDIA MACRO
> param1,param2,param3,param4,param5,param6,param7,param8,param9,param10,param11,param12,param13
>       push ax
>      MOV ax,0
>        MOV AL,param1
>          ADD AL,param2
>          ADD AL,param3
>          ADD AL,param4
>         ADD AL,param5
>         ADD AL,param6
>         ADD AL,param7
>         ADD AL,param8
>         ADD AL,param9
>         ADD AL,param10
>         ADD AL,param11
>         ADD AL,param12
>          MOV BL,12
>         DIV BL
>          MOV param13,AL
>          pop ax
>
>         ENDM
>
>       MOV AX,@DATA
>          MOV DS,AX
>
>         MACRO_MEDIA
> Barco_A[0],Barco_A[1],Barco_A[2],Barco_A[3],Barco_A[4],Barco_A[5],Barco_A[6],barco_A[7],Barco_A[8],Barco_A[9],Barco_A[10],Barco_A[11],Venta_media_Barco_A
>         MACRO_MEDIA
> Barco_B[0],Barco_B[1],Barco_B[2],Barco_B[3],Barco_B[4],Barco_B[5],Barco_B[6],barco_B[7],Barco_B[8],Barco_B[9],Barco_B[10],Barco_B[11],Venta_media_Barco_B
>         MACRO_MEDIA
> Barco_C[0],Barco_C[1],Barco_C[2],Barco_C[3],Barco_C[4],Barco_C[5],Barco_C[6],barco_C[7],Barco_C[8],Barco_C[9],Barco_C[10],Barco_C[11],Venta_media_Barco_C
>
>          MOV AL,Venta_media_Barco_A
>          MOV AL,Venta_media_Barco_B
>         MOV AL,Venta_media_Barco_C
>
>         CALL PROC_RESULTADO
>
>    fin: MOV Ah,4ch
>     INT 21h
>
>         PROC_RESULTADO PROC
>
>              MOV DI,0
>
>              MOV AL,5
>              MOV BL,10
>              DIV BL                             ;al indicar esta instruccion
> en turbo debugger la ejecucion del se para y aparece una ventana
> diciendo: Divide by zero
>
>              CMP Venta_media_Barco_A, AL
>              JAE Superávit
>              JB Déficit
>
>      B:      CMP Venta_media_Barco_B, AL
>              JAE Superávit
>              JB Déficit
>
>              MOV CX,1
>
>      C:      CMP Venta_media_Barco_C, AL
>              JAE Superávit
>              JB Déficit
>              LOOP C
>              JMP fin
>
> Déficit:     MOV Resultado[DI],'D'
>              INC DI
>              CMP DI,1
>              JE B
>              JA C
> Superávit:   MOV Resultado[DI],'S'
>              INC DI
>              CMP DI,1
>              JE B
>              JA C
>
>            RET
>            PROC_RESULTADO ENDP
>
>     END


Título: Re: ayuda con lenguaje ensamblador 8086
Publicado por: Debci en 5 Abril 2010, 22:13 pm
Intenta mirar todas las operaciones aritmeticas que realiza de manera indirecta tu programa, verás que alguna de ellas divide entre un zero, para esto recomiendo usar un debugger y ver en que momento se breakea y entonces ver que hace en ese momento.


Es lo unico que te puedo decir sin examinar profundamente el codigo.

Saludos