Ultima duda ensamblador. PLEESSSS

Pos que tampoco se por donde agarrar esto. Me da un Fatal error y ni idea:

factorial proc near push dx mov ax, 1 for: bucle_for:cmp si,1 jnl fin_for mult si dec si jmp bucle_for fin_for: pop dx ret factorial endp

Gracias

Reply to
Netma
Loading thread data ...

- No es MULT sino MUL.

- JNL es Jump if Not Less -> salta si no es menor, debio ser JB Jump if Below

El Fatal Error?, un codigo invalido no da FATAL ERROR en la compilacion, debe estar en otra parte o tal vez olvidaste de nuevo poner END al final del programa.

*** BONUS *** En este momento estoy desocupado, te paso un breve y restringido ejemplo de como podria ser el programa. Restriccion 1: Nmaximo = 8 es una cagada pero es para que el resultado entre en 16 bits. Restriccion 2: Ausencia de comentarios, jamas los comento, y asi me va... al poco tiempo no entiendo mi propio codigo.

Cualquier intento de hacer algo que sirva para numeros mas grandes debe trabajar con un numero grande de bytes (ej. 255! = 3.35*10^504 => ocupa 210 bytes), no es algo de otro mundo pero hay que pensarlo mas tiempo.

Ah!, lo hize COM, small is beautiful!

;---------------------------------------- ; Compilar: Tasm prog ; Linkear: Tlink /t prog ;---------------------------------------- ; ***** Macros DOS ***** BufferedInput MACRO offset_buffer ifnb mov dx,offset_buffer endif mov ah,0Ah int 21h ENDM

PrintString MACRO offset_buffer ifnb mov dx,offset_buffer endif mov ah,9 int 21h ENDM

CharacterOutput MACRO char ifnb mov dl,char endif mov ah,2 int 21h ENDM ;----------------------------------------

.MODEL TINY

;---------------------------------------- .DATA ;--------------- msgError db 'Numero incorrecto$'

msg1 db 'Ingrese N: $' CharBuffer db 2,3 dup(0)

msg2 db 'Factorial: ' salida db 6 dup(' ')

_10 dw 10

;---------------------------------------- .CODE ;--------------- ORG 100h ;--------------- Inicio PROC

PrintString

BufferedInput CharacterOutput 0Ah

lea dx,msgError

cmp CharBuffer[1],0 jz @@ERROR

mov al,CharBuffer[2] sub al,'0' jc @@ERROR cmp al,8 ja @@ERROR

call Factorial_AL

lea bx,salida call AX2Ascii

lea dx,msg2

@@ERROR: PrintString .EXIT

ENDP

;---------------

Factorial_AL PROC cbw mov cx,1 xchg cl,al jcxz @@fin @@loop: mul cx loop @@loop

@@fin: ret ENDP

;---------------

AX2Ascii PROC add bx,5 mov BYTE PTR [bx],'$' @@siga: sub dx,dx div _10 add dl,'0' dec bx mov [bx],dl or ax,ax jnz @@siga

ret ENDP

;----------------------------------------

END Inicio

Saludos. Eduardo.

Reply to
Eduardo

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.