کار با موس در حالت گرافیک و حرکت آن در صفحه

طایم

عضو جدید
سلام وقتتون خوش دوستان
میخواستم بدونم چطوری میشه با موس در حالت گرافیک کار کرد و موس رو توی صفحه حرکت داد و پیکسلهای رنگی رو که انتخاب میکنیم چطوری با کلیدهای موس توی صفحه بکشیم .
با تشکر
طایم
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
در مورد کار با موس می تونید برنامه هایی رو تو تاپیک "برنامه های نوشته شده" پیدا کنید! بخش دوم سؤال تون هم نامفهومه!
 

طایم

عضو جدید
سلام وقتتون خوش
ممنون از پاسخی که دادید . یک سوال دیگه داشتم میخواستم بدونم اگه بخوایم با موس در حالت گرافیک مثل صفحه POINT که مربع و خط و دایره از گوشه صفحه انتخاب میکنیم وداخل صفحه میاریم وبه اندازه ای که دوست داشتیم رسم می کنیم , بکشیم باید چکار کنیم . چه وقفه هایی لازم هست .
باتشکر
طایم
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
برای این کار باید در هر لحظه موقعیت موس رو بررسی کنید و در صورت فشردن کلیک موردنظر از موس محل موس رو تشخیص بدید و Object انتخاب شده رو تعیین کنید. (این که چی بکشه!)
حالا مجدداً این کار رو باید انجام بدید تا محل رسم شی مشخص بشه و بعد شی رو در محل تعیین شده با موس رسم کنید. ساده ترین کار، رسم شکل از محل تعیین شده س و نباید انتظار داشته باشید که مثل نرم افزارهای موجود با حرکت موس می تونید شکل رو بکشید!
البته می تونید از خاصیت گرفتن و رها کردن دکمه ی موس استفاده کنید و فاصله ی بین گرفتن و رها کردن رو حساب کنید تا اندازه ی شکل بدست بیاد که کامل نیست!
در مورد موس از وقفه ی 33h و در محیط گرافیکی از 10h استفاده کنید!
 

طایم

عضو جدید
print macro string
mov ah,09h
lea dx,string
int 21h
endm
gotoxy macro x,y
mov ah,02h
mov dl,x
mov dh,y
mov bh,0
int 10h
endm

data segment
; add your data here!
color db ?
x dw ?
y dw ?
i db 1

xl dw ?
xr dw ?
yl dw ?
yr dw ?

xnum db ?
ynum db ?


strxy db "XY :",'$'
cselect db "color_select>>",'$'

allow db ?

xline db ' $'
yline db ' $'

;xline label byte
; maxx dw 3
; lenx dw ?
; bufferx dw 3 dup('$')
;
;
; yline label byte
; maxy dw 3
; leny dw ?
; buffery dw 3 dup('$')
ends
stack segment
dw 128 dup(0)
ends
code segment
start proc far
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here

call Grafic
mov cx,4
mov dx,24
mov color,1
mov x,15
mov y,30

;============== Palet color ===========

l2:

l1:
call setpixel
inc cx
cmp cx,x
jne l1
mov cx,4
inc dx
cmp dx,y
jne l2

mov cx,4

add dx,3
add y,8

inc color
cmp color,16
jne l2
;================ draw borders=========

mov cx,3
mov dx,23
mov color,14
mov x,16
sub y,8
mov bx,0
mov bl,17


lc1:
lc2:
call setpixel
inc cx
cmp cx,x
jne lc2

mov cx,4
add dx,8
inc i

cmp bl,i
jne lc1
mov cx,3
mov dx,23

ld2:
inc dx
call setpixel
cmp dx,y
jne ld2

mov cx,16
mov dx,23

le2:
inc dx
call setpixel
cmp dx,y
jne le2



;================ MOUSE ==================



call Show_mouse
call new


gotoxy 12,20
print strxy

gotoxy 12,21
print cselect



loop1:


mov ax,dx
call converty

mov ax,cx
call convertx

call Check_mouse


cmp bx,1
je set

cmp bx,2
je read

cmp bx,3
je clr

cmp bx,4
je end

jmp loop1
read:
call readpixel
mov color,al
call color_select
jmp loop1




set:
;shr cx,1
call location
cmp allow,0
je put
jmp loop1
put:
;shr cx,1
call setpixel
jmp loop1

clr:

call new
jmp loop1


end:
ret
ends
endp ; set entry point and stop the assembler.

;==============================================
; Procedure
;==============================================

Grafic proc
mov ah, 0
mov al, 13h
int 10h

ret
endp

;---------------------------------


setpixel proc

mov al,color
mov ah,0ch
int 10h

ret

endp

;---------------------------------

Show_mouse proc

mov ax, 1
int 33h

ret
endp

;---------------------------------


Check_mouse proc
mov ax, 3
int 33h

ret
endp

;---------------------------------


readpixel proc

shr cx,1
add cx,2
mov ah,0dh
mov bh,0
int 10h

ret
endp

;---------------------------------



location proc

mov xl,100
mov xr,250
mov yl,50
mov yr,150
mov allow,0


cmp cx,xl
jb locate

cmp cx,xr
jg locate

cmp dx,yl
jb locate

cmp dx,yr
jg locate

jmp return



locate:
mov allow,1


return:
ret
endp

;---------------------------------


new proc





;.............. background ...............

mov color,15
mov cx,100
mov dx,50
mov x,251
mov y,151


lp2:

lp1:
call setpixel
inc cx
cmp cx,x
jne lp1
mov cx,100
inc dx
cmp dx,y
jne lp2


;............... BORDER ...................

mov cx,99
mov dx,49
mov x,251
mov y,151

mov color,1
l11:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l11

mov cx,99
mov dx,151
l12:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l12

mov cx,99
mov dx,49
mov y,151

l13:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l13

mov cx,251
mov dx,49
mov y,151

l14:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l14






ret

endp

convertx proc
mov xline[0],' '
mov xline[1],' '
mov xline[2],' '
mov xline[3],'$'

lea si,xline
add si,2
mov bx,10
for:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for

gotoxy 16,20
print xline


;=========
mov ah,02h
mov dl,','
int 21h ;print kama
;====================



ret

endp
converty proc

mov yline[0],' '
mov yline[1],' '
mov yline[2],' '
mov yline[3],'$'

lea si,yline
add si,2
mov bx,10
for2:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for2

gotoxy 20,20
print yline

ret

endp
color_select proc
mov cx,550
mov dx,167
mov x,560
mov y,175
lc:
call setpixel
inc cx
cmp cx,x
jne lc
mov cx,550
inc dx
cmp dx,y
jne lc

ret

endp
;...........................................................
سلام وقتتون خوش
این برنامه ای هست که تا اینجا روش کار کردم مثل محیط point راستش سعی کردم ولی نتونستم قسمت مربع و خط شو پیاده سازی کنم میشه شما کداشو برام بزارید .
باتشکر
طایم
 

طایم

عضو جدید
print macro string
mov ah,09h
lea dx,string
int 21h
endm
gotoxy macro x,y
mov ah,02h
mov dl,x
mov dh,y
mov bh,0
int 10h
endm

data segment
; add your data here!
color db ?
x dw ?
y dw ?
i db 1

xl dw ?
xr dw ?
yl dw ?
yr dw ?

xnum db ?
ynum db ?


strxy db "XY :",'$'
cselect db "color_select>>",'$'

allow db ?

xline db ' $'
yline db ' $'

;xline label byte
; maxx dw 3
; lenx dw ?
; bufferx dw 3 dup('$')
;
;
; yline label byte
; maxy dw 3
; leny dw ?
; buffery dw 3 dup('$')
ends
stack segment
dw 128 dup(0)
ends
code segment
start proc far
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here

call Grafic
mov cx,4
mov dx,24
mov color,1
mov x,15
mov y,30

;============== Palet color ===========

l2:

l1:
call setpixel
inc cx
cmp cx,x
jne l1
mov cx,4
inc dx
cmp dx,y
jne l2

mov cx,4

add dx,3
add y,8

inc color
cmp color,16
jne l2
;================ draw borders=========

mov cx,3
mov dx,23
mov color,14
mov x,16
sub y,8
mov bx,0
mov bl,17


lc1:
lc2:
call setpixel
inc cx
cmp cx,x
jne lc2

mov cx,4
add dx,8
inc i

cmp bl,i
jne lc1
mov cx,3
mov dx,23

ld2:
inc dx
call setpixel
cmp dx,y
jne ld2

mov cx,16
mov dx,23

le2:
inc dx
call setpixel
cmp dx,y
jne le2



;================ MOUSE ==================



call Show_mouse
call new


gotoxy 12,20
print strxy

gotoxy 12,21
print cselect



loop1:


mov ax,dx
call converty

mov ax,cx
call convertx

call Check_mouse


cmp bx,1
je set

cmp bx,2
je read

cmp bx,3
je clr

cmp bx,4
je end

jmp loop1
read:
call readpixel
mov color,al
call color_select
jmp loop1




set:
;shr cx,1
call location
cmp allow,0
je put
jmp loop1
put:
;shr cx,1
call setpixel
jmp loop1

clr:

call new
jmp loop1


end:
ret
ends
endp ; set entry point and stop the assembler.

;==============================================
; Procedure
;==============================================

Grafic proc
mov ah, 0
mov al, 13h
int 10h

ret
endp

;---------------------------------


setpixel proc

mov al,color
mov ah,0ch
int 10h

ret

endp

;---------------------------------

Show_mouse proc

mov ax, 1
int 33h

ret
endp

;---------------------------------


Check_mouse proc
mov ax, 3
int 33h

ret
endp

;---------------------------------


readpixel proc

shr cx,1
add cx,2
mov ah,0dh
mov bh,0
int 10h

ret
endp

;---------------------------------



location proc

mov xl,100
mov xr,250
mov yl,50
mov yr,150
mov allow,0


cmp cx,xl
jb locate

cmp cx,xr
jg locate

cmp dx,yl
jb locate

cmp dx,yr
jg locate

jmp return



locate:
mov allow,1


return:
ret
endp

;---------------------------------


new proc





;.............. background ...............

mov color,15
mov cx,100
mov dx,50
mov x,251
mov y,151


lp2:

lp1:
call setpixel
inc cx
cmp cx,x
jne lp1
mov cx,100
inc dx
cmp dx,y
jne lp2


;............... BORDER ...................

mov cx,99
mov dx,49
mov x,251
mov y,151

mov color,1
l11:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l11

mov cx,99
mov dx,151
l12:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l12

mov cx,99
mov dx,49
mov y,151

l13:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l13

mov cx,251
mov dx,49
mov y,151

l14:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l14






ret

endp

convertx proc
mov xline[0],' '
mov xline[1],' '
mov xline[2],' '
mov xline[3],'$'

lea si,xline
add si,2
mov bx,10
for:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for

gotoxy 16,20
print xline


;=========
mov ah,02h
mov dl,','
int 21h ;print kama
;====================



ret

endp
converty proc

mov yline[0],' '
mov yline[1],' '
mov yline[2],' '
mov yline[3],'$'

lea si,yline
add si,2
mov bx,10
for2:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for2

gotoxy 20,20
print yline

ret

endp
color_select proc
mov cx,550
mov dx,167
mov x,560
mov y,175
lc:
call setpixel
inc cx
cmp cx,x
jne lc
mov cx,550
inc dx
cmp dx,y
jne lc

ret

endp
;...........................................................
سلام وقتتون خوش
این برنامه ای هست که تا اینجا روش کار کردم مثل محیط point راستش سعی کردم ولی نتونستم قسمت مربع و خط شو پیاده سازی کنم میشه شما کداشو برام بزارید .
باتشکر
طایم
 

طایم

عضو جدید
print macro string
mov ah,09h
lea dx,string
int 21h
endm
gotoxy macro x,y
mov ah,02h
mov dl,x
mov dh,y
mov bh,0
int 10h
endm

data segment
; add your data here!
color db ?
x dw ?
y dw ?
i db 1

xl dw ?
xr dw ?
yl dw ?
yr dw ?

xnum db ?
ynum db ?


strxy db "XY :",'$'
cselect db "color_select>>",'$'

allow db ?

xline db ' $'
yline db ' $'

;xline label byte
; maxx dw 3
; lenx dw ?
; bufferx dw 3 dup('$')
;
;
; yline label byte
; maxy dw 3
; leny dw ?
; buffery dw 3 dup('$')
ends
stack segment
dw 128 dup(0)
ends
code segment
start proc far
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here

call Grafic
mov cx,4
mov dx,24
mov color,1
mov x,15
mov y,30

;============== Palet color ===========

l2:

l1:
call setpixel
inc cx
cmp cx,x
jne l1
mov cx,4
inc dx
cmp dx,y
jne l2

mov cx,4

add dx,3
add y,8

inc color
cmp color,16
jne l2
;================ draw borders=========

mov cx,3
mov dx,23
mov color,14
mov x,16
sub y,8
mov bx,0
mov bl,17


lc1:
lc2:
call setpixel
inc cx
cmp cx,x
jne lc2

mov cx,4
add dx,8
inc i

cmp bl,i
jne lc1
mov cx,3
mov dx,23

ld2:
inc dx
call setpixel
cmp dx,y
jne ld2

mov cx,16
mov dx,23

le2:
inc dx
call setpixel
cmp dx,y
jne le2



;================ MOUSE ==================



call Show_mouse
call new


gotoxy 12,20
print strxy

gotoxy 12,21
print cselect



loop1:


mov ax,dx
call converty

mov ax,cx
call convertx

call Check_mouse


cmp bx,1
je set

cmp bx,2
je read

cmp bx,3
je clr

cmp bx,4
je end

jmp loop1
read:
call readpixel
mov color,al
call color_select
jmp loop1




set:
;shr cx,1
call location
cmp allow,0
je put
jmp loop1
put:
;shr cx,1
call setpixel
jmp loop1

clr:

call new
jmp loop1


end:
ret
ends
endp ; set entry point and stop the assembler.

;==============================================
; Procedure
;==============================================

Grafic proc
mov ah, 0
mov al, 13h
int 10h

ret
endp

;---------------------------------


setpixel proc

mov al,color
mov ah,0ch
int 10h

ret

endp

;---------------------------------

Show_mouse proc

mov ax, 1
int 33h

ret
endp

;---------------------------------


Check_mouse proc
mov ax, 3
int 33h

ret
endp

;---------------------------------


readpixel proc

shr cx,1
add cx,2
mov ah,0dh
mov bh,0
int 10h

ret
endp

;---------------------------------



location proc

mov xl,100
mov xr,250
mov yl,50
mov yr,150
mov allow,0


cmp cx,xl
jb locate

cmp cx,xr
jg locate

cmp dx,yl
jb locate

cmp dx,yr
jg locate

jmp return



locate:
mov allow,1


return:
ret
endp

;---------------------------------


new proc





;.............. background ...............

mov color,15
mov cx,100
mov dx,50
mov x,251
mov y,151


lp2:

lp1:
call setpixel
inc cx
cmp cx,x
jne lp1
mov cx,100
inc dx
cmp dx,y
jne lp2


;............... BORDER ...................

mov cx,99
mov dx,49
mov x,251
mov y,151

mov color,1
l11:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l11

mov cx,99
mov dx,151
l12:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l12

mov cx,99
mov dx,49
mov y,151

l13:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l13

mov cx,251
mov dx,49
mov y,151

l14:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l14






ret

endp

convertx proc
mov xline[0],' '
mov xline[1],' '
mov xline[2],' '
mov xline[3],'$'

lea si,xline
add si,2
mov bx,10
for:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for

gotoxy 16,20
print xline


;=========
mov ah,02h
mov dl,','
int 21h ;print kama
;====================



ret

endp
converty proc

mov yline[0],' '
mov yline[1],' '
mov yline[2],' '
mov yline[3],'$'

lea si,yline
add si,2
mov bx,10
for2:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for2

gotoxy 20,20
print yline

ret

endp
color_select proc
mov cx,550
mov dx,167
mov x,560
mov y,175
lc:
call setpixel
inc cx
cmp cx,x
jne lc
mov cx,550
inc dx
cmp dx,y
jne lc

ret

endp
;...........................................................
سلام وقتتون خوش
این برنامه ای هست که تا اینجا روش کار کردم مثل محیط point راستش سعی کردم ولی نتونستم قسمت مربع و خط شو پیاده سازی کنم میشه شما کداشو برام بزارید .
باتشکر
طایم
 

طایم

عضو جدید
print macro string
mov ah,09h
lea dx,string
int 21h
endm
gotoxy macro x,y
mov ah,02h
mov dl,x
mov dh,y
mov bh,0
int 10h
endm

data segment
; add your data here!
color db ?
x dw ?
y dw ?
i db 1

xl dw ?
xr dw ?
yl dw ?
yr dw ?

xnum db ?
ynum db ?


strxy db "XY :",'$'
cselect db "color_select>>",'$'

allow db ?

xline db ' $'
yline db ' $'

;xline label byte
; maxx dw 3
; lenx dw ?
; bufferx dw 3 dup('$')
;
;
; yline label byte
; maxy dw 3
; leny dw ?
; buffery dw 3 dup('$')
ends
stack segment
dw 128 dup(0)
ends
code segment
start proc far
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here

call Grafic
mov cx,4
mov dx,24
mov color,1
mov x,15
mov y,30

;============== Palet color ===========

l2:

l1:
call setpixel
inc cx
cmp cx,x
jne l1
mov cx,4
inc dx
cmp dx,y
jne l2

mov cx,4

add dx,3
add y,8

inc color
cmp color,16
jne l2
;================ draw borders=========

mov cx,3
mov dx,23
mov color,14
mov x,16
sub y,8
mov bx,0
mov bl,17


lc1:
lc2:
call setpixel
inc cx
cmp cx,x
jne lc2

mov cx,4
add dx,8
inc i

cmp bl,i
jne lc1
mov cx,3
mov dx,23

ld2:
inc dx
call setpixel
cmp dx,y
jne ld2

mov cx,16
mov dx,23

le2:
inc dx
call setpixel
cmp dx,y
jne le2



;================ MOUSE ==================



call Show_mouse
call new


gotoxy 12,20
print strxy

gotoxy 12,21
print cselect



loop1:


mov ax,dx
call converty

mov ax,cx
call convertx

call Check_mouse


cmp bx,1
je set

cmp bx,2
je read

cmp bx,3
je clr

cmp bx,4
je end

jmp loop1
read:
call readpixel
mov color,al
call color_select
jmp loop1




set:
;shr cx,1
call location
cmp allow,0
je put
jmp loop1
put:
;shr cx,1
call setpixel
jmp loop1

clr:

call new
jmp loop1


end:
ret
ends
endp ; set entry point and stop the assembler.

;==============================================
; Procedure
;==============================================

Grafic proc
mov ah, 0
mov al, 13h
int 10h

ret
endp

;---------------------------------


setpixel proc

mov al,color
mov ah,0ch
int 10h

ret

endp

;---------------------------------

Show_mouse proc

mov ax, 1
int 33h

ret
endp

;---------------------------------


Check_mouse proc
mov ax, 3
int 33h

ret
endp

;---------------------------------


readpixel proc

shr cx,1
add cx,2
mov ah,0dh
mov bh,0
int 10h

ret
endp

;---------------------------------



location proc

mov xl,100
mov xr,250
mov yl,50
mov yr,150
mov allow,0


cmp cx,xl
jb locate

cmp cx,xr
jg locate

cmp dx,yl
jb locate

cmp dx,yr
jg locate

jmp return



locate:
mov allow,1


return:
ret
endp

;---------------------------------


new proc





;.............. background ...............

mov color,15
mov cx,100
mov dx,50
mov x,251
mov y,151


lp2:

lp1:
call setpixel
inc cx
cmp cx,x
jne lp1
mov cx,100
inc dx
cmp dx,y
jne lp2


;............... BORDER ...................

mov cx,99
mov dx,49
mov x,251
mov y,151

mov color,1
l11:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l11

mov cx,99
mov dx,151
l12:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc cx
cmp cx,x
jne l12

mov cx,99
mov dx,49
mov y,151

l13:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l13

mov cx,251
mov dx,49
mov y,151

l14:
mov ah,0ch
mov bh,0
mov al,color
int 10h
inc dx
cmp dx,y
jne l14






ret

endp

convertx proc
mov xline[0],' '
mov xline[1],' '
mov xline[2],' '
mov xline[3],'$'

lea si,xline
add si,2
mov bx,10
for:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for

gotoxy 16,20
print xline


;=========
mov ah,02h
mov dl,','
int 21h ;print kama
;====================



ret

endp
converty proc

mov yline[0],' '
mov yline[1],' '
mov yline[2],' '
mov yline[3],'$'

lea si,yline
add si,2
mov bx,10
for2:
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
cmp ax,0
ja for2

gotoxy 20,20
print yline

ret

endp
color_select proc
mov cx,550
mov dx,167
mov x,560
mov y,175
lc:
call setpixel
inc cx
cmp cx,x
jne lc
mov cx,550
inc dx
cmp dx,y
jne lc

ret

endp
;...........................................................
سلام وقتتون خوش
این برنامه ای هست که تا اینجا روش کار کردم مثل محیط point راستش سعی کردم ولی نتونستم قسمت مربع و خط شو پیاده سازی کنم میشه شما کداشو برام بزارید .
باتشکر
طایم
 

طایم

عضو جدید
print macro string mov ah,09h lea dx,string int 21hendm gotoxy macro x,ymov ah,02hmov dl,xmov dh,ymov bh,0int 10hendm data segment ; add your data here! color db ? x dw ? y dw ? i db 1 xl dw ? xr dw ? yl dw ? yr dw ? xnum db ? ynum db ? strxy db "XY :",'$' cselect db "color_select>>",'$' allow db ? xline db ' $' yline db ' $' ;xline label byte; maxx dw 3; lenx dw ?; bufferx dw 3 dup('$'); ; ; yline label byte; maxy dw 3; leny dw ?; buffery dw 3 dup('$')endsstack segment dw 128 dup(0)endscode segmentstart proc far; set segment registers: mov ax, data mov ds, ax mov es, ax ; add your code here call Grafic mov cx,4 mov dx,24 mov color,1 mov x,15 mov y,30 ;============== Palet color =========== l2: l1: call setpixel inc cx cmp cx,x jne l1 mov cx,4 inc dx cmp dx,y jne l2 mov cx,4 add dx,3 add y,8 inc color cmp color,16 jne l2;================ draw borders========= mov cx,3 mov dx,23 mov color,14 mov x,16 sub y,8 mov bx,0 mov bl,17 lc1: lc2: call setpixel inc cx cmp cx,x jne lc2 mov cx,4 add dx,8 inc i cmp bl,i jne lc1mov cx,3mov dx,23 ld2: inc dx call setpixel cmp dx,y jne ld2 mov cx,16 mov dx,23 le2: inc dx call setpixel cmp dx,y jne le2 ;================ MOUSE ================== call Show_mouse call new gotoxy 12,20 print strxy gotoxy 12,21 print cselect loop1: mov ax,dx call converty mov ax,cx call convertx call Check_mouse cmp bx,1 je set cmp bx,2 je read cmp bx,3 je clr cmp bx,4 je end jmp loop1 read: call readpixel mov color,al call color_select jmp loop1 set: ;shr cx,1 call location cmp allow,0 je put jmp loop1put: ;shr cx,1 call setpixel jmp loop1 clr: call new jmp loop1 end: ret endsendp ; set entry point and stop the assembler. ;============================================== ; Procedure ;============================================== Grafic proc mov ah, 0 mov al, 13h int 10h retendp ;--------------------------------- setpixel proc mov al,color mov ah,0ch int 10h ret endp ;--------------------------------- Show_mouse proc mov ax, 1 int 33h retendp ;--------------------------------- Check_mouse proc mov ax, 3 int 33h retendp;--------------------------------- readpixel proc shr cx,1 add cx,2 mov ah,0dh mov bh,0 int 10h ret endp;--------------------------------- location proc mov xl,100 mov xr,250 mov yl,50 mov yr,150 mov allow,0 cmp cx,xl jb locate cmp cx,xr jg locate cmp dx,yl jb locate cmp dx,yr jg locate jmp return locate: mov allow,1 return: retendp ;--------------------------------- new proc ;.............. background ............... mov color,15 mov cx,100 mov dx,50 mov x,251 mov y,151 lp2: lp1: call setpixel inc cx cmp cx,x jne lp1 mov cx,100 inc dx cmp dx,y jne lp2 ;............... BORDER ................... mov cx,99 mov dx,49 mov x,251 mov y,151 mov color,1 l11: mov ah,0ch mov bh,0 mov al,color int 10h inc cx cmp cx,x jne l11 mov cx,99 mov dx,151 l12: mov ah,0ch mov bh,0 mov al,color int 10h inc cx cmp cx,x jne l12 mov cx,99 mov dx,49 mov y,151 l13: mov ah,0ch mov bh,0 mov al,color int 10h inc dx cmp dx,y jne l13 mov cx,251 mov dx,49 mov y,151 l14: mov ah,0ch mov bh,0 mov al,color int 10h inc dx cmp dx,y jne l14 ret endp convertx proc mov xline[0],' ' mov xline[1],' ' mov xline[2],' ' mov xline[3],'$' lea si,xline add si,2 mov bx,10for: div bl add ah,30h mov [si],ah mov ah,0 dec si cmp ax,0 ja for gotoxy 16,20 print xline ;========= mov ah,02h mov dl,',' int 21h ;print kama ;==================== ret endpconverty proc mov yline[0],' ' mov yline[1],' ' mov yline[2],' ' mov yline[3],'$' lea si,yline add si,2 mov bx,10for2: div bl add ah,30h mov [si],ah mov ah,0 dec si cmp ax,0 ja for2 gotoxy 20,20 print yline ret endp color_select proc mov cx,550 mov dx,167 mov x,560 mov y,175 lc: call setpixel inc cx cmp cx,x jne lc mov cx,550 inc dx cmp dx,y jne lc ret endp ;...........................................................سلام وقتتون خوش این برنامه ای هست که تا اینجا روش کار کردم مثل محیط point راستش سعی کردم ولی نتونستم قسمت مربع و خط شو پیاده سازی کنم میشه شما کداشو برام بزارید . باتشکر طایم
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
اول که لطف کنید پست های اضافی رو حذف کنید!
ثانیاً کدی که شما نوشتید اونم تو اسمبلی، سخته که کس دیگه ای درکش کنه و ایراداش رو بگیره!
برای مربع زیربرنامه رو از تاپیک مربوطه بردارید و مقادیر ورودی رو با توجه به برنامه ی خودتون تغییر بدید! بهتره که ابتدا تو برنامه ی جداگانه ای رسم مربع رو تست کنید و بعد به برنامه ی خودتون اضافه کنید. همین طور بهتره در هنگام فراخوانی زیربرنامه ثبات های مورد استفاده در زیربرنامه رو Push کنید تا یه موقع مشکلی پیش نیاد، چون گاهی به مشکلاتی برخورد می کنید که دلیلش اصلاً روشن نیست و نمی تونید هم حلش کنید!
 
Similar threads
Thread starter عنوان تالار پاسخ ها تاریخ
N کشیدن مربع با موس به اسمبلی زبان اسمبلی 2

Similar threads

بالا