رسم اشکال هندسی با مقادیر مورد نیاز کاربر

vahdani_d

عضو جدید
سلام من یک پروژه دارم که قراره از کاربر مقادیری رو دریافت کنیم و شکل دلخواه اون رو رسم کنیم (خط - دایره - مربع - مستطیل)
تصمیم گرفتم برای اینکه خودم هم خوب یاد بگیرم و از طرفی اگه کسی خواست به شکل کامل از این برنامه استفاده کنه و مطمئن باشه این برنامه کامله وعملی با توضیح کافی از اولین گام با کمک دوستان مخصوصا sayyad84 این پروژه رو کامل کنم اگر جایی احساس کردین میتونین کمک کنید ممنون میشم مارو یاری کنید که زودتر به جواب برسیم
 

vahdani_d

عضو جدید
سلام ببخشید دیر شد چند وقتی اینترنت نداشتم و کمی درگیر کارای شخصیم بودم اما برنامه ای که قرار شد با هم بنویسیم تو این مدته من یک کارایی کردم که ادامه رو با هم میریم من طبق کاری که میخواستیم انجام بدیم اومدم 4 حالت برای برنامه درست کردم که رسم دایره رسم خط رسم مربع و رسم مستطیل رو انجام بده بازدن کلید 1 دایره و 2 مربع و .... در زیر تا اینجای برنامه که چاپ 4 رشته و گرفتن یک عدد برای فراخوانی رسم هست رو انجام دادم ببینید این قسمت رو تا با هم ادامه بدیم با سپاس .model small .stack 128h .data stringc db "1-circle",10,13,'$' stringf db "2-foursquare",10,13,'$' stringr db "3-rectangular",10,13,'$' stringl db "4-line",10,13,'$' stringe db "PLZ select 1 or 2 or 3 or 4",10,13,'$' stringa db "R Again - Q Exit",10,13,'$' .code main proc far mov ax,@data mov ds,ax reset: call msg mov AH,7H int 21h cmp Al,49 JE circled cmp Al,50 JE foursqulard cmp Al,51 JE rectangulard cmp Al,52 JE lined mov ah,9h lea dx,stringe int 21h jmp reset circled: call circle jmp chmod foursqulard: call foursqular jmp chmod rectangulard: call rectangular jmp chmod lined: call line chmod: call modt mov ah,9h lea dx,stringa int 21h mov AH,7H int 21h cmp al,'r' JE reset mov ax,4c00h int 21h main endp msg proc mov ah,9h lea dx,stringc int 21h mov ah,9h lea dx,stringf int 21h mov ah,9h lea dx,stringr int 21h mov ah,9h lea dx,stringl int 21h ret msg endp circle proc call modg jmp reset circle endp foursqular proc call modg jmp reset foursqular endp rectangular proc call modg jmp reset rectangular endp line proc call xa mov AH,7H int 21h mov x1,al call xb mov AH,7H int 21h add x1,al call chap call modg jmp reset line endp xa proc mov ah,9h lea dx,stringx1 int 21h ret xa endp xb proc mov ah,9h lea dx,stringx2 int 21h ret xb endp ya proc mov ah,9h lea dx,stringy1 int 21h ret ya endp yb proc mov ah,9h lea dx,stringy2 int 21h ret yb endp modg proc mov ah,00h mov al,04h int 10h ret modg endp modt proc mov ah,00h mov al,03h int 10h ret modt endp chap proc mov dl,x1 mov ah,02h int 21h ret chap endp end main
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
لطفاً برنامه رو مرتب تر ارسال کنید! می تونید در صفحه ی پیشرفته از چپ چین و code استفاده کنید!
 

vahdani_d

عضو جدید
تصحیح مطلب

تصحیح مطلب

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

کد:
.model small 
.stack 128h
.data
    stringc db "1-circle",10,13,'$'
    stringf db "2-foursquare",10,13,'$'
    stringr db "3-rectangular",10,13,'$' 
    stringl db "4-line",10,13,'$'
    stringe db "PLZ select 1 or 2 or 3 or 4",10,13,'$'
تعریف اولیه برای چاپ مقدارها مثلا 1 برای دایره و 2 برای مربع و 3 برای مستطیل و 4 خط
کد:
.code
    main proc far
        mov ax,@data
        mov ds,ax
       reset:
            call msg

            mov AH,7H
            int 21h
            
                    
            cmp Al,49
            JE circled
            
            cmp Al,50
            JE foursqulard
            
            cmp Al,51
            JE rectangulard 
          
            cmp Al,52 
            JE lined
            
            mov ah,9h
            lea dx,stringe
            int 21h
            jmp reset
گرفتن مقدار از کاربر و تشخیص اینکه عدد وارد شده چیست و درصورتی که برابر مقدار مورد نظر است به قسمتی که زیر برنامه برای رسم شکل مورد نظر است انتقال میابد
کد:
     circled:
          ;  call  circle  
           ;  jmp chmod
  foursqulard:
      ;    call  foursqular
        ;     jmp chmod
 rectangulard:
       ;    call  rectangular
       ;      jmp chmod  
        lined:
           call line
        chmod:
            call modt
            mov ah,9h
            lea dx,stringa
            int 21h

            mov AH,7H
            int 21h
            cmp al,'r'               
            JE reset

        mov ax,4c00h
        int 21h
    main endp
زیر برنامه های مورد نظر فرا خوانی میشود و اگر کار بر کارش با زیر برنامه ها تمام شد یک پیغام برای ادامه و یا خروج به او نمایش داده میشودکه با زدن آر ادامه و با کیو خروج انجام میشود البته در فراخانی ها در هر قسمت به مود گرافیکی میرویم و اینجا چون باید دوباره به مود متنی برگردیم از کد متنی استفاده کرده ام
کد:
    msg proc
                
        mov ah,9h
        lea dx,stringc
        int 21h

        mov ah,9h
        lea dx,stringf
        int 21h
        
        mov ah,9h
        lea dx,stringr
        int 21h  
        
        mov ah,9h
        lea dx,stringl
        int 21h
        
        ret
    msg endp

زیر برنامه برای چاپ مقدارهای 1 تا 4 که اول برنامه فراخوانی میشود

کد:
;    circle proc 
    
   call modg    
            
            
    
            
    jmp reset
    circle endp
   foursqular proc
    call modg    

     jmp reset
   foursqular endp
  rectangular proc
  call modg                
             
        jmp reset     
    rectangular endp  
    line proc 

      jmp reset 

line endp
درقسمت بالا زیر برنامه باید به شکلی نوشته شود که کاربر عدد را وارد کند و دایره یا اشکال مورد نظر به شکل دلخواه رسم شوند لطفا از اینجا به بعد رو کمک کنید که من گیر کردم و نمیدونم چکار باید کنم
تا جایی که پرسیدم باید بیایم یک رشته از کاربر دریافت کنید (عدد را به صورت رشته) سپس رشته را به عدد تبدیل کنیم و از اعداد در زیر برنامه استفاده کنیم لطفا راهنمایی کنید برنامه کامل رو در لینک زیر قرار دادم که ادامشو راهنمایی کنید با هم انجام بدیم با تشکر
کد:
.model small 
.stack 128h
.data     

    stringc db "1-circle",10,13,'$'
    stringf db "2-foursquare",10,13,'$'
    stringr db "3-rectangular",10,13,'$' 
    stringl db "4-line",10,13,'$'
    stringe db "PLZ select 1 or 2 or 3 or 4",10,13,'$'
    stringa db "R Again - Q Exit",10,13,'$'    
    
    
    stringx1 db "plz inter x1:",10,13,'$' 
    stringx2 db "plz inter x2:",10,13,'$'
    stringy1 db "plz inter y1:",10,13,'$'
    stringy2 db "plz inter y2:",10,13,'$' 
   
    
.code
    main proc far
        mov ax,@data
        mov ds,ax
       reset:
            call msg

            mov AH,7H
            int 21h
            
                    
            cmp Al,49
            JE circled
            
            cmp Al,50
            JE foursqulard
            
            cmp Al,51
            JE rectangulard 
          
            cmp Al,52 
            JE lined
            
            mov ah,9h
            lea dx,stringe
            int 21h
            jmp reset


      circled:
          ;  call  circle  
           ;  jmp chmod
  foursqulard:
      ;    call  foursqular
        ;     jmp chmod
 rectangulard:
       ;    call  rectangular
       ;      jmp chmod  
        lined:
           call line
        chmod:
            call modt
            mov ah,9h
            lea dx,stringa
            int 21h

            mov AH,7H
            int 21h
            cmp al,'r'               
            JE reset

        mov ax,4c00h
        int 21h
    main endp

    msg proc
                
        mov ah,9h
        lea dx,stringc
        int 21h

        mov ah,9h
        lea dx,stringf
        int 21h
        
        mov ah,9h
        lea dx,stringr
        int 21h  
        
        mov ah,9h
        lea dx,stringl
        int 21h
        
        ret
    msg endp
;    circle proc 
    
;    call modg    
            
            
    
            
    jmp reset
;    circle endp
;    foursqular proc
;    call modg    
;                
     jmp reset
;    foursqular endp
;    rectangular proc
;    call modg                
             
        jmp reset     
    rectangular endp  
    line proc
     call modg    ;mode gerafiki
     
            jmp reset
   line endp 
     
    modg proc 
        mov ah,00h
        mov al,04h
        int 10h
        ret
    modg endp
    modt proc
        mov ah,00h
        mov al,03h
        int 10h
        ret
    modt endp
    chap proc
         mov dl,x1
         mov ah,02h
         int 21h    
         ret
    chap endp 
           ;zir barname tabe tabdile adad be reshte
end main
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
ممنون از توجه تون!
الان مشکل فقط تو اضافه کردن زیربرنامه های رسم اشکاله!؟ اگه این طوره این زیربرنامه ها رو می تونید از تاپیک "برنامه های نوشته شده" پیدا کنید و با کمی تغییرات نسبت به برنامه ی خودتون ازشون استفاده کنید!
مثلاً طریقه ی ارسال موارد مورد نیاز: اگه از Push استفاده نمی کنید باید به طور مناسب تغییر بدید! البته برای جلوگیری از ایجاد مشکل بهتره قبل از ورود به زیربرنامه ها ثبات های مورد استفاده رو Push کنید. همین طور ارسال مقادیر هم از طریق Push باشه!
 

vahdani_d

عضو جدید
مرسی از راهنماییتون من زیر برنامه های رسم دایره مربع و ... رو از سایت گرفتم اما اجرا نمیشن و ارور دارن میخوام اگه بشه همینجا برنامه رو کامل کنیم الان توی تبدیل رشته به عدد گیر کردم میتونید کمک کنید ؟
من یک رشته رو دریافت میکنم اما نمیتونم رشته رو به عدد تبدیل کنم وقتی میخوام به 10 تقسیم کنم ارور میده که فکرکنم اوور فلو شده این متن اروره :
divide error - overflow.
to manually process this error,
change address of INT 0 in interrupt vector table.
قسمتی که ستاره گذاشتم **** ارور داره مقدار بیس رو توی دیتا سگمنت 10 دادم
کد:
 mov si,10
    l1:
    mov bx,dx
    mov ax,[bx] 
****    idiv base
    add ah,28
    mov [si],ah
    dec si
    mov dh,0
    mov dl,al
    mov [bx],dx
    cmp [bx],0
    jg l1
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
مرسی از راهنماییتون من زیر برنامه های رسم دایره مربع و ... رو از سایت گرفتم اما اجرا نمیشن و ارور دارن میخوام اگه بشه همینجا برنامه رو کامل کنیم الان توی تبدیل رشته به عدد گیر کردم میتونید کمک کنید ؟
من یک رشته رو دریافت میکنم اما نمیتونم رشته رو به عدد تبدیل کنم وقتی میخوام به 10 تقسیم کنم ارور میده که فکرکنم اوور فلو شده این متن اروره :
divide error - overflow.
to manually process this error,
change address of INT 0 in interrupt vector table.
قسمتی که ستاره گذاشتم **** ارور داره مقدار بیس رو توی دیتا سگمنت 10 دادم
کد:
 mov si,10
    l1:
    mov bx,dx
    mov ax,[bx] 
****    idiv base
    add ah,28
    mov [si],ah
    dec si
    mov dh,0
    mov dl,al
    mov [bx],dx
    cmp [bx],0
    jg l1
با سلام،
توجه داشته باشید که معمولاً علت خطا جای دیگه ایه و جایی که مشخص می شه نتیجه ی اون خطاست! برنامه های تبدیل رو هم می تونید از برنامه های اون تالار بردارید! مثلاً برنامه ی فیبوناچی هر دو تبدیل رو داره!
 

vahdani_d

عضو جدید
مرسی از راهنماییتون ی سوال دارم اگه بخوام از ورودی یک مقدار رو بگیرم و داخل ثبات cx بریزم به چه شکل میتونم این کار رو انجام بدم با چه دستوری ؟
برنامه های رسم دایره رو میشه ی نگاه بندازید فکر کنم کار نمیکنند و مشکل دارن لطفا راهنمایی کنید که قالب اصلی رو به چه شکل باید نوشت ؟(برای رسم دایره)
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
مرسی از راهنماییتون ی سوال دارم اگه بخوام از ورودی یک مقدار رو بگیرم و داخل ثبات cx بریزم به چه شکل میتونم این کار رو انجام بدم با چه دستوری ؟
برنامه های رسم دایره رو میشه ی نگاه بندازید فکر کنم کار نمیکنند و مشکل دارن لطفا راهنمایی کنید که قالب اصلی رو به چه شکل باید نوشت ؟(برای رسم دایره)
از ورودی فقط می شه رشته خوند! رشته رو باید به عدد تبدیل کنید و تو CX بریزید!
در مورد دایره هم دو تا برنامه س! یکیش زیربرنامه ی رسمه که به تنهایی کار نمی کنه و چون دوستان نمی تونستن ازش استفاده کنن، یه برنامه ساده براش نوشتم که همون جا هست! فکر کنم بالای برنامه هم نوشتم که هر چی که ارسال می شه به زیربرنامه بره چیه!
ضمناً برنامه رو باید تو XP اجرا کنید!
 

vahdani_d

عضو جدید
از ورودی فقط می شه رشته خوند! رشته رو باید به عدد تبدیل کنید و تو CX بریزید!
در مورد دایره هم دو تا برنامه س! یکیش زیربرنامه ی رسمه که به تنهایی کار نمی کنه و چون دوستان نمی تونستن ازش استفاده کنن، یه برنامه ساده براش نوشتم که همون جا هست! فکر کنم بالای برنامه هم نوشتم که هر چی که ارسال می شه به زیربرنامه بره چیه!
ضمناً برنامه رو باید تو XP اجرا کنید!
مرسی واقعا کمکهاتون عالیه مرسی که اینقدر فعالید و تا تاپیک یا سوالی پرسیده میشه راهنماییتون زود تر میاد سپاسگذارم
دارم روی تبدیل رشته به عدد کار میکنم برنامه کمکی که گفتین (فیبو) رو هم گرفتم تا این قسمت رو آماده کنم و بتونم به ثباتم عدد دلخواه بدم
با این کار فکر میکنم خیلی از مشکلات و راه رو رفتم و فقط رسم دایره میمونه که حتما باز مزاحمتون میشم توضیحات الانتون رو خوندم اما چون تمرکزم روی تبدیل عدده چیزی متوجه نشدم باید اینو کامل کنم بعد برگردم ببینم چرا دایره رو متوجه نمیشم و مشکلم کجاست
البته اصرار دارم که خودم بتونم بنویسمش باز هم ممنون از شما
 

Similar threads

بالا