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

نام تاپیک: منطق درست اجرای نادرست کد زیر

  1. #1

    منطق درست اجرای نادرست کد زیر

    کد زیر می بایست با فشردن کلید alt
    5واحد به عدد b اضافه کند و در صورتی که کلید فشرده شده ctrl باشد 10 واحد از عدد کم کند و هر بار عدد را نمایش دهد ، اما خروجی تغییرات درستی ندارد.
    برای نمایش عدد b (حداکثر سه رقمی)آنرا با تقسیمهای متوالی بر 10 به ارقام تشکیل دهنده تبدیل و آنها را پشت سر هم نمایش دادیم.
                                    ;

    stack segment stack ; define stack
    dw 200h dup(?)
    stack ends

    data segment ; define var

    sec1 db ?
    sec5 db ?
    sec10 db ?

    cout db ?

    B db 50
    b0 db ?
    b1 db ?
    b2 db ?
    temp db ?




    data ends

    code segment
    assume cs:code , ds:data , ss:stack

    start:
    mov ax,seg data
    mov ds,ax



    L1: mov BL,10 ;divide number to digits ( b= b2b1b0 )
    mov ah,0
    mov al,b
    div BL
    mov b0,ah
    mov ah,0
    div BL
    mov b1,ah
    mov ah,0
    div BL
    mov b2,ah

    mov ah,02h ;Set cursor position
    mov dh,12
    mov dl,39
    int 10h

    mov ah,02 ;Display output
    add b2,48
    mov dl,b2
    int 21h
    add b1,48
    mov dl,b1
    int 21h
    add b0,48
    mov dl,b0
    int 21h

    L2: mov al,0
    mov ah,12h ;Get enhanced shift flags
    int 16h
    mov temp,al

    and al,8h ;If press alt +5
    cmp al,8h
    jnz h2
    add b,5
    jmp L1

    h2: mov al,temp ;If press ctrl -10
    and al,4h
    cmp al,4h
    jnz L2
    sub b,10
    jmp L1





    mov al,0
    mov ah,4ch
    int 21h
    code ends
    end start
    end start

  2. #2

    نقل قول: منطق درست اجرای نادرست کد زیر

    ظاهرا درسته اما فعلا وقت بررسي كد رو ندارم انشا الله كه عجله نداريد
    روي emu8086 مشكل چاپ نداشت، اما چون وقفه 12 كيبورد رو نميشناخت با tasm تست كردم هم در خروجي و هم در جمع اشتباه ميشه

    خودت با چي تست كردي؟
    يك ايراد هاي كوچولو هم داره
    مثل:
    mov ax,seg data
    و صفر پشت عدد هم يك شرط بزار كه چاپ نشه! كلا خوب ننوشتي ميشه كوتاهش كرد
    اون متغيير ها و پشته اي كه استفاده نشده براي چيه؟ اگه شد سورس كاملم بزار

  3. #3

    نقل قول: منطق درست اجرای نادرست کد زیر

    نقل قول نوشته شده توسط xman_1365_x مشاهده تاپیک
    ظاهرا درسته اما فعلا وقت بررسي كد رو ندارم انشا الله كه عجله نداريد
    روي emu8086 مشكل چاپ نداشت، اما چون وقفه 12 كيبورد رو نميشناخت با tasm تست كردم هم در خروجي و هم در جمع اشتباه ميشه

    خودت با چي تست كردي؟
    يك ايراد هاي كوچولو هم داره
    مثل:
    mov ax,seg data
    و صفر پشت عدد هم يك شرط بزار كه چاپ نشه! كلا خوب ننوشتي ميشه كوتاهش كرد
    اون متغيير ها و پشته اي كه استفاده نشده براي چيه؟ اگه شد سورس كاملم بزار
    بازم ممنون که وقت گذاشتید.

    با masm کامپایل کردم.
    کلا ایرادهاش چیه؟
    اون متغیرها و پشته از اول توی فایل تستی که استادمون در اختیارمون گذاشت تا شکل کلی سگمنتها را بدانیم بود و من فقط کدی رو که لازم داشتم اضافه کردم.

  4. #4

    نقل قول: منطق درست اجرای نادرست کد زیر

    الان برنامه رو اجرا كردم در masm
    تا جاي چاپ درست اما بعدش مشكل داره
    Test01.zip
    مشكلشم بايد همون منطقت باشه اگرنه درست ميشد
    براي حل مشكل كنترل و آلت يعني اين قسمت رو دوباره فكر كن روش

    L2: mov al,0
    mov ah,12h ;Get enhanced shift flags
    int 16h
    mov temp,al

    and al,8h ;If press alt +5
    cmp al,8h
    jnz h2
    add b,5
    jmp L1

    h2: mov al,temp ;If press ctrl -10
    and al,4h
    cmp al,4h
    jnz L2
    sub b,10
    jmp L1

    و يك چيزم يادت نره توي نمايش مثلا 50 دادي در خروجي 050 نشون ميده
    هنوز منطق برنامت كامل نيست كه بعد از فشردن كليد هاي كنترلي جمع و تفريق هاي عجيب ميشه
    اگر بازم نتونستي بگو!
    موفق باشي

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

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