;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