汇编语言 输入一串字符到缓冲区,输出输入的字符串,并输出统计字符串的字符个数,还有输出字符串最后一个字符

题目:从键盘输入一串字符串到缓冲区,要求第一行输出输入的字符串,第二行输出字符串的长度,第三行输出字符串的最后一个字符。

data segment    
    str1 db 0dh,0ah,'input:','$';    
    str2 db 0dh,0ah,'the number of string is:','$'
    str3 db 0dh,0ah,'the last letter is:','$'
    length db 0; 
    buf db 30;
        db 0;
        db 30 dup(24h);
data ends   

code segment
    assume cs:code,ds:data
start:mov ax,data;
      mov ds,ax;  
      
      lea dx,buf;  输入字符串到缓冲区
      mov ah,0ah;
      int 21h;   
      
      lea dx,str1; 输出输入提示input:
      mov ah,09h;
      int 21h;
      
      lea dx,buf+2;  输出缓冲区的字符串
      mov ah,09h;
      int 21h;  
      
      lea dx,str2; 输出输入提示the number of string is:
      mov ah,09h;
      int 21h; 
      
      lea si,buf+1; 
      mov dl,[si];     输出字符串长度 
      mov length,dl;     输出字符串长度 
      CALL PRINT          ;调用子程序 
      
      mov cl,length;
      xor ch,ch;    

      lea dx,str3; 输出输入提示the last letter is:
      mov ah,09h;
      int 21h;
               
      lea si,buf+2;   获取字符串的首地址
      
x:    mov dl,[si];   取字符串里指针指向的字符
      inc si;       指针加一
      loop x;       根据CX判断是否循环
      
      mov ah,02h;
      int 21h;
      
done:mov ah,4ch;
      int 21h;
;子程序输出
PRINT PROC NEAR 
    MOV DL,[SI]
    MOV CX,1   ;计数,初始值为1
    MOV BL,10   ;每次除10
    
FIRST:
    MOV AH,0   ;余数清零
    MOV AL,DL
    DIV BL     ;10
    PUSH AX    ;进栈,其中AH为余数,AL为商
    CMP AL,0   ;比较商是否为0
    JLE SECOND
    MOV DL,AL
    INC CX
    JMP FIRST
    
SECOND:
    POP DX      ;出栈,其中DH为余数,DL为商
    XCHG DH,DL  ;交换DH,DL,使余数存入DL
    ADD DL,30H  ;转为ASCII码
    MOV AH,02H
    INT 21H
    LOOP SECOND   
    RET  
    
code ends
end start

在这里插入图片描述

  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值