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

نام تاپیک: گرفتن عدد از ورودی

  1. #1

    گرفتن عدد از ورودی

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

  2. #2
    اعداد رو تو اسمبلی به سادگی نمیتونید دریافت کنید.
    باید کاراکتر به کاراکتر بگیریشون و تبدیلشون کنی به عدد
    شروع کن هر جا با مشکل برخورد کردی بپرس
    You never know what you can do until you try

  3. #3
    اگه اعداد زیاد بود باید از آرایه ها استفاده کرد؟من می خوام یه ماتریسو از ورودی بخونم و روش محاسبات ریاضی انجام بدم.می تونید یه روش خوب بهم معرفی کنید؟

  4. #4
    کاربر جدید
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    tehran
    پست
    17
    با سرویس 0ah از وقفه ی شماره 21h یک رشته اطلاعات از صفحه کلید خوانده میشود و در محلی در سگمنت داده که خودت به طور معین در سگمنت داده از قبل تعریف کردی ذخیره میشود.البته این سرویس کاراکتر هایی که از صفحه کلید خوانده میشوند را روی مانیتور میفرستد.برای استفاده 1_ توی سگمنت داده با شبه دستور lable حافظه ی مورد نیاز رو تعریف کن.(به همون شیوه ای که خودت بهتر بلدی!) 2_حداکثر تعداد حروف رو بعد از دستور لیبل قرار بده و حتما هم براش اسم انتخاب کن.3_مکان دیگری در سگمنت داده در نظر بگیر برای اینکه سیستم عامل تعداد واقعی حروف را برات اونجا قرار بده.(بایت بعدی.)سومین بایت به بعد سگمنت داده همان رشته ی مورد نظر قرار میگیرد.پس براش حافظه ی لازم رو در نظر بگیر و با space پرش کن. این سرویس برای پایان دادن به ورود اطلاعات دگمه ی enter رو میشناسه.
    حالا به جایی رسیدی که رشته رو گرفتی!.با کد اسکی هایی که در اختیار داری هر عملی که دلت خواست روش انجام بده.
    یادت باشه که توی اسمبلی تمام سرویس های ورودی کد اسکی میگیرند.

  5. #5
    این سوالت به ظاهر ساده است ولی در اسمبلی پیچیدگیهای خاص خودشو داره باید به چند نکته دقت کنی:
    1-میخواهی عددهات بصورت BCD ذخیره شوند یا Binary یا ...
    2-چند رقمی بودن اعداد
    3-با توجه به 1و2 میتوانی بفهمی که هر عدد حداکثر چند بایتی است پس باید متغیری متناسب با آن تعریف کنی
    4-عددها رو یک رقم یک رقم بگیری 30H تا ازش کم کنی و با توجه به نوع عدد(BCDیاBinary) آنها با الگوریتمی به متغیر اضافه کنی

  6. #6
    سلام
    حالتون خوبه
    این سورس همون کاری رو میکنه که شما میخواهید
    میتونید خودتون برید و تحلیل کنید و به هدفتون برسید

    این سورس کارش جمع کردن یا بسته به نیاز با تغییر کوچکی تفریق دو تا عدد 5 رقمی
    page 60,70
    title sub / sum
    stsg segment stack 'stack'
    db 200 dup(?)
    stsg ends
    dtsg segment 'data'
    x db 6 dup(0)
    y db 6 dup(0)
    z db 6 dup(0)
    dtsg ends
    cdsg segment 'code'
    assume ss:stsg,ds:dtsg,cs:cdsg
    main proc near
    mov ax,dtsg
    mov ds,ax
    ;///////////////////
    mov ah,6h
    mov al,2
    mov ch,0
    mov cl,0
    mov dh,25
    mov dl,79
    mov bh,60
    int 10h
    ;******************
    mov ah,15h
    mov al,25
    mov ch,6
    mov cl,30
    mov dh,12
    mov dl,60
    mov bh,10
    int 10h
    ;*****************
    adding proc near
    mov cx,5
    lea bx,x+1
    for1:
    mov ah,01H
    int 21H
    add al,48
    mov [bx],al
    inc bx
    loop for1
    mov cx,5
    lea bx,y+1
    mov ah,02H
    mov dl,'+'
    int 21H

    for2:
    mov ah,01H
    int 21H
    add al,48
    mov [bx],al
    inc bx
    loop for2

    ;-------------------
    lea si,x+5 ;
    lea di,y+5
    lea bx,z+5
    mov cx,6

    for4:
    mov al,[si]
    sub al,[di]

    cmp al,9
    js nextt

    sub al,10
    mov dl,1
    sub [si-1],dl
    nextt:

    mov [bx],al
    dec si
    dec di
    dec bx
    loop for4
    ;-------------------

    mov cx,6
    lea bx,z
    mov ah,02H
    mov dl,'='
    int 21H
    for3:
    mov dx,48
    add [bx],dx
    mov dl,[bx]
    mov ah,02H
    int 21H
    inc bx

    loop for3
    adding endp
    ;******************************
    subing proc near
    mov cx,5
    lea bx,x+1
    for11:
    mov ah,01H
    int 21H
    sub al,48
    mov [bx],al
    inc bx
    loop for11
    mov cx,5
    lea bx,y+1
    mov ah,02H
    mov dl,'-'
    int 21H

    for22:
    mov ah,01H
    int 21H
    sub al,48
    mov [bx],al
    inc bx
    loop for22

    ;-------------------
    lea si,x+5 ;
    lea di,y+5
    lea bx,z+5
    mov cx,6

    for44:
    mov al,[si]
    sub al,[di]

    cmp al,9
    js next2

    sub al,10
    mov dl,1
    sub [si-1],dl
    next2:

    mov [bx],al
    dec si
    dec di
    dec bx
    loop for44
    ;-------------------

    mov cx,6
    lea bx,z
    mov ah,02H
    mov dl,'='
    int 21H
    for33:
    mov dx,48
    add [bx],dx
    mov dl,[bx]
    mov ah,02H
    int 21H
    inc bx

    loop for33
    subing endp
    reset:
    mov ah,01h
    int 21h
    cmp al,'a'
    jne next3
    call adding
    jmp exit
    next3: cmp al,'s'
    jne reset
    call subing
    ;\\\\\\\\\\\\\\\\\\\
    exit:
    mov ax,4c00h
    int 21h
    main endp
    cdsg ends
    end main

  7. #7
    ببخشید من معذرت میخوام اشتباه کپی کردم
    page 60,70
    title sub / sum
    stsg segment stack 'stack'
    db 200 dup(?)
    stsg ends
    dtsg segment 'data'
    x db 6 dup(0)
    y db 6 dup(0)
    z db 6 dup(0)
    dtsg ends
    cdsg segment 'code'
    assume ss:stsg,ds:dtsg,cs:cdsg
    main proc near
    mov ax,dtsg
    mov ds,ax
    ;///////////////////
    mov ah,6h
    mov al,2
    mov ch,0
    mov cl,0
    mov dh,25
    mov dl,79
    mov bh,60
    int 10h
    ;******************
    mov ah,15h
    mov al,25
    mov ch,6
    mov cl,30
    mov dh,12
    mov dl,60
    mov bh,10
    int 10h
    ;*****************
    adding proc near
    mov cx,5
    lea bx,x+1
    for1:
    mov ah,01H
    int 21H
    add al,48
    mov [bx],al
    inc bx
    loop for1
    mov cx,5
    lea bx,y+1
    mov ah,02H
    mov dl,'+'
    int 21H

    for2:
    mov ah,01H
    int 21H
    add al,48
    mov [bx],al
    inc bx
    loop for2

    ;-------------------
    lea si,x+5 ;
    lea di,y+5
    lea bx,z+5
    mov cx,6

    for4:
    mov al,[si]
    sub al,[di]

    cmp al,9
    js nextt

    sub al,10
    mov dl,1
    sub [si-1],dl
    nextt:

    mov [bx],al
    dec si
    dec di
    dec bx
    loop for4
    ;-------------------

    mov cx,6
    lea bx,z
    mov ah,02H
    mov dl,'='
    int 21H
    for3:
    mov dx,48
    add [bx],dx
    mov dl,[bx]
    mov ah,02H
    int 21H
    inc bx

    loop for3
    adding endp
    ;******************************
    subing proc near
    mov cx,5
    lea bx,x+1
    for11:
    mov ah,01H
    int 21H
    sub al,48
    mov [bx],al
    inc bx
    loop for11
    mov cx,5
    lea bx,y+1
    mov ah,02H
    mov dl,'-'
    int 21H

    for22:
    mov ah,01H
    int 21H
    sub al,48
    mov [bx],al
    inc bx
    loop for22

    ;-------------------
    lea si,x+5 ;
    lea di,y+5
    lea bx,z+5
    mov cx,6

    for44:
    mov al,[si]
    sub al,[di]

    cmp al,9
    js next2

    sub al,10
    mov dl,1
    sub [si-1],dl
    next2:

    mov [bx],al
    dec si
    dec di
    dec bx
    loop for44
    ;-------------------

    mov cx,6
    lea bx,z
    mov ah,02H
    mov dl,'='
    int 21H
    for33:
    mov dx,48
    add [bx],dx
    mov dl,[bx]
    mov ah,02H
    int 21H
    inc bx

    loop for33
    subing endp
    reset:
    mov ah,01h
    int 21h
    cmp al,'a'
    jne next3
    call adding
    jmp exit
    next3: cmp al,'s'
    jne reset
    call subing
    ;\\\\\\\\\\\\\\\\\\\
    exit:
    mov ax,4c00h
    int 21h
    main endp
    cdsg ends
    end main

  8. #8
    با تشکر از راهنمایتون،اما یه اشالی وجود داره این برنامه هر چی میزتم جواب جمعو صفر میاره
    میشه یه سادهترشو بگید مثلا دو عدد یه رقمی یا دو رقمی بگیره؟

  9. #9
    سلام
    یک راه ساده تر در اسمبلی هر چی که دریافت کنید به عنوان رشته دریافت می شودوشما بایدان رو تبدیل به عدد بکنید.
    دریافت یک کارکتر
    mov ah,01h
    int 21h
    دریافت مجموعه ای از کاراکتر ها یا یک رشته
    mov ah,0ah
    int 21h
    اگرکارکتر دریافتی رو از30hکم کنی کارکتر تبدیل به عدد می گردد.بعد می توانی عملیات محاسباتی روی ان انجام بدهی.البته جواب بدست امده از عملیات باید با 30hجمع شوداگر هم رشته دریافت کردی این کار را برای هر کارکتر انجام بده وذخیره کن(در حافظه ای مثل buffer)بعد از تبدیل به عدد عملیات ریاضی مورد نظرت را روی ان اجرا کن بع دانه دانه با 30hجمع کن وذخیره کن.امیدوارم مفید باشه

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

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