;programa para sumar
	NAME Multiplicacion 
; multiplicacion de numeros de 32 bits
;
pila	SEGMENT para stack 'STACK'
	DB 64 DUP(0)
pila	ENDS
;
data	SEGMENT para public 'DATA'
mdo0	DW	0ffffh	;16 bits bajos del multiplicando
mdo1	DW	0ffffh	;16 bits altos de multiplicando
mdr0	DW	1111h	;16 bits bajos del multiplicador
mdr1	DW	1111h	;16 bits altos del multiplicador
alm0	DW	?	;reserva de memoria para las operaciones
alm1	DW	?
alm2	DW	?
alm3	DW	?
alm4	DW	?
alm5	DW	?
alm6	DW	?
alm7	DW	?
data	ENDS


code	SEGMENT para public 'CODE'
	assume cs:code,ds:data

main	PROC far
;
	MOV AX,data
	MOV DS,AX
	
	MOV AX,mdo0  ;primera multiplicación
	MOV BX,mdr0  ;16 bits bajos del multiplicando
	MUL BX       ;por 16 bits bajos del multiplicador
	MOV alm0,AX  ;16 bits bajos del resultados almacenados en alm0
	MOV alm1,DX  ;16 bits altos del resultado almacenados en alm1

	MOV AX,mdo1  ;segunda multiplicación
	MUL BX       ;16 bits altos del multiplicando
	MOV alm2,AX  ;por 16 bits bajos de multiplicador
	MOV alm3,DX  ;16 bits bajos del resultado en alm2
		     ;16 bits altos del resultado en alm3

	MOV AX,mdo0 ;tercera multiplicación
	MOV BX,mdr1 ;16 bits bajos del multiplicando
	MUL BX	    ;por 16 bits altos del multiplicador
	MOV alm4,AX ;16 bits bajos del resultado en alm4
	MOV alm5,DX ;16 bits altos del resultado en alm5

	MOV AX,mdo1 ;cuarta multiplicación
	MOV BX,mdr1 ;16 bits altos de multiplicando
	MUL BX	    ;16 bits bajos de multiplicador
	MOV alm6,AX ;16 bits bajos almacenados en alm6
	MOV alm7,DX ;16 bits altos almacenados en alm7

;operaciones de sumas parciales

	MOV AX,alm0	;16 bits mas bajos del resultado final 

	MOV BX,alm1	;segundo bloque de 16 bits: el intermedio bajo
	ADD BX,alm2
	ADC alm3,0	;tiene en cuenta el acarreo en la siguiente columna
	ADC alm7,0	;tiene en cuenta el acarreo de la operacion anterior en la siguiente columna
	ADD BX,alm4	;suma el posible acarreo de la suma anterior
	ADC alm3,0	;añade el posible acarreo anterior
	ADC alm7,0	;tiene en cuenta otra vez el acarreo posible de la instrucción anterior

	MOV CX,alm3	;tercer bloque de 16 bits: el intermedio alto
	ADD CX,alm5	;suma el posible acarreo de la suma anterior
	ADC alm7,0	;acarreo en la siguiente columna
	ADD CX,alm6	;suma el posible acarreo de la suma anterior

	MOV DX,alm7	;16 bits mas altos del resultado final
	ADC DX,0	;suma el posible acarreo de la suma anterior
	
	
	JMP main
main 	ENDP
code 	ENDS
	END main
Hosted by www.Geocities.ws

1