功能:任意输入一个字符串,去掉其中的空格后反序输出
注:使用 int 21h 里的 0AH 功能 输入一个字符串时,字符串的第一个字节存储的是字符串的最大长度,第二个字节存储的是实际读入字符的个数
编译器使用的是MASMPlus
;#Mode = DOS MAXLEN = 64 ;设置字符串的最大长度 SPACE = ‘ ‘ ;空格 datasg segment buffer db MAXLEN+1,0,MAXLEN+1 dup(0) ;字符串输入缓冲区 string db MAXLEN+3 dup(0) ;字符串反序后的结果 datasg ends assume cs:codesg,ds:datasg codesg segment start: ;ds:dx指向输入缓冲区首址 mov ax,datasg mov ds,ax mov dx,offset buffer ;输入字符串 mov ah,10 int 21h ;判断字符串长度是否为0 xor ch,ch mov cl, buffer[1] ;cl为字符串长度 jcxz ok ;长度为0则结束 ;长度不为0 mov si,offset buffer xor bh,bh add bl,buffer[1] add si,bx inc si ;设置ds:si指向字符串末尾 mov ax,datasg mov es,ax mov di,offset string ;设置es:di指向翻转字符串首地址 ;翻转字符串 xor ah,ah mov al,SPACE ok1: cmp al,BYTE ptr [si] jz ok2 ;去掉空格 mov bl,BYTE ptr [si] mov BYTE ptr [di],bl inc di ok2: dec si loop ok1 ;计算字符串长度 mov cx,di sub cx,offset string ;---------------------------------------------------自定义输出-------------------------------------------------------- ;ds:si 指向源地址 mov ax,datasg mov ds,ax mov si,offset string ;es:di 指向目的地址 mov ax,0b800h mov es,ax mov di,160*5+2*10 ;设置显示的位置 ;输出 mov bh,02h ;设置显示字体的属性 next: mov bl,BYTE ptr ds:[si] mov BYTE ptr es:[di],bl inc di mov BYTE ptr es:[di],bh inc si inc di loop next ;---------------------------------------------------自定义输出-------------------------------------------------------- ; 输出翻转后的字符串 ; mov BYTE ptr [di],‘$‘ ; mov dx,offset string ; mov ah,09h ; int 21h s: jmp s ;死循环,防止一闪而过,看不到结果 ;程序结束 ok: mov ax,4c00h int 21h codesg ends end start
(练手备忘)汇编实现将输入的字符串中的空格去掉后反序输出,布布扣,bubuko.com
时间: 2024-10-05 05:11:58