;============================================================================== ;file :ten.asm ;author :Andre Long ;due :May 15, 2006 ;description :This program will multiply two ten digit numbers with arrays ;============================================================================== ;procedures to INCLUDE Pcmac.inc EXTRN NEWLINE:FAR ;display a new line EXTRN GETDEC$:FAR ;gets 16 bit decimal value unsigned EXTRN PUTDEC$:FAR ;display 16 bit value unsigned EXTRN PUTSTRNG:FAR ;display charactor string ;============================================================================== .MODEL SMALL .586 .STACK 100h .DATA n1 DB 1,2,3,4,5,6,7,8,9,0, '$' n2 DB 9,8,7,6,5,4,3,2,1,1, '$' tempA DB 20 DUP (0) tempB DB 20 DUP (0) result DB 20 DUP (0) messP DB 'Product = ', '$' messTA DB 'TempA = ', '$' messTB DB 'TempB = ', '$' endPos DW 9 tempEndPos DW 19 carry DB ? dlank DB ' ','$' ;============================================================================== .CODE ten proc _Begin mov ax, 0 mov bx, 0 mov cx, 0 mov dx, 0 mov si, endPos mov di, endPos mov bx, tempEndPos outerLoop: cmp si, 8 jl doneOuterLoop jmp innerLoop1 innerLoop1: ;sPutStr messTA mov al, [n1 + di] mov dl, [n2 + si] mul dl ;al = al * dl mov [tempA + bx], al ptA: cmp al, 9 jg carry1 jmp noCarry1 carry1: sub al, 10 ;al - 10 mov carry, 1 ;carry = 1 mov [tempA + bx], al mov cl, carry add [tempA + bx - 1], cl jmp afterCarry noCarry1: mov [tempA + bx], al jmp afterCarry afterCarry: dec bx dec di cmp di, 0 jl innerLoop2 jmp innerLoop1 innerLoop2: dec si mov di, endPos innerLoop2a: ;sPutStr messTB mov al, [n1 + di] mov dl, [n2 + si] mul dl ;al = al * dl mov [tempB + bx], al ptAA: cmp al, 9 jg carry12 jmp noCarry12 carry12: sub al, 10 mov carry, 1 mov [tempB + bx], al mov cl, carry add [tempB + bx - 1], cl jmp afterCarry2 noCarry12: mov [tempB + bx], al jmp afterCarry2 afterCarry2:dec bx dec di cmp di, 0 jl addTemps jmp innerLoop2a addTemps: mov bx, tempEndPos addTemps2: mov al, [tempA + bx] mov dl, [tempB + bx] add al, dl mov [result + bx], al cmp al, 9 jg carry13 jmp noCarry13 carry13: sub al, 10 mov carry, 1 mov [result + bx], al mov cl, carry add [result + bx - 1], cl jmp afterCarry3 noCarry13: mov [result + bx], al jmp afterCarry3 afterCarry3: dec bx cmp bx, 0 jl ptOut jmp addTemps2 ptOut: dec si jmp outerLoop doneOuterLoop: display1: mov bx, 0 call newline display2: mov al, [result + bx] call putdec$ sPutStr dlank inc bx cmp bx, 19 jg endDisplay jmp display2 endDisplay: d1: mov bx, 0 call newline d2: mov al, [tempA + bx] call putdec$ sPutStr dlank inc bx cmp bx, 19 jg out2 jmp d2 out2: _Exit ten ENDP END ten