PDA

نسخه کامل مشاهده نسخه کامل : کمک در تحلیل برنامه اسمبلی



sadedez
11-04-2013, 14:11
سلام دوستان اگه کسی هست که تو تحلیل این کد که به زبان اسمبلی هست بهم کمک کنه ممنون میشم ( کارش ایجاد یک صفحه آبی رنگ در وسط صفحه و چاپ تمام کارکتر های اسکی در کادر) :n16:

.MODEL SMALL
.CODE
ORG 100H
BEGIN: JMP A10MAIN


CTR DB 00
COL DB 24
ROW DB 04
MODE DB ?
A10MAIN PROC NEAR
CALL B10MODE
CALL C10CLR
A20:
CALL D10SET
CALL E10DISP
CMP CTR,0FFH
JE A30
INC CTR
ADD COL,02
CMP COL,56
JNE A20
INC ROW
MOV COL,24
JMP A20
A30:
CALL F10READ
CALL G10MODE
MOV AX,4C00H
INT 21H

A10MAIN ENDP

B10MODE PROC NEAR
MOV AH,0FH
INT 10H
MOV MODE,AL
MOV AH,00H
MOV AL,03
INT 10H
RET

B10MODE ENDP

C10CLR PROC NEAR
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
MOV AX,0610H
MOV BH,16H
MOV CX,0418H
MOV DX,1336H
INT 10H
RET
C10CLR ENDP


D10SET PROC NEAR
MOV AH,02H
MOV BH,00
MOV DH,ROW
MOV DL,COL
INT 10H
RET
D10SET ENDP


E10DISP PROC NEAR
MOV AH,0AH
MOV AL,CTR
MOV BH,00
MOV CX,01
INT 10H
RET

E10DISP ENDP
F10READ PROC NEAR
MOV AH,08H
INT 21H
RET

F10READ ENDP


G10MODE PROC NEAR
MOV AH,00H
MOV AL,MODE
INT 10H
RET
G10MODE ENDP


END BEGIN

mohsen_amd
11-04-2013, 21:41
سلام دوست عزیز
میتونی بگی دقیقا کجاش مشکل داری؟

mohsen_amd
11-04-2013, 21:46
البته فکر کنم کتاب جعفر نژاد فصل صفحه نمایش رو بخونی کمکت کنه و مشکلت رفع بشه.

sadedez
12-04-2013, 17:30
البته فکر کنم کتاب جعفر نژاد فصل صفحه نمایش رو بخونی کمکت کنه و مشکلت رفع بشه.
والا من توابع کتابخانه ای رو خیلی خوب بلد نیستم تابع ها رو نمیدونم جریانشون چیه و هر کدوم چیکار مینه :n03:

mohsen_amd
14-04-2013, 10:52
برنامه شما با 4 - 5 تا زیر برنامه نوشته شده که هر کدوم کار خاصی رو انجام میده، اینم بگم که چون از org100 درش استفاده شده برنامتون com حساب میشه
در ابتدا با دستور پرش به زیر برنامه A10MAIN میره که داخل این زیر برنامه نیز چندتا زیر برنامه دیگه فراخوانی شده ، مثلا B10MODE که حالت ویدیویی رو مشخص می کنه(0fh) و بعد هم حالت گرافیکیتو نشون میده(MOV AH,00H) که بعد با دستور ret به زیر برنامه فراخوان که اینجا همون A10MAIN زیر برنامه فراخوان حساب میشه برمیگرده. حالا داخل زیر برنامه A10MAIN یه زیر یرنامه دیگه که C10CLR هستش رو فراخوانی میکنه.این زیر برنامه (C10CLR) بایت صفت کاراکتر تو مشخص میکنه. زیر برنامه D10SET که تابع 02 از وقفه 10 درش استفاده شده موقعیت مکان نما رو مشخص میکنه . شما در ابتد شماره سطر رو ROW DB 04 مشخص کردین و شماره ستون رو COL DB 24 مشخص کردین که ابتدا مستطیل آبی رنگ (بالا سمت چپ) رو مشخص میکنه. زیر برنامه E10DISP که از تابع 0a استفاده میکنه کاراکتر رو همون جایی که مکان نما به اون اشاره میکنه (با تابع 02 این کاره انجام دادین) نشون میده. و در نهایت زیر برنامه F10READ برای نمایش رشته در
خروجی هستش که از تابع 08 استفاده میکنه.
امیدوارم که تونسته باشم کمکت کرده باشم.

mohsen_amd
14-04-2013, 11:00
مطالعه کار ثبات هر تابع هم به عهده خودت، که فکر نمیکنم کار سختی باشه.
اینم کد برنامه بدون استفاده از زیر برنامه که همون برنامست و فقط بجای فراخوانی یه زیر برنامه از خود کد استفاده شده.


.MODEL SMALL
.CODE
ORG 100H
BEGIN: JMP A10MAIN
CTR DB 00
COL DB 24
ROW DB 04
MODE DB ?
A10MAIN PROC NEAR
MOV AH,0FH
INT 10H
MOV MODE,AL
MOV AH,00H
MOV AL,03
INT 10H

MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
MOV AX,0610H
MOV BH,16H
MOV CX,0418H
MOV DX,1336H
INT 10H

A20:
MOV AH,02H
MOV BH,00
MOV DH,ROW
MOV DL,COL
INT 10H

MOV AH,0AH
MOV AL,CTR
MOV BH,00
MOV CX,01
INT 10H

CMP CTR,0FFH
JE A30
INC CTR
ADD COL,02
CMP COL,56
JNE A20
INC ROW
MOV COL,24
JMP A20
A30:
MOV AH,08H
INT 21H

MOV AH,00H
MOV AL,MODE
INT 10H

MOV AX,4C00H
INT 21H A10MAIN ENDP
END BEGIN