Thursday, January 21, 2010

Assembly (CS401) - Assignment # 4 Solution

; Searching a substring from a Main string

[org 0x0100]

jmp start

mstr: db 'aaab', 0

sstr: db 'aab', 0

sub_len: dw ; Used to contain length of sub string

start: dw ; Place to resume search

stop: dw ; Last place to begin search

;;;;; COPY LINES 028-050 FROM EXAMPLE 7.4 (strlen) ;;;;;

; subroutine to compare two strings

; takes segment and offset pairs of two strings to compare

; returns 1 in ax if they match and 0 other wise

strcmp: push bp

mov bp,sp

push cx

push si

push di

push es

push ds

lds si, [bp+4] ; point ds:si to first sstr

les di, [bp+8] ; point es:di to second mstr

push es ; push segment of mstr

push di ; push offset of mstr

call strlen ; calculate string length

mov bx, ax ; save length in bx

push ds ; push segment of sstr

push si ; push offset of sstr

call strlen ; calculate string length

; Now length of sstr is in ax register

; See if mstr/sstr are null or sstr longer than mstr

or bx,bx ; mstr null?

JE exitfalse

cmp ax,0 ; sstr null?

JE exitfalse

cmp ax, bx ; sstr>mstr?

JE exitfalse



mov sub_len, ax ; Move length of sstr in sub_len

; see if the sstr is substring of mstr

LEA SI, sstr ; SI points to sstr

LEA DI, mstr ; DI points to mstr

Cld ; Left to right processing

; Compute STOP

mov stop, DI ; stop has mstr address

add stop, bx

mov cx,sub_len

sub stop,cx ; subtract substring length

; Initialize start

mov start, DI

REPEAT:

; compare characters

mov cx, sub_len

mov DI, start ; reset DI

LEA SI, sstr ; reset SI

Repe cmpsb ; compare characters

JE exitsimple

; substring not found yet

INC start

; see if the start<=stop mov ax, start cmp ax, stop JNLE exitfalse JMP REPEAT mov ax,1 JMP exitsimple exitfalse: mov ax, 0 ; store 0 to mark unequal exitsimple: pop ds pop es pop di pop si pop cx pop bp ret 8 start: push ds ; push segment of first string mov ax, mstr push ax ; push offset of first string push ds ; push segment of second string mov ax, sstr push ax ; push offset of second string call strcmp ; call strcmp subroutine mov ax, 0x4c00 ; terminate program int 0x21 Plz comment

No comments:

Post a Comment

 

best kindle covers | ambien sleeping pills