ورود

View Full Version : مبتدی: راهنمایی در مورد این کدها



مائده 100
یک شنبه 22 آذر 1388, 12:37 عصر
با سلام خدمت همه
من یه تکه کد پازل دارم اما بعضی از قسمت هاشو نمی دونم برای چه کاری هستش اگه می شه راهنمایی ام کنید
با تشکر

MAIN PROC FAR
ASSUME SS:STACKSG,DS:DATASG,CS:CODESG
MOV AX,DATASG
MOV DS,AX
MOV ES,AX
MOV AH,01H
MOV CH,01H
MOV CL,00H
INT 10H
LOOP1: CALL SHOW
CALL GETKEY
CALL CHECK
CMP BH,1
JNE LOOP1
CALL SHOW
LEA DX,WINNER
MOV AH,09H
INT 21H
MOV AH,00H
INT 16H
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
;********************
GETKEY PROC NEAR
MOV AH,10H
INT 16H
CMP AX,011BH ;ESC
JNE NEXT1
JMP EXIT


NEXT1: CMP AX,48E0H ;UP
JNE NEXT2
CMP ROW,4
JNE ERR1
CALL BEEP
JMP QUIT
این قسمتها الان چی کاری انجام می دهند.
ERR1:MOV CH,ROW
ADD CH,1
MOV ROW,CH
MOV DX,LOCATION
ADD DX,46
MOV NEWLOC,DX
CALL CHANGE
JMP QUIT
تا اینجا
NEXT2: CMP AX,4DE0H
JNE NEXT3 ;RIGHT
CMP COL,1
JNE ERR2
CALL BEEP
JMP QUIT
ERR2:MOV CH,COL
SUB CH,1
MOV COL,CH
MOV DX,LOCATION
SUB DX,5
MOV NEWLOC,DX
CALL CHANGE
JMP QUIT
NEXT3: CMP AX,50E0H ;DOWN
JNE NEXT4
CMP ROW,1
JNE ERR3
CALL BEEP
JMP QUIT
ERR3:MOV CH,ROW
SUB CH,1
MOV ROW,CH
MOV DX,LOCATION
SUB DX,46
MOV NEWLOC,DX
CALL CHANGE
JMP QUIT
NEXT4: CMP AX,4BE0H ;LEFT
JNE NEXT5
CMP COL,4
JNE ERR4
CALL BEEP
JMP QUIT
ERR4:MOV CH,COL
ADD CH,1
MOV COL,CH
MOV DX,LOCATION
ADD DX,5
MOV NEWLOC,DX
CALL CHANGE
JMP QUIT
NEXT5:CALL BEEP
QUIT:MOV AX,0000H
RET
GETKEY ENDP
;********************
SHOW PROC NEAR
MOV AX,060AH
MOV BH,07H
MOV CX,0000H
MOV DX,0A18H
INT 10H
MOV AH,02H
MOV BH,00H
mOV DX,0000H
INT 10H
LEA DX,SHEKL
MOV AH,09H
INT 21H
QUIT2: RET
SHOW ENDP
;****واین تابع چه کاری انجام می دهد****************
CHANGE PROC NEAR
MOV SI,LOCATION
MOV DI,NEWLOC
MOV AL,[SI]
XCHG [DI],AL
MOV [SI],AL
INC SI
INC DI
MOV AL,[SI]
XCHG [DI],AL
MOV [SI],AL
MOV CX,NEWLOC
MOV LOCATION,CX
RET
CHANGE ENDP
;****************************
CHECK PROC NEAR
MOV BH,0
MOV CX,198
LEA SI,SHEKL
LEA DI,CORRECT
CHECKING:INC SI
INC DI
MOV AL,[SI]
CMP AL,[DI]
JNE WIN
LOOPZ CHECKING
MOV BH,1
WIN: RET
CHECK ENDP
;******************************************
BEEP PROC NEAR
MOV AH , 0EH
MOV AL , 07H
INT 10H
RET
BEEP ENDP
;**********************************
CODESG ENDS
END MAIN
END

مائده 100
سه شنبه 24 آذر 1388, 08:18 صبح
کسی نمی خواد به ما جواب بده

mortezamsp
پنج شنبه 26 آذر 1388, 11:37 صبح
تا اونجاییکه فهمیدم برنامه یکی از کلیدهای جهتی رو میگیره و در صورتیکه حرکت در صفحه موردنظر(4*4)باشد ، مقدار location را تغییر میدهد. برچسب err1,2,3,4 مربوط به بررسی شرط صفحه هستند مقدار جدید location را در newlocation میریزند و تابع change ، مقدار newlocation رادر location میریزد.( ولی کدنشان میدهد location , newlocation آرایه دوعضوی اند ، لطفا کد کامل را zip شده بفرستید . )

همینی که گفتمو به سی پلاس نوشتم شده این :

int location[2]; //x,y
int shekl[198];
int corect[198];

void change(); // exchange location with newlocation
void beep();
void show();
int check();
int getkey();

int main()
{
int bh=0;
while( bh!=1 ) //not won
{
getkey();
bh=check( shekl , corect );
}
show();
cout<<winner;
getch();

return 0 ;
}


int getkey()
{
char ch=getch();

switch ( ch )
{
case 'ESC' : exit(0);
case 'UP' : {
if( row == 4 )
beep();
else
{
row ++ ;
newlocation[0] += 64 ;
}
break;
}
case'RIGHT' : {
if( col == 1 )
beep();
else
{
col -- ;
newlocation[0] -= 5 ;
}
break;
}
case'DOWN' : {
if( row == 1 )
beep();
else
{
row -- ;
location[0] -= 64 ;
}
break;
}
case'LEFT' : {
if( col == 4 )
beep();
else
{
col ++ ;
location[0] += 5 ;
}
break;
}
beep();
return 0 ;
}
return 0 ;
}


int check( int* sh , int* cr )
{
bh=0;
for( int i=0 ;i<198 ;i++ )
{
if( sh[i] != cr[i] )
return 0 ;
}
return 1 ;
}