PDA

View Full Version : سوال: مشكل با cmpsb در بايوس



MJVMJV
چهارشنبه 24 آذر 1389, 01:28 صبح
يه مشكلي داشتم تو كد زير



jmp c1

m1:
pop bx
add bx,11
MAIN:
mov ax, 0201h
mov ch,0; byte [bp+5]
mov cl,2; byte [bp+7]
mov dh,1; byte [bp+6]
mov dl,0
MOV AX,ds
MOV ES,AX
MOV AX,0201H
INT 13H
JNC k1
; Carry Flag set? If no, jump!
XOR AX,AX ; Yes, so we had an error! Must
INT 13h
k1:
mov si,bx

mov cx,0

MOV AH,0EH ; WRITE CHAR.
PRINT12:

lodsb
INT 10H
inc cx
CMP cX,512
JNZ PRINT12


mov bp,bx
mov si,bp
mov dx,0
PRINT:
MOV AH,0EH
lodsb
INT 10H
mov di,bx
sub di,11

mov cx,11

mov si,bp
repe cmpsb
je fv1
inc bp
inc dx
CMP dx,512
JNZ PRINT
fv1:add si,15
lodsb
mov cl,al
lodsb

mov ah,al

mov al,cl
mov cx,ax
add ax,31
push ax
mov al,cl
add al,30h
mov ah,0EH ;write key
int 10h
mov al,ch
add al,30h
mov ah,0EH ;write key
int 10h
pop ax
mov dx,0
mov cx,18
div cx
inc dl ; adjust for sector 0
push dx
mov dx,0 ; prepare dx:ax for operation
mov cx,2
div cx ; calculate

push dx
;Lea SI, absoluteTrack
pop dx
pop cx
mov ch, al
mov dh,dl

mov ax, 0201h
mov dl,0
mov ah,0 ;read key
int 16h
MOV AX,ds
MOV ES,AX

MOV AX,0201H
INT 13H
mov si,bx
mov cx,0
;MOV BX,1
MOV AH,0EH ; WRITE CHAR.
PRINT1:

lodsb
INT 10H
inc cx
CMP cX,512
JNZ PRINT1
mov ah,0 ;read key
int 16h
ret

c1:call m1
MS db "MJV TXT"
BUF DB 512 DUP(' ')

كد دوم




jmp c1

m1:
pop bx
add bx,11
MAIN:
mov ax, 0201h
mov ch,0
mov cl,2
mov dh,1
mov dl,0
MOV AX,ds
MOV ES,AX
MOV AX,0201H
INT 13H
JNC k1
; Carry Flag set? If no, jump!
XOR AX,AX ; Yes, so we had an error! Must
INT 13h
k1:
mov si,bx


mov bp,bx
mov si,bp
mov dx,0
PRINT:
mov di,bx
sub di,11
mov cx,11
mov si,bp
repe cmpsb
je fv1
inc bp
inc dx
CMP dx,512
JNZ PRINT
fv1:add si,15
lodsb
mov cl,al
lodsb

mov ah,al

mov al,cl
mov cx,ax
add ax,31
mov dx,0
mov cx,18
div cx
inc dl ; adjust for sector 0
push dx
mov dx,0 ; prepare dx:ax for operation
mov cx,2
div cx ; calculate
push dx
pop dx
pop cx
mov ch, al
mov dh,dl

mov ax, 0201h
mov dl,0
MOV AX,ds
MOV ES,AX

MOV AX,0201H
INT 13H
mov si,bx
mov cx,0
;MOV BX,1
MOV AH,0EH ; WRITE CHAR.
PRINT1:

lodsb
INT 10H
inc cx
CMP cX,512
JNZ PRINT1
mov ah,0 ;read key
int 16h
ret
c1:call m1
MS db "MJV TXT"
BUF DB 512 DUP(' ')
اين دو كد يك كار را انجام مي دهد و يكي است
فقط كد اول براي تست كرد ن درستي كد مقاديري را چاپ مي كند
برنامه بالا برروي ديسك با فرمت Fat12 اجرا مي شود
و Root Directory را خوانده و فقط در سكتور اول آن جستوجو كرده و MJV.TXT را پيدا كرده و به آدرس آن رفته و مقدار آن را به اندازه يك سكتور مي خواند
مشكل اينجاست كه اين برنامه بر روي ويندوز و داس هيچ مشكلي ندارد و اجرا مي شود اما بر روي بايوس root directory را درست مي خواند و در متغير BUF مي ريزد ولي هنگام مقايسه با MS كه اين كار را در repe cmpsb انجام مي شود هيچ تاثيري ندارد و تشخيص نمي دهد كه اين دو مساوي هستند
مي خواستم بدونم آيا در بايوس وضعيت فرق مي كند
مشكل از كجاست
با تشكر

MJVMJV
چهارشنبه 24 آذر 1389, 01:34 صبح
دوست عزيزي در تايپك ديگه اين را بيان كردند

اين مطلب متفاوت iست بايد تاپيك ديگه ميزدين!

نخير تفاوتي ندارد تاپيك مجزا باز كنيد و سورسشو بزارين اين ايستراكشن پردازنده هست مشكلي نيست.
http://home.comcast.net/~fbui/intel_r.html#rep (http://home.comcast.net/%7Efbui/intel_r.html#rep)

پس مشكل از كجاست؟

xman_1365_x
پنج شنبه 25 آذر 1389, 13:36 عصر
متاسفانه درگير امتحاناتم وقت بررسي ندارم اما
اين نكاتو فعلا چك كنيد
1-پردازش بر روي بلاك هاي داده اي حد اكثر طول 64k
2-آدرس مبدا


DS:SI

3-آدرس مقصد


ES:DI

4-كاهشي DF=1
5-افزايشي DF=0
6-پيشوند REP باعث تكرار دستور تا زماني كه CX مخاف صفر است مي شود.
7-سعي كنيد از سگمنت ES استفاده كنيد!( نه DS رو به ES بدين)


EXTRASG SEGMENT PARA 'EXTRA'
.
.
.
ESTRASG ENDS

ASSUME ES:EXTRASG

MOV AX,EXTRAGF
MOV ES,AX

اگر حل نشد سورس كاملترشو بزارين تا اجراش كنم