نمایش نتایج 1 تا 21 از 21

نام تاپیک: تغییرات در ماشین حساب به زبان اسمبلی

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    iran
    پست
    73

    تغییرات در ماشین حساب به زبان اسمبلی

    یه برنامه اسمبلی است که می خواهم کمکم کنید چون به کمک شما احتیاج دارم البته مشکل من برای شما سخت نیست
    در برنامه ای (یه ماشین حساب ساده)که می توانید آنرا از اینجا دانلود کنید به مشکل برخوردم


    http://hosseindn.persiangig.com/calc.rar
    می خواهم هنگام تعریف متغیر برای گرفتن ورودی از کاربر به جای دستورات زیر






    DIGIT1   DB 3,?,3 DUP(?)
    از دستور زیر استفاده کرد(همان دستورات گرفتن رشته از کاربر)






    Strlist lable byte
    max db 3
    len db ?
    Buffer db 3 dup(' ')

    این دستورات آرایه ای تعریف می کند و با استفاده از شماره سرویس
    0h
    Ah از شماره وقفه 21
    ‌ از کاربر ورودی را گرفت

    mov ah, 0ah
    lea dx, strlist
    int 21
    من می خواهم بدانم اگر بخواهم از روشی که گفتم استفاده کنم باید در کدام قسمت برنامه تغییرات اعمال کرد تا برنامه به همان روال قبل جواب بدهد
    در برنامه از متغیرهایی مانند Digit1+2 استفاده شده من اگه بخواهم به روشی که گفتم عمل کنم باید تغییراتی اعمال کنم چون متغیر Digit1 تغییر می یابد

    مشکل دوم این اینست که چطوری می تونم از کاربر تا 8 رقم ورودی بگیرم و برنامه جواب درست بدهد
    )برنامه تا 2 کاراکتر بیشتر ورودی نمیگیرد (
    لازم به ذکر است که من به جای اعداد 3 در Data segment ‌عدد 9 گذاشتم . کاربر میتوانست تا 8 رقم عدد ورودی بدهد ولی برنامه جواب درست به کاربر نمی داد

    اگه لطف کنید این تغییرات را به من بگید ممنون میشم
    البته این برنامه از همین سایت که توسط آقا مهدی ... گذاشته شده بود دانلود کردم
    قبلا از بچه های همین سایت کمک گرفته بودم ولی به نتیجه نرسیدم
    امید وارم با کمک همه دوستان به نتیجه برسیم

    با تشکر از همه دوستان

  2. #2
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    این برنامه اصلا مشکل داره از بیخ شما چیشو میخواید درست کنید.

    6+5=136!!!!!!!!!!!!!!!!
    12*3=516!!!!!!!!!!!!!!!!
    12/4=0!!!!!!!!!!!!!!!!!!!!

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    iran
    پست
    73
    دوست عزیز قالب ورودی این برنامه به شکل زیر است
    ## @ ##
    #= عدد و @=علامت
    شما باید به شکل زیر ورودی وارد می کردید
    06 + 05
    12 * 03
    12 / 04
    ===> یک عدد دو رقمی وارد می کنید بعد کلید اینتر ، بعد علامت دوباره کلید اینتر و سپس یک عدد دو رقمی دیگر نیز وارد می کنید و برای جواب گفتن دوباره کلید اینتر را فشار دهید

  4. #4
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    من می خواهم بدانم اگر بخواهم از روشی که گفتم استفاده کنم باید در کدام قسمت برنامه تغییرات اعمال کرد تا برنامه به همان روال قبل جواب بدهد
    به جای اینکه DIGIT1 رو به وقفه بدید آدرس Strlist یا max رو جایگزین کنید.
    مشکل دوم این اینست که چطوری می تونم از کاربر تا 8 رقم ورودی بگیرم و برنامه جواب درست بدهد
    از دستورات و رجیسترهای 32 بیتی به جای 16 بیتی استفاده کنید.

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    iran
    پست
    73
    از دستورات و رجیسترهای 32 بیتی به جای 16 بیتی استفاده کنید
    چطوری این کار را بکنم؟

  6. #6
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    تهران
    سن
    40
    پست
    18

    استفاده از رجیسترهای 32 بیتی

    شما با استفاده از رجیسترهای 32 بیتی مثل EAX به جای AX این کار رو میتونید انجام بدید البته این کار از 386 به بالا مجاز است.

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    iran
    پست
    73
    منظورتون این است که من در اول هر ثبات E بگذارم .؟
    در مورد کدام ثباتها میشه این کار را کرد ؟

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    iran
    پست
    73
    در کتب آقای جعفر نژاد در فصل 7 از یه یک کتابخانه lib.asm صحبت شده است که در ان توابع آماده است مثلا برای دریافت یک عدد .
    اگه من برنامه را با اون توابع بنویسم چطور است ؟
    من این فایلlib.asm را ندارم اگه میشه برایم بفرستید
    ممنون میشم اگه یه مثال از تابع get_num آن برایم بزنید
    مثلا برای گرفتم یه عدد 8 رقمی چطور باید از آن استفاده کرد
    ممنون
    با تشکر

  9. #9
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    .MODEL TINY
    .386p
    .CODE
    ORG 256
    s:
    mov eax,012345678
    ret
    END s

    این یه برنامه com هست که توش از رجیستر 32 بیتی استفاده شده و با tasm هم میشه اسمبل کرد. پس از این بابت مشکلی نیست.
    حالا شما چرا نمی تونید از رجیستر های 16 بیتی استفاده کنید؟ چون جا نمیشه و نمیتونه محاسباتی که میخواید انجام بدید رو پوشش بده.
    ولی استفاده از دستورات و رجیسترهای 32 بیتی کمک میکنه تا این مشکل حل بشه.

  10. #10
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    iran
    پست
    73
    سلام
    از این که شبه دستور 0386 را به من یاد دادید ممنون چون من قبلا این دستور را نمی دانستم
    من از این دستور استفاده کردم و برنامه اسمبل شد وفایل اجرایی آنر ساخت
    ولی وقتی آن را اجرا می کنم با این پیام خطا زیر می شوم . حال شما بگو مشکل چیست؟
    "NTVDM.EXE has encountered a problem and needs to close. We are sorry for the inconvenience."
    تغییراتی را که هم اعمال کردم این بوده است که به جای ثبات های ax,bx,cx,dx ثبات های eax,ebx,ecx,edx استفاده کردم .
    منتظر جواب هستم .
    در ضمن عرض کنم که آدما هیچ وقت نمی توانند به یک چیز خاص تسلط کامل پیدا کنند .
    ممنون میشدم توصیه هایتان را با پیام خصوصی می گفیتد.

  11. #11
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579
    فقط این کار کافی نیست. ببینید مثلا وقتی پارامتر دستور div از نوع بایت باشه ax تقسیم بر پارامتر میشه خارج قسمت در al و باقیمانده در ah قرار میگیره. وقتی نه پارامتر 16 بیتی میشه اینبار DX:AX تقسیم بر پارامتر میشه بعد ax میشه خارج قسمت و dx باقیمانده ..... منظورم اینه که به همه چیز باید حوستون باشه بعضی جاها تغییرات خوهید داشت و فقط با اضافه کردن e جلوی رجیسترها طبیعتا برنامه جواب نمیده.
    من از این دستور استفاده کردم و برنامه اسمبل شد وفایل اجرایی آنر ساخت
    ولی وقتی آن را اجرا می کنم با این پیام خطا زیر می شوم . حال شما بگو مشکل چیست؟
    "NTVDM.EXE has encountered a problem and needs to close. We are sorry for the inconvenience."
    با TD286 برنامتونو debug کنید ببینید مشکل کجاست. با دیباگر dos نمیشه چون اون دستورات 32 بیتی رو نمیتونه disassemble کنه.

  12. #12
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    تهران
    سن
    40
    پست
    18

    رجیسترهای 32 بیت

    اگر شما بخواهید یک برنامه مثلا ماشین حساب را که یک عدد دورقمی میگیرد واز سیستم شانزده بیتی استفاده میکند به برنامه سی و دو بیتی تغییر دهید باید کل سیستم برنامه را عوض کنید

  13. #13
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    iran
    پست
    73
    این دفعه اول من است که می خواهم برنامه 32 بیتی بنویسم .دو تا کتاب اسمبلی معروف هم دارم ولی ادر این کتابها از برنامه های 16 بیتی استفاده کردند و به همین دلیل است که اشکالات زیادی دارم
    اگه شما کمک کنید قصد دارم برنامه را از اول خودم بنویسم
    من فرصت کمی دارم و به کمک شما دوستان شدیدا احتیاج دارم
    1-گرفتم اعداد در 32 بیتی با 16 بیتی تفاوتی دارد؟
    2- وقتی از EAX به جای AX ‌استفاده می کنیم Ah ,Al هم تغییر می کند؟
    3- دستورات جمع و ضرب وتقسیم و تفریق در 32 بیتی فرقی دارد؟
    4- اگر مسائل دیگری هم هست که ممکنه مفید باشه ممنون میشم ذکر کنید
    با تشکر
    در ضمن منTD286 را ندارم
    دوباره تغیراتی اعمال کردم فایل اجرایی را ساخت
    ولی وقتی اجرا می کنی ،‌ فقط یه صفحه سیاه ظاهر میشه (اجرا میشه) ولی نمیدونم چرا دستورات را انجام نمیده
    اگه لازم هست برنامه را آپلود کنم

  14. #14
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    تهران
    سن
    40
    پست
    18
    2 - AX شانزده بیت اول EAX را تشکیل میدهد یعنی اگر بخواهید به ورد اول EAX دسترسی داشته باشید باید از AX استفاده کنید

    | 8bit آال | bit 8 آ هاش | 16bit |

  15. #15
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    تهران
    سن
    40
    پست
    18
    3- بله حتما" تا اونجایی که من مطلع هستم دستورات برروی بایت یا ورد عمل میکنند مثلا برای جمع دو عدد 32 بیتی میتونید اون رو به دو عدد 16 بیتی تقسیم کنید

    اگر یک عدد شما در AX:DX ویکی در Y+2 و Y باشد ADD AX , Y ADC DX,Y+2

  16. #16
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    تهران
    سن
    40
    پست
    18
    البته الان که من نگاه کردم میشه مستقیما" از رجیستر 32 بیت در دستورات هم استفاده کرد مثلا Mov Eax , 76 مشکلی ایجاد نمیکنه . پس میتونید مستقیما MOV EAx, Y رو اجرا کنید البته Y باید از نوع Double باشه یعنیY DD

  17. #17
    ba salam .mishe tagsim 16 biti bar 8 biti ro bedon estefade az dastor div va fagat ba shift kardan ro dar micro z80 baram bezarin ba tashakor.

  18. #18
    کاربر جدید آواتار sarbandi
    تاریخ عضویت
    مهر 1386
    محل زندگی
    کاشان
    سن
    39
    پست
    25
    .model small
    .data
    oprand1 db 9 dup(0)
    oprand2 db 9 dup(0)
    natigeh db 20 dup('0')
    len1 db 0
    len2 db 0
    len3 db 0
    col db 0
    row db 0
    mot db 0
    mot1 db 0
    mot2 dw 0
    mot3 dw 0
    ka_ge dw 0
    count dw 0
    si1 dw 0
    di1 dw 0
    sign db 0
    operate db 0
    ja0 db 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄ¿','$'
    ja1 db '³ ³','$'
    ja2 db 'ÃÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄ ÄÄÄÄÄ´','$'
    ja3 db '³ 1 ³ 2 ³ 3 ³ 4 ³ 5 ³','$'
    ja4 db 'ÃÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍ ÍÍÍÍÍ´','$'
    ja5 db '³ 7 ³ 8 ³ 9 ³ 0 ³ esc ³','$'
    ja6 db 'ÃÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍ ÍÍÍÍÍ´','$'
    ja7 db '³ + ³ - ³ * ³ / ³ = ³','$'
    ja8 db 'ÀÍÍÍÍÍÁÍÍÍÍÍÁÍÍÍÍÍÁÍÍÍÍÍ ÍÍÍÍÍÙ',0ah,0dh,'$'
    .code
    calculator proc
    ;//////////////////////////////////////////
    mov ax,@data
    mov ds,ax
    call cls
    call shekl
    calculatorp:
    call amaliat
    mov ah,00h
    int 16h
    cmp al,27
    je calc_ret
    call start
    jmp calculatorp
    calc_ret:
    mov ah,4ch
    int 21h
    calculator endp
    ;/////////////////////////////////
    cls proc
    push ax
    push bx
    push cx
    push dx
    mov bl,0h
    mov cx,0000h
    mov dx,184fh
    mov bh,07h
    mov al,00h ;cls function
    mov ah,06h
    int 10h
    mov dx,0000h
    call gotoxy
    pop dx
    pop cx
    pop bx
    pop ax
    ret
    cls endp
    ;////////////////////////////
    operatore proc
    cmp al,'*'
    jne opr1
    jmp opr_ret
    opr1:
    cmp al,'+'
    jne opr2
    jmp opr_ret
    opr2:
    cmp al,'-'
    jne opr3
    jmp opr_ret
    opr3: cmp al,'/'
    jne opr_num
    opr_ret: mov operate,al
    call cout_char
    mov mot,1
    mov mot1,1
    opr_num:
    ret
    operatore endp
    ;////////////////////////////
    detect proc
    cmp al,'9'
    jg det_ret
    cmp al,'0'
    jl det_ret
    call cout_char
    sub al,'0'
    mov [si],al
    dec si
    inc len1
    det_ret:
    ret
    detect endp
    ;////////////////////////////
    harekat proc
    har: cmp mot1,0
    jne har_ret2
    cmp len1,9
    je har_ret2
    call getkey
    call detect
    cmp mot,0
    jne har1
    call operatore
    har1:
    cmp al,'='
    je har_ret1
    cmp al,27
    je har_ret
    jmp har
    har_ret:
    mov ah,4ch
    int 21h
    har_ret1:cmp mot,0
    je har
    har_ret2:
    ret
    harekat endp
    ;////////////////////////////////
    amaliat proc
    mov row,5
    mov col,55
    mov len1,0
    mov operate ,0
    lea si,oprand1
    add si,8
    mov mot,0
    mov mot1,0
    call harekat
    mo2:
    cmp operate,0
    jne mo1
    call getkey
    call operatore
    jmp mo2
    mo1:
    mov row,5
    mov col,27
    call cls2
    mov row,5
    mov col,55
    mov si1,9
    mov ax,word ptr len1
    sub si1,ax
    lea si,oprand2
    add si,8
    mov len1,0
    mov mot1,0
    call harekat
    cmp al,'='
    je play
    ba:
    mov ah,00h
    int 16h
    cmp al,'='
    je play
    cmp al,27
    jne ba
    mov ah,4ch
    int 21h
    play:
    mov di1,9
    mov ax,word ptr len1
    sub di1,ax
    mai2:
    cmp operate ,'-'
    jne kalc1
    kalc_a:
    call proc_sub
    call cout1
    jmp exit
    kalc1:cmp operate ,'/'
    jne kalc2
    kalc1_s:
    call proc_div
    jmp exit
    kalc2:
    cmp operate ,'*'
    jne kalc3
    call proc_zarb
    call cout1
    jmp exit
    kalc3: cmp operate ,'+'
    jne exit
    call proc_jam
    call cout1
    exit:
    ret
    amaliat endp
    ;//////////////////////////////
    cout_char proc
    mov ah,0
    push ax
    mov ch,0
    mov cl,len1
    sub col,cl
    mov dh,row
    mov dl,col
    inc dl
    call gotoxy
    c_char:
    cmp cx,0
    je c_char1
    call re_makan
    mov dl,col
    call gotoxy
    call cout
    add dl,2
    mov col,dl
    dec col
    call gotoxy
    dec cx
    jmp c_char
    c_char1:
    pop ax
    mov dh,5
    mov dl,55
    call gotoxy
    call cout
    ret
    cout_char endp
    ;/////////////////////////////
    shekl proc
    push ax
    push cx
    push dx
    mov dl,26
    mov dh,4
    mov col,dl
    mov row,dh
    call gotoxy
    mov cx,9
    lea dx,ja0
    jad: mov ah,09h
    int 21h
    add dx,32
    push dx
    inc row
    mov dh,row
    mov dl,col
    call gotoxy
    pop dx
    loop jad
    pop dx
    pop cx
    pop ax
    ret
    shekl endp
    ;////////////////////////////
    gotoxy proc
    mov ah,02h
    int 10h
    ret
    gotoxy endp
    ;////////////////////////////
    cout proc
    mov ah,0eh
    int 10h
    ret
    cout endp
    ;////////////////////////////
    getkey proc
    mov ah,07h
    int 21h
    ret
    getkey endp
    ;////////////////////////////
    re_makan proc
    mov ah,08h
    int 10h
    ret
    re_makan endp
    ;////////////////////////////
    proc_jam proc
    mov mot,0
    mov len3,0
    lea si,oprand1
    lea di,oprand2
    call norm
    mov cx,9
    jam_2: cmp si1,0
    jg jam7
    mov al,0
    jmp jams
    jam7: mov al,[si]
    jams:mov ah,0
    cmp di1,0
    jle jamd
    mov ah,[di]
    jamd:
    add ah,al
    add ah,mot
    mov mot,0
    cmp ah,10
    jl jam1
    sub ah,10
    mov mot,1
    jmp jam3
    jam1:
    mov mot,0
    jam3:
    add ah,'0'
    mov [bx],ah
    inc len3
    inc si
    inc di
    dec bx
    dec si1
    dec di1
    loop jam_2
    jam_cha:mov al,mot
    add al,'0'
    mov [bx],al
    ret
    proc_jam endp
    ;//////////////////////////////
    proc_sub proc
    mov mot,0
    mov di,si1
    cmp di,di1
    jg menha0_3
    cmp di,di1
    jl menha_1
    lea si,oprand1
    add si,8
    lea di,oprand2
    add di,8
    menha0_4:
    mov al,[di]
    cmp [si],al
    jl menha0_3
    dec si
    dec di
    loop menha0_4
    jmp menha_1
    menha0_3:
    mov al,operate
    mov sign,al
    mov di,si1
    mov si,di1
    mov si1,si
    mov di1,di
    lea si,oprand2
    lea di,oprand1
    jmp menha_2
    menha_1:
    lea si,oprand1
    lea di,oprand2
    menha_2:
    mov len3,0
    call norm
    mov cx,si1
    menha2:
    cmp di1,0
    jg menha3
    mov al,0
    jmp men1
    menha3:mov al,[di]
    men1:
    mov ah,0
    cmp si1,0
    jg menha6
    jmp menha_ret
    menha6: mov ah,[si]
    inc len3
    cmp ah,al
    jge menha1_1
    mov mot2,si
    menha3_6:mov dl,0
    inc si
    cmp [si],dl
    jne menha3_3
    mov dl,9
    mov [si],dl
    jmp menha3_6
    menha3_3:mov dl,1
    sub [si],dl
    mov si,mot2
    add ah,10
    jmp menha1_1
    menha1_1:
    sub ah,al
    add ah,'0'
    mov [bx],ah
    inc si
    inc di
    dec bx
    dec si1
    dec di1
    loop menha2
    menha_ret:
    ret
    proc_sub endp
    ;////////////////////////////
    proc_zarb proc
    lea si,oprand1
    lea di,oprand2
    call norm
    mov mot,0
    mov cl,10
    mov ax,si1
    mov mot2,ax
    mov len3,bl
    con:
    cmp di1,0
    je zarb_ret
    push bx
    push si
    mov dl,[di]
    l1:
    cmp si1,0
    je l2
    mov ch,mot
    mov cl,[bx]
    sub cl,'0'
    add ch,cl
    mov al,[si]
    mov ah,0
    mul dl
    add al,ch
    mov cl,10
    div cl
    mov mot,al
    add ah,'0'
    mov [bx],ah
    dec bx
    inc si
    dec si1
    jmp l1
    l2: mov dx,mot2
    mov si1,dx
    mov al,mot
    add al,'0'
    mov [bx],al
    mov mot,0
    mov len3,bl
    pop si
    pop bx
    dec bx
    dec di1
    inc di
    jmp con
    zarb_ret:lea ax,natigeh
    add ax,19
    mov bh,0
    mov bl,len3
    sub ax,bx
    mov len3,al
    ret
    proc_zarb endp
    ;////////////////////////////
    proc_div proc
    mov count,0
    mov al,byte ptr si1
    mov len1,al
    mov al,byte ptr di1
    mov len2,al
    lea si,oprand1
    lea di,oprand2
    call norm
    mov mot2,si
    mov mot3,di
    ;========
    tagh_al1 :
    mov ax,di1
    cmp si1,ax
    jg tagh1_1
    cmp si1,ax
    je tagh2
    tagh_ret1:
    call cout_taghsim
    jmp tagh_ret
    ;==========
    tagh2:mov cx,si1
    lea si,oprand1
    lea di,oprand2
    add si,8
    add di,8
    tagh2_1:
    mov al,[di]
    cmp [si],al
    jg tagh1
    cmp [si],al
    jl tagh_ret1
    dec si
    dec di
    loop tagh2_1
    inc count
    jmp tagh_ret1
    ;==========
    tagh1: mov di,mot3
    mov si,mot2
    tagh1_1:
    mov len3,0
    mov cx,di1
    tagh3_2:
    mov al,[di]
    cmp [si],al
    jge tagh3
    mov bx,si
    tagh3_6: mov ah,0
    inc bx
    cmp [bx],ah
    jne tagh3_3
    mov ah,9
    mov [bx],ah
    jmp tagh3_6
    tagh3_3:
    mov ah,1
    sub [bx],ah
    mov ah,10
    add [si],ah
    tagh3:
    sub [si],al
    inc si
    inc di
    loop tagh3_2
    ;==============
    lea si,oprand1
    add si,8
    tagh5_3: mov ah,0
    cmp [si],ah
    jne tagh3_4
    dec si
    mov bx,si1
    tagh5_2: mov al,[si]
    mov [si+1],al
    dec si
    dec bx
    cmp bx,0
    jne tagh5_2
    inc len3
    dec si1
    lea si,oprand1
    add si,8
    jmp tagh5_3
    ;==============
    tagh3_4:
    inc count
    mov ax,65000
    cmp count,ax
    jne d2
    mov count,0
    inc ka_ge
    d2: cmp si1,0
    jne d1
    jmp tagh_ret1
    d1: mov si,mot2
    mov di,mot3
    mov ah,0
    mov al,len3
    add si,ax
    mov len3,0
    mov mot2,si
    jmp tagh_al1
    tagh_ret:
    ret
    proc_div endp
    ;////////////////////////////
    norm proc
    mov cx,9
    add si,si1
    sub cx,si1
    mov si1,cx
    mov cx,9
    add di,di1
    sub cx,di1
    mov di1,cx
    lea bx,natigeh
    add bx,19
    ret
    norm endp
    ;////////////////////////////
    cout1 proc
    call cls2
    mov col,27
    mov row,5
    mov cl,len3
    mov ch,0
    inc cx
    mov mot,0
    mov mot1,0
    mov al,sign
    call cout_ch
    cout2:mov al,[bx]
    cmp al,'0'
    je cout_1
    mov mot,1
    cout_1:
    cmp mot,0
    jne cout4
    inc mot1
    jmp cout5
    cout4:
    call cout_ch
    cout5:
    inc bx
    loop cout2
    cout6: mov al,len3
    inc al
    cmp mot1,al
    jne cout7
    mov al,'0'
    dec col
    call cout_ch
    cout7:
    ret
    cout1 endp
    ;////////////////////////////
    cout_taghsim proc
    mov col,27
    mov row,5
    call cls2
    call start1
    mov ah,0
    mov ax,ka_ge
    lea si,oprand1
    add si,5
    call bintoascy
    lea si,oprand2
    add si,4
    mov ax,65000
    call bintoascy
    mov si1,4
    mov di1,5
    call proc_zarb
    mov si,0
    mov cx,9
    a1:mov oprand2[si],0d
    mov oprand1[si],0d
    inc si
    loop a1
    mov ax,count
    lea si,oprand2
    add si,4
    call bintoascy
    mov ch,0
    mov cl,len3
    mov si,8
    mov di,20
    sub di,cx
    di_ch:
    mov al,natigeh[di]
    sub al,'0'
    mov oprand1[si],al
    dec si
    inc di
    loop di_ch
    mov si1,9
    mov ah,0
    mov al,len3
    sub si1,ax
    mov di1,4
    call proc_jam
    call cout1
    ret
    cout_taghsim endp
    ;////////////////////////////
    cls2 proc
    mov dh,5
    mov dl,26
    c1: mov al,' '
    inc dl
    call gotoxy
    call cout
    cmp dl,55
    jne c1
    ret
    cls2 endp
    ;////////////////////////////
    start proc
    mov si1,0
    mov di1,0
    mov ka_ge,0
    mov len1,0
    mov len2,0
    mov len3,0
    mov mot3,0
    mov mot2,0
    mov mot1,0
    mov mot,0
    mov sign,0
    mov operate,0
    call start1
    mov col,27
    mov row,5
    call cls2
    ret
    start endp
    ;=================
    start1 proc
    mov si,0
    mov cx,9
    res:
    mov al,0
    mov oprand1[si],al
    mov oprand2[si],al
    inc si
    loop res
    mov si,0
    mov cx,20
    res1:
    mov al,'0'
    mov natigeh[si],al
    inc si
    loop res1
    ret
    start1 endp
    ;////////////////////////////
    bintoascy proc
    mov bx,10
    back:mov dx,0
    div bx
    mov [si],dl
    inc si
    cmp ax,0
    ja back
    ret
    bintoascy endp
    ;///////////////////////////
    cout_ch proc
    mov dl,col
    mov dh,row
    call gotoxy
    call cout
    inc col
    ret
    cout_ch endp
    ;///////////////////////////
    end calculator



    اینهم برای دانلود
    Calc.zip
    exe شو از لینک های زیر دانلود کنند
    mohammadsarbandi@yahoo.com
    mohammadsarbandi@gmail.com
    http://sarbandi.persiangig.ir/CPP/

    http://sarbandi.persiangig.ir/CPP/8-QUEENF.EXE
    http://sarbandi.persiangig.ir/CPP/EIGH_QEENF1.EXE

  19. #19

    Unhappy نقل قول: تغییرات در ماشین حساب به زبان اسمبلی

    نقل قول نوشته شده توسط sarbandi مشاهده تاپیک
    .model small
    .data
    oprand1 db 9 dup(0)
    oprand2 db 9 dup(0)
    natigeh db 20 dup('0')
    len1 db 0
    len2 db 0
    len3 db 0
    col db 0
    row db 0
    mot db 0
    mot2 dw 0
    mot3 dw 0
    ka_ge dw 0

    count dw 0
    si1 dw 0
    di1 dw 0

    sign db 0
    operate db 0
    ja0 db 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄ¿','$'
    ja1 db '³ ³','$'
    ja2 db 'ÃÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄ ÄÄÄÄÄ´','$'
    ja3 db '³ 1 ³ 2 ³ 3 ³ 4 ³ 5 ³','$'
    ja4 db 'ÃÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍ ÍÍÍÍÍ´','$'
    ja5 db '³ 7 ³ 8 ³ 9 ³ 0 ³ esc ³','$'
    ja6 db 'ÃÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍ ÍÍÍÍÍ´','$'
    ja7 db '³ + ³ - ³ * ³ / ³ = ³','$'
    ja8 db 'ÀÍÍÍÍÍÁÍÍÍÍÍÁÍÍÍÍÍÁÍÍÍÍÍ ÍÍÍÍÍÙ',0ah,0dh,'$'
    .code
    calculator proc
    ;//////////////////////////////////////////
    mov ax,@data
    mov ds,ax
    call cls
    call shekl
    calculatorp:
    call amaliat
    mov ah,00h
    int 16h
    cmp al,27
    je calc_ret

    call start
    jmp calculatorp
    calc_ret:
    mov ah,4ch
    int 21h
    calculator endp
    ;/////////////////////////////////
    cls proc
    push ax
    push bx
    push cx
    push dx
    mov bl,0h
    mov cx,0000h
    mov dx,184fh
    mov bh,07h
    mov al,00h ;cls function
    mov ah,06h
    int 10h
    mov dx,0000h
    call gotoxy
    pop dx
    pop cx
    pop bx
    pop ax
    ret
    cls endp
    ;////////////////////////////
    operatore proc
    cmp al,'*'
    jne opr1
    jmp opr_ret
    opr1:
    cmp al,'+'
    jne opr2
    jmp opr_ret
    opr2:
    cmp al,'-'
    jne opr3
    jmp opr_ret
    opr3: cmp al,'/'
    jne opr_num
    opr_ret: mov operate,al
    call cout_char
    mov mot,1
    mov mot1,1
    opr_num:
    ret
    operatore endp
    ;////////////////////////////
    detect proc
    cmp al,'9'
    jg det_ret
    cmp al,'0'
    jl det_ret
    call cout_char
    sub al,'0'
    mov [si],al
    dec si
    inc len1
    det_ret:
    ret
    detect endp
    ;////////////////////////////
    harekat proc
    har: cmp mot1,0
    jne har_ret2
    cmp len1,9
    je har_ret2
    call getkey
    call detect
    cmp mot,0
    jne har1
    call operatore
    har1:
    cmp al,'='
    je har_ret1
    cmp al,27
    je har_ret
    jmp har
    har_ret:
    mov ah,4ch
    int 21h
    har_ret1:cmp mot,0
    je har
    har_ret2:
    ret
    harekat endp
    ;////////////////////////////////
    amaliat proc
    mov row,5
    mov col,55
    mov len1,0
    mov operate ,0
    lea si,oprand1
    add si,8
    mov mot,0
    mov mot1,0
    call harekat
    mo2:
    cmp operate,0
    jne mo1
    call getkey
    call operatore
    jmp mo2
    mo1:
    mov row,5
    mov col,27
    call cls2
    mov row,5
    mov col,55
    mov si1,9
    mov ax,word ptr len1
    sub si1,ax
    lea si,oprand2
    add si,8
    mov len1,0
    mov mot1,0
    call harekat
    cmp al,'='
    je play
    ba:
    mov ah,00h
    int 16h
    cmp al,'='
    je play
    cmp al,27
    jne ba
    mov ah,4ch
    int 21h
    play:
    mov di1,9
    mov ax,word ptr len1
    sub di1,ax
    mai2:
    cmp operate ,'-'
    jne kalc1
    kalc_a:
    call proc_sub
    call cout1
    jmp exit
    kalc1:cmp operate ,'/'
    jne kalc2
    kalc1_s:
    call proc_div
    jmp exit
    kalc2:
    cmp operate ,'*'
    jne kalc3
    call proc_zarb
    call cout1
    jmp exit
    kalc3: cmp operate ,'+'
    jne exit
    call proc_jam
    call cout1
    exit:
    ret
    amaliat endp

    ;//////////////////////////////
    cout_char proc
    mov ah,0
    push ax
    mov ch,0
    mov cl,len1
    sub col,cl
    mov dh,row
    mov dl,col
    inc dl
    call gotoxy
    c_char:
    cmp cx,0
    je c_char1
    call re_makan
    mov dl,col
    call gotoxy
    call cout
    add dl,2
    mov col,dl
    dec col
    call gotoxy
    dec cx
    jmp c_char
    c_char1:
    pop ax
    mov dh,5
    mov dl,55
    call gotoxy
    call cout
    ret
    cout_char endp
    ;/////////////////////////////
    shekl proc
    push ax
    push cx
    push dx
    mov dl,26
    mov dh,4
    mov col,dl
    mov row,dh
    call gotoxy
    mov cx,9
    lea dx,ja0
    jad: mov ah,09h
    int 21h
    add dx,32
    push dx
    inc row
    mov dh,row
    mov dl,col
    call gotoxy
    pop dx
    loop jad
    pop dx
    pop cx
    pop ax
    ret
    shekl endp
    ;////////////////////////////
    gotoxy proc
    mov ah,02h
    int 10h
    ret
    gotoxy endp
    ;////////////////////////////
    cout proc
    mov ah,0eh
    int 10h
    ret
    cout endp

    ;////////////////////////////
    getkey proc
    mov ah,07h
    int 21h
    ret
    getkey endp
    ;////////////////////////////
    re_makan proc
    mov ah,08h
    int 10h
    ret
    re_makan endp
    ;////////////////////////////
    proc_jam proc
    mov mot,0
    mov len3,0
    lea si,oprand1
    lea di,oprand2
    call norm
    mov cx,9
    jam_2: cmp si1,0
    jg jam7
    mov al,0
    jmp jams
    jam7: mov al,[si]
    jams:mov ah,0
    cmp di1,0
    jle jamd
    mov ah,[di]
    jamd:
    add ah,al
    add ah,mot
    mov mot,0
    cmp ah,10
    jl jam1
    sub ah,10
    mov mot,1
    jmp jam3
    jam1:
    mov mot,0
    jam3:
    add ah,'0'
    mov [bx],ah
    inc len3
    inc si
    inc di
    dec bx
    dec si1
    dec di1
    loop jam_2
    jam_cha:mov al,mot
    add al,'0'
    mov [bx],al
    ret
    proc_jam endp
    ;//////////////////////////////
    proc_sub proc
    mov mot,0
    mov di,si1
    cmp di,di1
    jg menha0_3
    cmp di,di1
    jl menha_1
    lea si,oprand1
    add si,8
    lea di,oprand2
    add di,8
    menha0_4:
    mov al,[di]
    cmp [si],al
    jl menha0_3
    dec si
    dec di
    loop menha0_4
    jmp menha_1
    menha0_3:
    mov al,operate
    mov sign,al
    mov di,si1
    mov si,di1
    mov si1,si
    mov di1,di
    lea si,oprand2
    lea di,oprand1
    jmp menha_2
    menha_1:
    lea si,oprand1
    lea di,oprand2
    menha_2:
    mov len3,0
    call norm
    mov cx,si1
    menha2:
    cmp di1,0
    jg menha3
    mov al,0
    jmp men1
    menha3:mov al,[di]
    men1:
    mov ah,0
    cmp si1,0
    jg menha6
    jmp menha_ret
    menha6: mov ah,[si]
    inc len3
    cmp ah,al
    jge menha1_1
    mov mot2,si
    menha3_
    6:mov dl,0
    inc si
    cmp [si],dl
    jne menha3_3
    mov dl,9
    mov [si],dl
    jmp menha3_6
    menha3_3:mov dl,1
    sub [si],dl
    mov si,mot2
    add ah,10
    jmp menha1_1
    menha1_1:
    sub ah,al
    add ah,'0'
    mov [bx],ah
    inc si
    inc di
    dec bx
    dec si1
    dec di1
    loop menha2
    menha_ret:
    ret
    proc_sub endp
    ;////////////////////////////
    proc_zarb proc
    lea si,oprand1
    lea di,oprand2
    call norm
    mov mot,0
    mov cl,10
    mov ax,si1
    mov mot2,ax
    mov len3,bl
    con:
    cmp di1,0
    je zarb_ret
    push bx
    push si
    mov dl,[di]
    l1:
    cmp si1,0
    je l2
    mov ch,mot
    mov cl,[bx]
    sub cl,'0'
    add ch,cl
    mov al,[si]
    mov ah,0
    mul dl
    add al,ch
    mov cl,10
    div cl
    mov mot,al
    add ah,'0'
    mov [bx],ah
    dec bx
    inc si
    dec si1
    jmp l1
    l2: mov dx,mot2
    mov si1,dx
    mov al,mot
    add al,'0'
    mov [bx],al
    mov mot,0
    mov len3,bl
    pop si
    pop bx
    dec bx
    dec di1
    inc di
    jmp con
    zarb_ret:lea ax,natigeh
    add ax,19
    mov bh,0
    mov bl,len3
    sub ax,bx
    mov len3,al
    ret
    proc_zarb endp
    ;////////////////////////////
    proc_div proc
    mov count,0
    mov al,byte ptr si1
    mov len1,al
    mov al,byte ptr di1
    mov len2,al
    lea si,oprand1
    lea di,oprand2
    call norm
    mov mot2,si
    mov mot3,di
    ;========
    tagh_al1 :
    mov ax,di1
    cmp si1,ax
    jg tagh1_1
    cmp si1,ax
    je tagh2
    tagh_ret1:
    call cout_taghsim
    jmp tagh_ret
    ;==========
    tagh2:mov cx,si1
    lea si,oprand1
    lea di,oprand2
    add si,8
    add di,8
    tagh2_1:
    mov al,[di]
    cmp [si],al
    jg tagh1
    cmp [si],al
    jl tagh_ret1
    dec si
    dec di
    loop tagh2_1
    inc count
    jmp tagh_ret1
    ;==========
    tagh1: mov di,mot3
    mov si,mot2
    tagh1_1:
    mov len3,0
    mov cx,di1
    tagh3_2:
    mov al,[di]
    cmp [si],al
    jge tagh3
    mov bx,si
    tagh3_6: mov ah,0
    inc bx
    cmp [bx],ah
    jne tagh3_3
    mov ah,9
    mov [bx],ah
    jmp tagh3_6
    tagh3_3:
    mov ah,1
    sub [bx],ah
    mov ah,10
    add [si],ah
    tagh3:
    sub [si],al
    inc si
    inc di
    loop tagh3_2
    ;==============
    lea si,oprand1
    add si,8
    tagh5_3: mov ah,0
    cmp [si],ah
    jne tagh3_4
    dec si
    mov bx,si1
    tagh5_2: mov al,[si]
    mov [si+1],al
    dec si
    dec bx
    cmp bx,0
    jne tagh5_2
    inc len3
    dec si1
    lea si,oprand1
    add si,8
    jmp tagh5_3
    ;==============
    tagh3_4:
    inc count
    mov ax,65000
    cmp count,ax
    jne d2
    mov count,0
    inc ka_ge
    d2: cmp si1,0
    jne d1
    jmp tagh_ret1
    d1: mov si,mot2
    mov di,mot3
    mov ah,0
    mov al,len3
    add si,ax
    mov len3,0
    mov mot2,si
    jmp tagh_al1
    tagh_ret:
    ret
    proc_div endp
    ;////////////////////////////
    norm proc
    mov cx,9
    add si,si1
    sub cx,si1
    mov si1,cx
    mov cx,9
    add di,di1
    sub cx,di1
    mov di1,cx
    lea bx,natigeh
    add bx,19
    ret
    norm endp

    ;////////////////////////////
    cout1 proc
    call cls2
    mov col,27
    mov row,5
    mov cl,len3
    mov ch,0
    inc cx
    mov mot,0
    mov mot1,0
    mov al,sign
    call cout_ch
    cout2:mov al,[bx]
    cmp al,'0'
    je cout_1
    mov mot,1
    cout_1:
    cmp mot,0
    jne cout4
    inc mot1
    jmp cout5
    cout4:
    call cout_ch
    cout5:
    inc bx
    loop cout2
    cout6: mov al,len3
    inc al
    cmp mot1,al
    jne cout7
    mov al,'0'
    dec col
    call cout_ch
    cout7:
    ret
    cout1 endp
    ;////////////////////////////
    cout_taghsim proc
    mov col,27
    mov row,5
    call cls2
    call start1
    mov ah,0
    mov ax,ka_ge
    lea si,oprand1
    add si,5
    call bintoascy
    lea si,oprand2
    add si,4
    mov ax,65000
    call bintoascy
    mov si1,4
    mov di1,5
    call proc_zarb
    mov si,0
    mov cx,9
    a1:mov oprand2[si],0d
    mov oprand1[si],0d
    inc si
    loop a1
    mov ax,count
    lea si,oprand2
    add si,4
    call bintoascy
    mov ch,0
    mov cl,len3
    mov si,8
    mov di,20
    sub di,cx
    di_ch:
    mov al,natigeh[di]
    sub al,'0'
    mov oprand1[si],al
    dec si
    inc di
    loop di_ch
    mov si1,9
    mov ah,0
    mov al,len3
    sub si1,ax
    mov di1,4
    call proc_jam
    call cout1
    ret
    cout_taghsim endp
    ;////////////////////////////
    cls2 proc
    mov dh,5
    mov dl,26
    c1: mov al,' '
    inc dl
    call gotoxy
    call cout
    cmp dl,55
    jne c1
    ret
    cls2 endp
    ;////////////////////////////
    start proc
    mov si1,0
    mov di1,0
    mov ka_ge,0
    mov len1,0
    mov len2,0
    mov len3,0
    mov mot3,0
    mov mot2,0
    mov mot1,0
    mov mot,0
    mov sign,0
    mov operate,0
    call start1
    mov col,27
    mov row,5
    call cls2
    ret
    start endp
    ;=================
    start1 proc
    mov si,0
    mov cx,9
    res:
    mov al,0
    mov oprand1[si],al
    mov oprand2[si],al
    inc si
    loop res
    mov si,0
    mov cx,20
    res1:
    mov al,'0'
    mov natigeh[si],al
    inc si
    loop res1
    ret
    start1 endp
    ;////////////////////////////
    bintoascy proc
    mov bx,10
    back:mov dx,0
    div bx
    mov [si],dl
    inc si
    cmp ax,0
    ja back
    ret
    bintoascy endp
    ;///////////////////////////
    cout_ch proc
    mov dl,col
    mov dh,row
    call gotoxy
    call cout
    inc col
    ret
    cout_ch endp
    ;///////////////////////////
    end calculator



    اینهم برای دانلود
    Calc.zip
    exe شو از لینک های زیر دانلود کنند
    mohammadsarbandi@yahoo.com
    mohammadsarbandi@gmail.com
    http://sarbandi.persiangig.ir/CPP/

    http://sarbandi.persiangig.ir/CPP/8-QUEENF.EXE
    http://sarbandi.persiangig.ir/CPP/EIGH_QEENF1.EXE
    بچه ها لطف میکنید این برنامه رو برای من توضیح بدید؟(مخصوصا قسمت های قرمز)
    یه چیز دیگه من وقتی خودم یه تابع ضرب یا جمع نوشتم وقتی با cx و dx و...کار کردم حداکثر عددم تا 5 رقم میتونست باشه..اینجا چطوری تا 8 رقم رفته؟

  20. #20

    نقل قول: تغییرات در ماشین حساب به زبان اسمبلی

    یکی کمک کنه لطفا

  21. #21
    کاربر دائمی آواتار محمدامین شریفی
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران - شیراز
    پست
    1,302

    نقل قول: تغییرات در ماشین حساب به زبان اسمبلی

    بچه ها، یکی می تونه بگه معنی متغییر های mot1,ka_ge,si1 [پست 18 هست]چی میشه؟
    در ضمن .386 در 8086 کار نمیکنه؟دلیلش چیه؟

تاپیک های مشابه

  1. تغییر ارتفاع lineبا تغییر ارتفاع Textbox در گزارش
    نوشته شده توسط payam59 در بخش Access
    پاسخ: 22
    آخرین پست: یک شنبه 03 شهریور 1387, 15:41 عصر
  2. تغییر اندازه ارتفاع QRShape با تغییر ارتفاع DetailBand
    نوشته شده توسط mojtaba_z در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: پنج شنبه 07 تیر 1386, 07:49 صبح
  3. تغییر Toolbar با تغییر Thems ویندوز XP
    نوشته شده توسط na3er-faraji در بخش VB.NET
    پاسخ: 2
    آخرین پست: پنج شنبه 06 مهر 1385, 12:08 عصر
  4. غیر قابل تغییر کردن فرم about تغییر desktop تو vb
    نوشته شده توسط Payman62 در بخش برنامه نویسی در 6 VB
    پاسخ: 8
    آخرین پست: یک شنبه 31 اردیبهشت 1385, 11:12 صبح
  5. تغییر در PHPbb (تغییرات خیلی کلی)
    نوشته شده توسط nasr در بخش PHP
    پاسخ: 4
    آخرین پست: جمعه 05 فروردین 1384, 12:06 عصر

قوانین ایجاد تاپیک در تالار

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