اطلاعیه

Collapse
No announcement yet.

برنامه جذر به زبان اسمبلی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برنامه جذر به زبان اسمبلی

    سلام من برنامه جذر 2 به زبان اسمبلی برای 8051 رو میخواستم .. کسی میتونه راهنمایی کنه؟

    #2
    پاسخ : برنامه جذر به زبان اسمبلی

    سلام.

    اگه یادتون باشه یک روش تقریبی برای جذر گرفتن توی دوره راهنمایی یاد می دادن که فکر کنم باید اون روش رو برای جذر گرفتن با میکرو پیاده کنید.

    این هم الگوریتم جذر در برنامه CodeVision که به زبان اسمبلی است....

    a=sqrt(b);


    ////////////////////////////////

    LDS R30,_b
    LDS R31,_b+1
    LDS R22,_b+2
    LDS R23,_b+3
    CALL __PUTPARD1
    CALL _sqrt
    STS _a,R30
    STS _a+1,R31
    STS _a+2,R22
    STS _a+3,R23

    __PUTPARD1:
    ST -Y,R23
    ST -Y,R22
    ST -Y,R31
    ST -Y,R30
    RET

    _sqrt:
    sbiw r28,4
    push r21
    ldd r25,y+7
    tst r25
    brne __sqrt0
    adiw r28,8
    rjmp __zerores
    __sqrt0:
    brpl __sqrt1
    adiw r28,8
    rjmp __maxres
    __sqrt1:
    push r20
    ldi r20,66
    ldd r24,y+6
    ldd r27,y+5
    ldd r26,y+4
    __sqrt2:
    st y,r24
    std y+1,r25
    std y+2,r26
    std y+3,r27
    movw r30,r26
    movw r22,r24
    ldd r26,y+4
    ldd r27,y+5
    ldd r24,y+6
    ldd r25,y+7
    rcall __divf21
    ld r24,y
    ldd r25,y+1
    ldd r26,y+2
    ldd r27,y+3
    rcall __addf12
    rcall __unpack1
    dec r23
    rcall __repack
    ld r24,y
    ldd r25,y+1
    ldd r26,y+2
    ldd r27,y+3
    eor r26,r30
    andi r26,0xf8
    brne __sqrt4
    cp r27,r31
    cpc r24,r22
    cpc r25,r23
    breq __sqrt3
    __sqrt4:
    dec r20
    breq __sqrt3
    movw r26,r30
    movw r24,r22
    rjmp __sqrt2
    __sqrt3:
    pop r20
    pop r21
    adiw r28,8
    ret


    __ROUND_REPACK:
    TST R21
    BRPL __REPACK
    CPI R21,0x80
    BRNE __ROUND_REPACK0
    SBRS R30,0
    RJMP __REPACK
    __ROUND_REPACK0:
    ADIW R30,1
    ADC R22,R25
    ADC R23,R25
    BRVS __REPACK1

    __REPACK:
    LDI R21,0x80
    EOR R21,R23
    BRNE __REPACK0
    PUSH R21
    RJMP __ZERORES
    __REPACK0:
    CPI R21,0xFF
    BREQ __REPACK1
    LSL R22
    LSL R0
    ROR R21
    ROR R22
    MOV R23,R21
    RET
    __REPACK1:
    PUSH R21
    TST R0
    BRMI __REPACK2
    RJMP __MAXRES
    __REPACK2:
    RJMP __MINRES

    __UNPACK:
    LDI R21,0x80
    MOV R1,R25
    AND R1,R21
    LSL R24
    ROL R25
    EOR R25,R21
    LSL R21
    ROR R24

    __UNPACK1:
    LDI R21,0x80
    MOV R0,R23
    AND R0,R21
    LSL R22
    ROL R23
    EOR R23,R21
    LSL R21
    ROR R22
    RET

    __SWAPACC:
    PUSH R20
    MOVW R20,R30
    MOVW R30,R26
    MOVW R26,R20
    MOVW R20,R22
    MOVW R22,R24
    MOVW R24,R20
    MOV R20,R0
    MOV R0,R1
    MOV R1,R20
    POP R20
    RET

    __UADD12:
    ADD R30,R26
    ADC R31,R27
    ADC R22,R24
    RET

    __NEGMAN1:
    COM R30
    COM R31
    COM R22
    SUBI R30,-1
    SBCI R31,-1
    SBCI R22,-1
    RET

    __ADDF12:
    PUSH R21
    RCALL __UNPACK
    CPI R25,0x80
    BREQ __ADDF129

    __ADDF120:
    CPI R23,0x80
    BREQ __ADDF128
    __ADDF121:
    MOV R21,R23
    SUB R21,R25
    BRVS __ADDF129
    BRPL __ADDF122
    RCALL __SWAPACC
    RJMP __ADDF121
    __ADDF122:
    CPI R21,24
    BRLO __ADDF123
    CLR R26
    CLR R27
    CLR R24
    __ADDF123:
    CPI R21,8
    BRLO __ADDF124
    MOV R26,R27
    MOV R27,R24
    CLR R24
    SUBI R21,8
    RJMP __ADDF123
    __ADDF124:
    TST R21
    BREQ __ADDF126
    __ADDF125:
    LSR R24
    ROR R27
    ROR R26
    DEC R21
    BRNE __ADDF125
    __ADDF126:
    MOV R21,R0
    EOR R21,R1
    BRMI __ADDF127
    RCALL __UADD12
    BRCC __ADDF129
    ROR R22
    ROR R31
    ROR R30
    INC R23
    BRVC __ADDF129
    RJMP __MAXRES
    __ADDF128:
    RCALL __SWAPACC
    __ADDF129:
    RCALL __REPACK
    POP R21
    RET
    __ADDF127:
    SUB R30,R26
    SBC R31,R27
    SBC R22,R24
    BREQ __ZERORES
    BRCC __ADDF1210
    COM R0
    RCALL __NEGMAN1
    __ADDF1210:
    TST R22
    BRMI __ADDF129
    LSL R30
    ROL R31
    ROL R22
    DEC R23
    BRVC __ADDF1210

    __ZERORES:
    CLR R30
    CLR R31
    CLR R22
    CLR R23
    POP R21
    RET

    __MINRES:
    SER R30
    SER R31
    LDI R22,0x7F
    SER R23
    POP R21
    RET

    __MAXRES:
    SER R30
    SER R31
    LDI R22,0x7F
    LDI R23,0x7F
    POP R21
    RET

    __DIVF21:
    PUSH R21
    RCALL __UNPACK
    CPI R23,0x80
    BRNE __DIVF210
    TST R1
    __DIVF211:
    BRPL __DIVF219
    RJMP __MINRES
    __DIVF219:
    RJMP __MAXRES
    __DIVF210:
    CPI R25,0x80
    BRNE __DIVF218
    __DIVF217:
    RJMP __ZERORES
    __DIVF218:
    EOR R0,R1
    SEC
    SBC R25,R23
    BRVC __DIVF216
    BRLT __DIVF217
    TST R0
    RJMP __DIVF211
    __DIVF216:
    MOV R23,R25
    PUSH R17
    PUSH R18
    PUSH R19
    PUSH R20
    CLR R1
    CLR R17
    CLR R18
    CLR R19
    CLR R20
    CLR R21
    LDI R25,32
    __DIVF212:
    CP R26,R30
    CPC R27,R31
    CPC R24,R22
    CPC R20,R17
    BRLO __DIVF213
    SUB R26,R30
    SBC R27,R31
    SBC R24,R22
    SBC R20,R17
    SEC
    RJMP __DIVF214
    __DIVF213:
    CLC
    __DIVF214:
    ROL R21
    ROL R18
    ROL R19
    ROL R1
    ROL R26
    ROL R27
    ROL R24
    ROL R20
    DEC R25
    BRNE __DIVF212
    MOVW R30,R18
    MOV R22,R1
    POP R20
    POP R19
    POP R18
    POP R17
    TST R22
    BRMI __DIVF215
    LSL R21
    ROL R30
    ROL R31
    ROL R22
    DEC R23
    BRVS __DIVF217
    __DIVF215:
    RCALL __ROUND_REPACK
    POP R21
    RET




    دیدگاه


      #3
      پاسخ : برنامه جذر به زبان اسمبلی

      ممنونم .. این برنامه واسه avr نوشته شده . برای 8051 هم جواب میده ؟ دستورات 8051 فرق میکنه

      دیدگاه


        #4
        پاسخ : برنامه جذر به زبان اسمبلی

        نوشته اصلی توسط محمد حسین خزاعی نژاد
        ممنونم .. این برنامه واسه avr نوشته شده . برای 8051 هم جواب میده ؟ دستورات 8051 فرق میکنه
        سلام.

        دستورات اسمبلی برای 8051 فرق می کنه. سعی می کنم همین رو برای 8051 تبدیل کنم....

        دیدگاه


          #5
          پاسخ : برنامه جذر به زبان اسمبلی

          خیلی خیلی ممنون میشم اگه دستور 8051 رو واسم گیر بیاری ..

          دیدگاه


            #6
            پاسخ : برنامه جذر به زبان اسمبلی

            اینم جذر اسمبلی 8051 که یکی از دوستان زحمتشو کشید :

            .MODEL small
            .STACK 100h
            .DATA

            .CODE

            SqrRoot Proc
            ; CX = Number.
            ; Returns :
            ; BX = Number.
            mov bx,cx
            SqrRootLoop:
            mov ax,cx
            mov dx,0
            div bx
            add ax,bx
            shr ax,1
            mov bx,ax

            cmp bx,256d
            ja SqrRootLoop
            mov ax,bx
            mov dx,bx
            mul dx
            cmp ax,cx
            ja SqrRootLoop
            mov ax,bx
            inc ax
            mov dx,bx
            inc dx
            mul dx
            cmp ax,cx
            jb SqrRootLoop
            ret
            ENDP SqrRoot


            Start:
            mov ax,@Data
            mov ds,ax

            mov cx,30000
            call sqrRoot

            mov ah,4ch
            mov al,0
            int 21h
            END Start

            دیدگاه

            لطفا صبر کنید...
            X