回 帖 发 新 帖 刷新版面

主题:帮忙改一道小程序

在字符串查找一字符,字符串在数据段定义,要查找的字符在程序执行的时候从键盘输入,并指出找到的位置。  
我写的程序得不到要求的结果,请高手指导指导
data segment
mess db 'computer $'
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
      mov ds,ax
      lea si,mess
      mov cx,8
      mov ah,1
      int 21h
      cld
      repnz scasb
      jz yes
      jmp disp 
yes: dec si
     mov al,[si]
     mov dl,'y'
disp:mov ah,2
     int 21h
     mov ah,4ch
     int 21h
code ends
end start

回复列表 (共6个回复)

沙发

mov ah,1
      int 21h
从键盘输入是用
mov ah,0ah
int 21h
命令吧

板凳

mov ah 1
int 21h

3 楼

data segment
mess db 'computer $'
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
      mov ds,ax
      mov es,ax    ;SCANS指令的被查找对象应该在ES:DI指向的位置
      lea di,mess
      mov cx,8
      mov ah,1
      int 21h
      cld
      repne scasb
      jz yes
      mov dl,'n'    ;没找到,显示‘n’
      jmp disp
yes: dec di
     mov dx,di
     add dl,30h     ;若找到,则显示位置,从0开始的
disp:mov ah,2
     int 21h
     mov ah,4ch
     int 21h
code ends
end start

4 楼

真是万分感谢[em2]

5 楼

不用客气

6 楼

3楼的好像不可以把,
   你讲的理论:"SCANS指令的被查找对象应该在ES:DI指向的位置"
是正确的,但不能编译运行!

data segment
mess db 'computer$'
data ends
printData segment
     IsIn db 'the char is in the string$'
     NotIn db 'the char is not in the string$'
printData ends
code segment
assume cs:code,es:data
start:mov ax,data
      mov es,ax
      mov ax,printData
      mov ds,ax
      
      lea di,mess
      mov cx,8
      mov ah,1
      int 21h
      cld
      repnz scasb
      jz yes
      jmp No 
yes: 
     
     
     mov dl,0dh
     mov ah,02h
     int 21h
     
     lea dx,IsIn
     mov ah,09h
     int 21h
     
     mov dx,di   ;用于显示在地址几个位子 
     add dl,30h        
     
     jmp disp
No:  
     mov dl,0dh
     mov ah,02h
     int 21h
     
     lea dx,NotIn
     mov ah,09h
     int 21h
             

disp:
     
     mov ah,2
     int 21h
     mov ah,4ch
     int 21h
code ends
end start

运行过了且通过运行了

我来回复

您尚未登录,请登录后再回复。点此登录或注册