ورود

View Full Version : سوال: جلوگیری از Not Responding



teardrop
سه شنبه 16 اسفند 1390, 22:07 عصر
به نام خدا

سلام
چطوری میشه از Not Responding جلوگیری کنم.

مثل این سورس کد، که وظیفه داره بوق کامپیوتر رو به صدا در بیاره تا زمانی که کلیدی فشرده نشه.




PAGE 110,100
TITLE 'KEY_DET4.ASM' detect a special key
;-----------------------------------------------
;
; Defining Segment of Program
; ----------------------------
CODESG SEGMENT PARA 'CODE'
ASSUME SS:CODESG,DS:CODESG,CS:CODESG
ORG 100H
START: JMP MAIN ;1-Jump DATA
;-----------------------------------------------
MESSAGE DB 'to stop bell press Q or ESC','$'
;-----------------------------------------------
;
MAIN PROC NEAR
MOV AH,09H ;2-Service 9 interupt
LEA DX,MESSAGE ;3- 21H to write MESSAGE
INT 21H ;4- on monitor
NO_KEY: MOV AH,02H ;5-Service 2 interupt
MOV DL,07H ;6- 21H for writting a
INT 21H ;7- character on monitor
MOV AH,01 ;8-Service 1 interupt 16H
INT 16H ;9- for detecting a key
JZ NO_KEY ;10- if no key go NO_KEY
MOV AH,00 ;11-Else determine which
INT 16H ;12- key is preesed
CMP AL,'Q' ;13-If pressed key is
JE EXIT ;14- is Q go to EXIT
CMP AL,27 ;15-If pressed key is Esc
JE EXIT ;16- go to EXIT
JMP NO_KEY ;17-Else back to NO_KEY
EXIT:
MOV AX,4C00H ;18- End of
INT 21H ;19- processing
MAIN ENDP ; End of procedure
CODESG ENDS ; End of segment
END START ; End of program

این کار رو در زبانهای سطح بالا می تونیم با تایمر یا چند نخی استفاده کنیم.
با تشکر

xman_1365_x
سه شنبه 16 اسفند 1390, 23:36 عصر
چون برنامتون کوتاه هست و پردازنده میلیون ها دستور رو توی یک ثانیه اجرا میکنه برای همین شما نمی تونید چیزی وارد در بافر کنید برای همین برنامه هنگ میکنه
راه حلش اینه تاخیری بین دو کد کد قرار بگیره یا با نوشتن کد های دیگه مثل حلقه های هرز برای گذر زمان یا استفاده از وقفه ، برای ایجاد وقفه با زمان که من یک نمونه با تاخیر یک ثانیه براتون نوشتم که برنامه Not Responding نشه


PAGE 110,100
TITLE 'KEY_DET4.ASM' detect a special key
;-----------------------------------------------
;
; Defining Segment of Program
; ----------------------------
CODESG SEGMENT PARA 'CODE'
ASSUME SS:CODESG,DS:CODESG,CS:CODESG
ORG 100H
START: JMP MAIN ;1-Jump DATA
;-----------------------------------------------
MESSAGE DB 'to stop bell press Q or ESC','$'
;-----------------------------------------------
;
MAIN PROC NEAR
MOV AH,09H ;2-Service 9 interupt
LEA DX,MESSAGE ;3- 21H to write MESSAGE
INT 21H ;4- on monitor
NO_KEY:
MOV AH,02H ;5-Service 2 interupt
MOV DL,07H ;6- 21H for writting a
INT 21H ;7- character on monitor

;wait 1 second
mov ah,2ch
int 21h
mov bl,dh
inc bl
again:
mov ah,2ch
int 21h
cmp bl,dh
jne again


MOV AH,01 ;8-Service 1 interupt 16H
INT 16H ;9- for detecting a key
JZ NO_KEY ;10- if no key go NO_KEY

MOV AH,00 ;11-Else determine which
INT 16H ;12- key is preesed
CMP AL,'Q' ;13-If pressed key is
JE EXIT ;14- is Q go to EXIT
CMP AL,27 ;15-If pressed key is Esc
JE EXIT ;16- go to EXIT
JMP NO_KEY ;17-Else back to NO_KEY
EXIT:
MOV AX,4C00H ;18- End of
INT 21H ;19- processing
MAIN ENDP ; End of procedure
CODESG ENDS ; End of segment
END START ; End of program