从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串;查找中间是否含有‘masm’子串。如果有,输出‘Yes’;否则。输出‘No’。

作者在 2021-11-24 19:05:11 发布以下内容
DATAS SEGMENT
    ;此处输入数据段代码 
    input1 db "please input a string:$"
 buf db 200
 db ?
 db 200 dup(?)
 input2 db 0ah,0dh,'$'
 same    db  'Yes','$'
 nsame db 'No','$'
 
DATAS ENDS


ext segment  ;masm
string db 'masm$'
ext ends


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


CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    mov ax,ext
    mov es,ax
    
    lea dx,input1  ;输出提示
    mov ah,09h
    int 21h
    lea dx,input2
    mov ah,09h
    int 21h
    
    mov ah,0ah  ;输入字符串
    lea dx,buf
   int 21h
   lea dx,input2 ;换行
    mov ah,09h
    int 21h
    
    cld;方向标志位清零


 mov al,0
 mov bx,0     ;bX存放输入字符串已经搜索过的字符个数 
    lea si,buf+2  ;si放置实际输入字符串首地址
 mov cl,buf+1  ;cl中放置实际输入字符串长度 
   
    lea dx,same  ;将‘yes’送入dx
L0: 
 lea di,string ;di中放masm 的第一个字符偏移地址
L3: mov al,[si]
 scasb ;将第二个字符串中的字符与第一个字符串中的一个字符进行比较
    jz next
    mov bh,0
    call mbingo
    inc si ;指向输入字符串的下一个字符 如果错的字是m要另外算
    
L5: inc bl ;记下输入字符串已经被搜索的字符
    cmp cl,bl
    jnz L0 ;bx!=字符数量,输入字符下一字符与masm中字符比较;bx=4,输出no
    
    lea dx,nsame ;输出no
    mov ah,09h
 INT 21H
 jmp L1 ;结束
   
   
next:
 inc bh   ;记下对的字符数量
 cmp bh,4 ;判断是否已经满足4个也就是masm
 jge L2   ;如果
 inc si
 jmp L3


mbingo proc ;如果第一个不符合条件的是字符m 
 cmp al,'m' 
 je L5   ;直接跳过inc si ;si依旧指向m
 ret
mbingo endp


L2:
 mov ah,09h
 INT 21H
 
L1:
 mov ah,1
 int 21h
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START


汇编语言 | 阅读 2366 次
文章评论,共2条
风卷浪起
2021-11-24 21:50
1
这是哪种编程?
张珂珂(作者)
2021-12-20 00:14
2
以下是引用风卷浪起在2021-11-24 21:50的发言1
这是哪种编程?
汇编
游客请输入验证码
浏览23338次
最新评论