汇编语言 实现在输入的字符串中查找目的字符的位置

用汇编程序实现下列功能

Please input a string(length<9): ABCDEFG
Please input a char:B
The index is: 1
Please input a string(length<9): ABCDEFG
Please input a char:]
The char is invalid!

data segment
   s1 db 'Please input a string(length<9):$'
   s2 db 0ah,0dh,'Please input the index of the char to display:$'
   s3 db 0ah,0dh,'The char is:$'
   s4 db 0ah,0dh,'The index is invalid!$'
   buf db 10,?,10 dup(?)
   index db ?
data ends
code segment
    assume cs:code,ds:data
start: 
    mov ax,data
    mov ds,ax
    
    lea dx,s1
    mov ah,09h   ;显示字符串 ds:dx=串地址 '$'结束字符串
    int 21h
    
    lea dx,buf
    mov ah,0ah  ; ds:dx = 缓冲区首地址; (ds:dx)=缓冲区最大字符数
    int 21h     ; 返回参数:(ds:dx+1)=实际输入的字符数
        
    lea bx,buf
    inc bx
    mov cl,[bx] ;cl存储字符串长度
    
    lea dx,s2
    mov ah,09h   ;显示字符串 ds:dx=串地址 '$'结束字符串
    int 21h
    
    mov ah,01h
    int 21h
    sub al,30h
    mov index,al
    
    cmp cl,al
    jng error  ;cl不大于al时跳转,实际是al < cl 才合法  jng 等价于 JLE
    
    lea dx,s3
    mov ah,09h   ;显示字符串 ds:dx=串地址 '$'结束字符串
    int 21h
    
    mov bl,index 
    mov bh,0
    mov dl,buf[bx+1] ;bx+1此时指向字符串第一个字符,所以[bx+1]就是所求位号
    mov ah,02h  ; 显示输出 dl = 输出字符
    int 21h
    
    mov ax,4c00h
    int 21h

error:
    lea dx,s4
      mov ah,09h   ;显示字符串 ds:dx=串地址 '$'结束字符串
    int 21h
    mov ax,4c00h
    int 21h

code ends
end start

参考一下呢

参考

汇编字符串查找_双木夕子飞的博客-CSDN博客 输入字符串和关键字然后查找,有相同的输出“Match!”,没有相同的输出“No Match”copy大佬的程序然后魔改的,希望大佬不要介意。汇编的 “;”是区别注释,;后面的全是注释使用时可以删除。DATAS SEGMENT;DATAS我感觉像一个结构体名,实际上是段名,SEGMENT是声明段此处可以参考 汇编segment伪指令_星河Dac-CSDN博客_汇编segment INPUT1 DB 13,10,'Please input a string:','$';DB定义操... https://blog.csdn.net/weixin_47655735/article/details/121480088?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166878564016782429765638%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166878564016782429765638&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-121480088-null-null.nonecase&utm_term=%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%20%E5%AE%9E%E7%8E%B0%E5%9C%A8%E8%BE%93%E5%85%A5%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E6%9F%A5%E6%89%BE%E7%9B%AE%E7%9A%84%E5%AD%97%E7%AC%A6%E7%9A%84%E4%BD%8D%E7%BD%AE&spm=1018.2226.3001.4450