Go4Expert (http://www.go4expert.com/)
-   Assembly Language Programming (ALP) Forum (http://www.go4expert.com/forums/assembly-language-programming-forum/)
-   -   very urgent..plz help!! (http://www.go4expert.com/forums/very-urgentplz-help-t26661/)

 Tanya Moitra 10Sep2011 21:10

very urgent..plz help!!

could u plz suggest the 8085 assembly code for the following problem statement?
find the square roots of a few integer numbers stored in contiguous memory locations and store the results into other contiguous memory locations.(also the integer values may not be perfect squares)

 oldisgold 16Apr2012 22:44

Re: very urgent..plz help!!

sorry for the belated response; but i joined this forum only today & just now saw your post.
you might have already got some program to do your required job. if not, you can modify my program (given below; it finds root of one number only) to deal with an array of numbers.

Integer Square Root (Decimal)

(find integer square root of given PackedBCD number; result also in PackedBCD form)

Input : N : 4 digit decimal number (2 bytes PackedBCD) : starting at 8100h
Output: S : square root of N : 2 digit decimal number (1 byte PackedBCD) : at 8200h
(if root is not an integer, that is, if N is not a perfect square, result will be 0).

Programming Notes :

This program uses the fact that the sum of first N odd numbers is N2. The root is obtained by comparing successive sums of odd numbers 1,1+3,1+3+5,… from the given number, keeping a count of comparisons (that is the number of odd numbers in the sum). If we find a sum which is equal to N, the count = square root of N. If, at some stage, the sum becomes greater than N, N is not a perfect square (that is, root of N is not an integer, and the result is made 0. This circuitous method is adopted since DAA does not adjust after subtraction.

Code:

```Addr        Machine                AL Instruction                        Comments         code 8000        21  00  81                LXI        H,        8100h 8003        7E                        MOV        A,        M 8004        FE  00                CPI        0 8006        C2  10  80                JNZ        P2 8009        23                        INX        H 800A        7E                        MOV        A,        M 800B        FE  00                CPI        0                800D        CA 60  80                JZ        P6                        ; if N=0, make root=0. 8010        AF                        XRA        A 8011        32  F1  81                STA        81F1h                        ; initial value=,  01 8014        32  F3  81                STA        81F3h                        ; for count; 8017        3C                        INR        A                        ; =00 01 for 8018        32  00  82                STA        8200h                        ; odd number 801B        32  F0  81                STA        81F1h                        ; & sum of odd nos. 801E        32  F2  81                STA        81F2h 8021        21 F3  81        P3:        LXI        H,        81F3h 8024        3A  01  81                LDA        8101h 8027        BE                        CMP        M 8028        DA 60  80                JC        P6                ; if N<sum, make root=0. 802B        C2  39  80                JNZ        P5                ; if N>sum, go to take next odd no. 802E        2B                P31:        DCX        H 802F        3A  00 81                LDA        8100h 8032        BE                        CMP        M 8033        DA 60  80                JC        P6                ; if N<sum, make root=0. 8036        CA 64  80                JZ        P7                ; if N=sum, root found. 8039        3A  00  82        P5:        LDA        8200h 803C        3C                        INR        A                ; increment count. 803D        27                        DAA 803E        32  00  82                STA        8200h 8041        21  F0  81                LXI        H,        81F0h 8044        7E                        MOV        A,        M 8045        C6  02                  ADI        2 8047        27                        DAA 8048        77                        MOV        M,        A 8049        23                        INX        H 804A        7E                        MOV        A,        M 804B        CE  00                ACI        0 804D        27                        DAA 804E        77                        MOV        M,        A 804F        2B                        DCX        H 8050        11  F2  81                LXI        D,        81F2h 8053        1A                        LDAX        D 8054        86                        ADD        M 8055        27                        DAA 8056        12                        STAX        D 8057        23                        INX        H 8058        13                        INX        D 8059        1A                        LDAX        D 805A        8E                        ADC        M 805B        27                        DAA 805C        12                        STAX        D 805D        C3  21  80                JMP        P3 8060        AF                P6:        XRA        A 8061        32  00  82                STA        8200h 8064        76                P7:        HLT Sample Data                        Run 1        Run 2        Run 3 Input                00 25        01 69        31 22 Output        05                13                00                         Memory Map                  Address                Run 1        Run 2        Run 3 Input          8100                25                69                22           8101                00                01                31 Output  8200                05                13                00```

 oldisgold 16Apr2012 22:58

Re: very urgent..plz help!!

i see that tabs are not displayed properly. the data used for the 3 runs of the program is given here again.

Sample Data

Run 1
Input 00 25
Output 05

Run 2

Input 01 69
Output 13

Run 3

input 31 22
output 00

Memory Map (how the data are located/seen in memory)

Run 1

Input
Output

run 2

input
output

run 3

input