برای مشاهده مفیدترین ارسال در این موضوع اینجا کلیک کنید

نمایش نتایج: از شماره 1 تا 3 از مجموع 3
Like Tree8نفر پسندیدند
  • 6 ارسال توسط MoJTaBa
  • 1 ارسال توسط MoJTaBa
  • 1 ارسال توسط Hossein

موضوع: ضرب دو عدد اعشاری ممیز ثابت Fixed Point

Threaded View

  1. #1
    مدیر بازنشسته
    تاریخ عضویت
    2011 October
    ارسال ها
    29
    تشکر
    118
    تشکر شده 153 بار در 36 پست
    نوشته های وبلاگ
    1


    1 امتياز مثبت از 1 راي
    آيا اين پست براي شما سودمند بود؟ بله | خیر

    ضرب دو عدد اعشاری ممیز ثابت Fixed Point

    عدد اعشاری ممیز ثابت Fixed Point :

    یکی دیگر از روش های نمایش اعداد اعشاری در زبان ماشین Fixed Point است. در این روش عدد را به صورت X.Yنمایش می دهند. که برای مثال X قسمت صحیح عدد بوده و در 8 بیت پر ارزش یک عدد 16 بیتی و Y قسمت اعشار و در 8 بیت کم ارزش آن قرار داده و محاسبات را به وسیله آن انجام می دهند.

    ضرب دو عدد به صورت Fixed Point :

    برای ضرب دو عدد به صورت Fixed Point باید دو عدد را طوری در هم ضرب کنیم که معادل هگز قسمت صحیح عدد به دهدهی در قسمت صحیح عدد نتیجه و معادل هگز قسمت اعشاری به دهدهی در قسمت اعشاری عدد نتیجه قرار گیرد.

    کد برنامه :

        PAGE 110,100
    TITLE 'MUL_FIXED_POINT.ASM' add two ASCII
    ;-----------------------------------------------
    ; Defining segment of program
    ; ---------------------------
    CODESG SEGMENT
    ASSUME SS:CODESG,DS:CODESG,CS:CODESG
    ORG 100H
    START: JMP MAIN ;1-Jump over data
    ;
    ; 1- Define data
    ; --------------

    A DW ? ;FIRST VALUE
    B DW ? ;SECOND VALUE
    R DD ?,? ;RESULT -->EXAMPLE: 365.912 BIT:0->32= 912 , BIT:32->64= 365
    NA DD ?
    NB DD ?
    A_BCD DB 6 DUP(?)
    B_BCD DB 6 DUP(?)
    R_BCD DB 12 DUP(?)
    ALEFT DB 0FFH
    ARIGHT DB 0FFH
    BLEFT DB 0EEH
    BRIGHT DB 0EEH
    COUNTA DB 0
    COUNTB DB 0
    COUNTR DB ?
    DIVT DD ?,?
    ;
    ; 2- The rest of instructions
    ; ---------------------------
    MAIN PROC NEAR
    ;

    MOV AL,ARIGHT
    MOV BYTE PTR A,AL
    MOV AL,ALEFT
    MOV BYTE PTR A+1,AL
    MOV AL,BRIGHT
    MOV BYTE PTR B,AL
    MOV AL,BLEFT
    MOV BYTE PTR B+1,AL
    ;
    ;////////////////////////////////////////////////////////////
    ;CONVERT INTERED VALUES TO BCD &COMPUTATION NUMBER OF DECIMAL PLACES IN A&B

    MOV AL,BYTE PTR A
    MOV AH,0
    MOV CL,10
    LEA SI,A_BCD
    ;
    FORA:
    MOV AH,0
    DIV CL
    INC COUNTA
    MOV [SI],AH
    INC SI
    CMP AL,0
    JA FORA
    ;
    MOV AL,BYTE PTR A+1
    MOV AH,0
    ;
    FORA2:
    MOV AH,0
    DIV CL
    MOV [SI],AH
    INC SI
    CMP AL,0
    JA FORA2

    ;
    MOV AL,BYTE PTR B
    MOV AH,0
    LEA SI,B_BCD
    ;
    FORB:
    MOV AH,0
    DIV CL
    INC COUNTB
    MOV [SI],AH
    INC SI
    CMP AL,0
    JA FORB
    ;
    MOV AL,BYTE PTR B+1
    MOV AH,0
    FORB2:
    MOV AH,0
    DIV CL
    MOV [SI],AH
    INC SI
    CMP AL,0
    JA FORB2
    ;//////////////////////////////////////////////////////////////
    ;CONVERT A TO CORRECT FORM
    MOV AL,A_BCD
    CBW
    MOV NA,AX
    MOV AL,A_BCD+1
    CBW
    MOV BX,10
    MUL BX
    ADD NA,AX
    MOV AL,A_BCD+2
    CBW
    MOV BX,100
    MUL BX
    ADD NA,AX
    MOV AL,A_BCD+3
    CBW
    MOV BX,1000
    MUL BX
    ADD NA,AX
    MOV AL,A_BCD+4
    CBW
    MOV BX,10000
    MUL BX
    ADD NA,AX
    ;/////////////
    MOV AL,A_BCD+5
    CBW
    MOV BX,86A0H
    MUL BX
    ADD NA,AX
    MOV NA+2,DX
    MOV AL,A_BCD+5
    CBW
    MOV BX,1H
    MUL BX
    CLC
    ADD NA+2,AX
    ADC NA+4,DX
    ;/////////////

    ;//////////////////////////////////////////////////////////////
    ;CONVERT B TO CORRECT FORM

    MOV AL,B_BCD
    CBW
    MOV NB,AX
    MOV AL,B_BCD+1
    CBW
    MOV BX,10
    MUL BX
    ADD NB,AX
    MOV AL,B_BCD+2
    CBW
    MOV BX,100
    MUL BX
    ADD NB,AX
    MOV AL,B_BCD+3
    CBW
    MOV BX,1000
    MUL BX
    ADD NB,AX
    MOV AL,B_BCD+4
    CBW
    MOV BX,10000
    MUL BX
    ADD NB,AX
    ;/////////////
    MOV AL,B_BCD+5
    CBW
    MOV BX,86A0H
    MUL BX
    ADD NB,AX
    MOV NB+2,DX
    MOV AL,B_BCD+5
    CBW
    MOV BX,1H
    MUL BX
    CLC
    ADD NB+2,AX
    ADC NB+4,DX
    ;/////////////

    ;//////////////////////////////////////////////////////////////
    ;MUL VALUES
    MOV AX,NA
    MOV BX,NB
    MUL BX
    MOV R,AX
    MOV R+2,DX
    MOV AX,NA+2
    MUL BX
    CLC
    ADD R+2,AX
    ADC R+4,DX
    ADC R+6,0
    MOV AX,NA
    MOV BX,NB+2
    MUL BX
    CLC
    ADD R+2,AX
    ADC R+4,DX
    ADC R+6,0
    MOV AX,NA+2
    MUL BX
    CLC
    ADD R+4,AX
    ADC R+6,DX
    ;///////////////////////////////////////////////////////////////
    ;COMPUTATION NUMBER OF DECIMAL PLACES IN RESULT
    MOV AL,COUNTA
    ADD AL,COUNTB
    MOV COUNTR,AL
    ;
    MOV CX,10
    MOV SI,0
    ;///////////////////////////////////////////////////////////////
    ;CONVERT RESULT TO BCD
    FOR1:

    MOV DIVT,0
    MOV DIVT+2,0
    MOV DIVT+4,0
    ;START DIV
    MOV AX, R+3
    MOV DX,0
    DIV CX
    ADD DIVT,AX
    ;
    SHL DIVT+1,8
    SHL DIVT,8
    MOV AX,R+2
    MOV AH,DL
    MOV DX,0
    DIV CX
    ADD DIVT,AX
    ;
    SHL DIVT+2,8
    SHL DIVT+1,8
    SHL DIVT,8
    MOV AX,R+1
    MOV AH,DL
    MOV DX,0
    DIV CX
    ADD DIVT,AX
    ;
    SHL DIVT+3,8
    SHL DIVT+2,8
    SHL DIVT+1,8
    SHL DIVT,8
    MOV AX,R
    MOV AH,DL
    MOV DX,0
    DIV CX
    ADD DIVT,AX
    ;END DIV
    MOV R_BCD[SI],DL
    MOV AX,DIVT
    MOV R,AX
    MOV AX,DIVT+2
    MOV R+2,AX
    MOV AX,DIVT+4
    MOV R+4,AX
    INC SI
    CMP R+2,0
    JNZ FOR1
    CMP R,0
    JNZ FOR1
    ;/////////////////////////////////////////////////////////////
    ;CONVERT DECIMAL & RIGHT PART OF BCD TO HEX
    MOV DI,WORD PTR COUNTR
    MOV AL,R_BCD
    CBW
    MOV R,AX
    DEC DI
    JZ POS1
    MOV AL,R_BCD+1
    CBW
    MOV BX,10
    MUL BX
    ADD R,AX
    DEC DI
    JZ POS1
    MOV AL,R_BCD+2
    CBW
    MOV BX,100
    MUL BX
    ADD R,AX
    DEC DI
    JZ POS1
    MOV AL,R_BCD+3
    CBW
    MOV BX,1000
    MUL BX
    ADD R,AX
    DEC DI
    JZ POS1
    MOV AL,R_BCD+4
    CBW
    MOV BX,10000
    MUL BX
    ADD R,AX
    DEC DI
    ;/////////////
    MOV AL,R_BCD+5
    CBW
    MOV BX,86A0H
    MUL BX
    ADD R,AX
    MOV R+2,DX
    MOV AL,R_BCD+5
    CBW
    MOV BX,1H
    MUL BX
    CLC
    ADD R+2,AX
    ;/////////////

    ;
    POS1:
    MOV SI,WORD PTR COUNTR
    MOV AL,R_BCD[SI]
    CBW
    MOV R+4,AX
    MOV AL,R_BCD[SI]+1
    CBW
    MOV BX,10
    MUL BX
    ADD R+4,AX
    MOV AL,R_BCD[SI]+2
    CBW
    MOV BX,100
    MUL BX
    ADD R+4,AX
    MOV AL,R_BCD[SI]+3
    CBW
    MOV BX,1000
    MUL BX
    ADD R+4,AX
    MOV AL,R_BCD[SI]+4
    CBW
    MOV BX,10000
    MUL BX
    ADD R+4,AX
    ;/////////////
    MOV AL,R_BCD[SI]+5
    CBW
    MOV BX,86A0H
    MUL BX
    ADD R+4,AX
    MOV R+6,DX
    MOV AL,R_BCD[SI]+5
    CBW
    MOV BX,1H
    MUL BX
    CLC
    ADD R+6,AX


    ;


    ;
    MOV AX,4C00H ;8- End of
    INT 21H ;9- processing
    MAIN ENDP ; End of procedure
    CODESG ENDS ; End of segment
    END START ; End of program
    ;By : Mojtaba Alizadeh Mojia91@yahoo.com


    موضوعات مشابه:
    فایل های پیوست شده
    ویرایش توسط MoJTaBa : 12th April 2012 در ساعت 10:53 PM
    Hossein, Mehdi, Shojaee و 3 نفر دیگر این نویسه را می پسندند.

 

 

کاربران برچسب خورده در این موضوع

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  


Powered by vBulletin
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0
Persian Language By Ustmb.ir
این انجمن کاملا مستقل بوده و هیچ ارتباطی با دانشگاه علوم و فنون مازندران و مسئولان آن ندارد..این انجمن و تمامی محتوای تولید شده در آن توسط دانشجویان فعلی و فارغ التحصیل ادوار گذشته این دانشگاه برای استفاده دانشجویان جدید این دانشگاه و جامعه دانشگاهی کشور فراهم شده است.لطفا برای اطلاعات بیشتر در رابطه با ماهیت انجمن با مدیریت انجمن ارتباط برقرار کنید
ساعت 05:12 AM بر حسب GMT +4 می باشد.