|
发表于 2012-10-3 16:32:53
|
显示全部楼层
assume cs:code,ds:data
data segment
a db 'please intput first string:',0dh,0ah,'$'
b db 'please intput second string:',0dh,0ah,'$'
s db 128 dup (0)
d db 128 dup (0)
e db 'The result is:',0dh,0ah,'Yes!',0dh,0ah,'$'
f db 'The result is:',0dh,0ah,'No!',0dh,0ah,'$'
data ends
code segment
start: lea si,s
lea di,d
;调用dos中断(9号),显示a所代表的字符串,下面5行
mov ax,data
mov ds,ax
lea dx,a
mov ah,9
int 21h
;s0调用dos中断(1号), 键盘输入并回显,不清楚可以查中断表,下面7行
s0: mov ah,01h
int 21h
cmp al,0dh
je s1
mov byte ptr [si],al
inc si
jmp s0
;s1调用dos中短(2)号,显示输出,其实就是输入一个换行符,0ah代表换行,下面3行
s1: mov ah,02h
mov dl,0ah
int 21h
;从下面开始和上面基本是一样,主要用于第二个字符串的输入
mov ax,data
mov ds,ax
lea dx,b
mov ah,9
int 21h
s2: mov ah,01h
int 21h
cmp al,0dh
je s3
mov byte ptr [di],al
inc di
jmp s2
s3: mov ah,02h
mov dl,0ah
int 21h
;开始字符串的比较
push di
sub di,128 ;di比si本身就多128个字符,这在定义时就决定了,所以要减去128
cmp si,di ;si和di比较,看字符串长度是否一样,不一样的话,直接跳出,不用比较了
jne no
pop di
push si
lea cx,s
sub si,cx ;籹i减基址s才是长度
mov cx,si ;cx存的是字符串的长度
pop si ;将si,pi压栈再弹栈,起一个暂存的作用
;个数一样时,进行逐次比较
s4: mov dl,[si]
mov dh,[di]
cmp dh,dl
jne no
dec si
dec di
loop s4
yes: lea dx,e
mov ah,9
int 21h
jmp start
no:lea dx,f
mov ah,9
int 21h
jmp start
code ends
end start
|
|