当前位置: 代码迷 >> 汇编语言 >> 输入一个字符串与另一个字符串比较解决方法
  详细解决方案

输入一个字符串与另一个字符串比较解决方法

热度:1505   发布时间:2013-02-26 00:00:00.0
输入一个字符串与另一个字符串比较
DATAS SEGMENT
  mima db 7
  db 7 dup(?) 
  string db "123456"
  cout1 db 0dh,0ah,"MATCH","$"
  cout2 db 0dh,0ah,"NO MATCH","$";此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
  ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
  ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
  MOV AX,DATAS
  MOV DS,AX
   
  mov dx,seg mima
  mov ds,dx
  mov dx,offset mima
  mov ah,10
  int 21h
   
  lea si,mima
  lea di,string
  mov bx,[di]
   
  mov cx,6
 all: cmp bx,[si]+1
  jnz again
  inc si
  inc bx
  loop all
   
  mov ah,09h
  mov dx,offset cout1
  int 21h
  

 again:mov ah,9
  mov dx,offset cout2
  int 21h ;
  MOV AH,4CH
  INT 21H
CODES ENDS
  END START

即使我输入123456 也只会输出 NO MATCH   求指点

------解决方案--------------------------------------------------------
在那个比较的 cmp 指令上设断点,看看为什么会不对。
首先,数据定义不对。int21h 的 0ah 功能的输入区,你少定义了一个字节。其次,比较逻辑错误,逐字节比较,用 bx 不合适吧;逐字节比较,后来就不管 di 了?
------解决方案--------------------------------------------------------
以前做过的练习,供楼主参考。
Assembly code
assume    cs:code,ds:data,es:datadata    segmentmsg1    db    'Error!$'msg2    db    'Congratulation!$'buff    db    10 dup (0)     ;输入缓冲区pw    db    '123456'       ;密码data    endscode    segmentstart:    mov ax,data    mov ds,ax    mov es,ax    mov cx,3               ;3次输入机会s:    push cx    mov si,offset buff    mov cx,sizeof pw       ;取密码长度s1:    mov ah,8               ;无回显输入    int 21h    mov byte ptr [si],al    mov dl,'*'             ;用*号显示输入字符    mov ah,2    int 21h    inc si    loop s1;回车    mov ah,2    mov dl,13    int 21h    mov dl,10    int 21h;煮字节比较    mov cx,sizeof pw    mov si,offset buff    mov di,offset pw    cld    repz cmpsb    jne jx    jmp okjx:    mov dx,offset msg1    mov ah,9    int 21h        mov ah,2    mov dl,13    int 21h    mov dl,10    int 21h    pop cx    loop s    jmp doneok:    mov dx,offset msg2    mov ah,9    int 21h    done:    mov ah,4ch    int 21hcode    endsend    start
------解决方案--------------------------------------------------------
探讨
DATAS SEGMENT
mima db 7
db 7 dup(?)
string db "123456"
cout1 db 0dh,0ah,"MATCH","$"
cout2 db 0dh,0ah,"NO MATCH","$";此处输入数据段代码
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS……
  相关解决方案