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 |