PDA

View Full Version : آموزش: نقاشی کردن با فشردن کلید چپ ماوس در emu8086



تیناسین
یک شنبه 24 اردیبهشت 1391, 19:19 عصر
برنامه ای بنویسید که با فشردن کلید چپ ماوس روی مانیتور نقاشی کند.



DSEG SEGMENT 'DATA'
; add your data here!

Row DW (0)
Col DW (0)

DSEG ENDS

SSEG SEGMENT STACK 'STACK'

DW 128 DUP(0)

SSEG ENDS

CSEG SEGMENT 'CODE'
START PROC FAR
; set segment registers:

MOV AX, DSEG
MOV DS, AX
MOV ES, AX

MOV AH, 0
MOV AL, 13H
INT 10H
BACK: MOV AX, 01
INT 33H
MOV AX, 03
INT 33H
SHR CX, 1
MOV ROW, CX
MOV COL, DX
SHR BX, 1
JC NEXT
SHR BX, 1
JC EXIT
JMP BACK
NEXT: MOV AH, 0CH
MOV AL, 1100B
MOV CX, ROW
MOV DX, COL
INT 10H
JMP BACK
EXIT: MOV AX, 4C00H
INT 21H

; add your code here

MOV AX, 4C00h ; exit to operating system.
INT 21h
START ENDP
CSEG ENDS
END START ; set entry point.

xman_1365_x
یک شنبه 24 اردیبهشت 1391, 21:11 عصر
برنامه رو میشه به شکل زیر کوتاه تر نوشت
اما یک مشکل اساسی وجود داره که نمیدونم در داس و وقفه هاش هست (ایمیج داس ندارم تست کنم) یا در NTVDM ویندوز که باعث میشه
هنگام فیکس کردن cx نقاط به طور پیوسته رسم نشه البته با فیکس نکردن این مشکل حل میشه اما مشکل دیگه به وجود میاد که مختصات نقطه با ماوس برابر نیست
; note: in graphical 320x200 mode the value of CX is doubled.



DSEG SEGMENT 'DATA'
;nothing

DSEG ENDS

SSEG SEGMENT STACK 'STACK'

DW 128 DUP(0)

SSEG ENDS

CSEG SEGMENT 'CODE'
START PROC FAR

MOV AX, DSEG
MOV DS, AX
MOV ES, AX

MOV AH, 0
MOV AL, 13H
INT 10H
MOV AX, 01
INT 33H

BACK:
MOV AX, 03
INT 33H

shr bx,1
jc NEXT

shr bx,1
jc EXIT

jmp back

NEXT: MOV AH, 0CH
MOV AL, 1100B
shr cx,1
INT 10H

JMP BACK

EXIT:
MOV AX, 4C00h ; exit to operating system.
INT 21h

START ENDP
CSEG ENDS
END START ; set entry point.


موفق باشید