汇编语言:输出最长字符串(子程序设计)

目的:

从键盘上输入一行字符,如果这行字符比前一次输入的一行字符长度长,则保存该行字符,然后继续输入另一行字符;如果它比前一次输入的行短,则不保存这行字符。按下‘$’输入结束,最后将最长的一行字符显示出来。

设计思路:

设计子函数compare用于每次输入后缓冲区与存储器字符串作比较。若缓冲区字符串长度不大于存储区中字符串长度,则提前退出函数,若是大于,则利用cld、rep movsb语句,利用es:di与ds:si进行字符转移。

程序代码:

assume cs:code,ds:data,es:data   ;es、ds同时和data绑定用于数据传送

data segment
    string db  0                       ;存放字符的个数
        db 80 dup(?),0dh,0ah,'$'   ;存放前一次输入的字符串,兼作显示缓冲区
    buffer db 80                     ;输入字符串的缓冲区,最多输入80个字符
        db ?
        db 80 dup(?)
data ends

code segment
main proc far:
start:
    mov ax,data
    mov ds,ax
    mov es,ax
loopc:
    mov dl,0dh
    mov ah,02h
    int 21h
    mov dl,0ah
    int 21h
    lea dx,buffer
    mov ah,0ah
    int 21h
    mov al,buffer[2]
    cmp al,'$'
    jz print
    call compare
    jmp loopc
print:
    lea dx,string[1]
    mov ah,09h
    int 21h
    mov ax,4c00h
    int 21h
main endp

compare proc near:
    mov al,buffer[1]
    cmp al,string
    jbe exit               ;缓冲区字符串长度不大于string的长度,则跳过
    mov string,al      
    lea si,buffer[2]   ;字符传递
    lea di,string[1]
    mov cl,buffer[1]         ;此处用cx做循环计数由于类型不匹配,会出错
    sub ch,ch
    cld                      ;si,di递增
    rep movsb          ;字节传送
  exit:
    ret
compare endp
code ends
	end start

运行结果

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值