(练手备忘)汇编实现将输入的字符串中的空格去掉后反序输出

来源:互联网 发布:身份证被盗用开淘宝店 编辑:程序博客网 时间:2024/05/16 03:23

功能:任意输入一个字符串,去掉其中的空格后反序输出


注:使用 int 21h 里的 0AH 功能 输入一个字符串时,字符串的第一个字节存储的是字符串的最大长度,第二个字节存储的是实际读入字符的个数

编译器使用的是MASMPlus

;#Mode = DOSMAXLEN = 64    ;设置字符串的最大长度SPACE  = ' '   ;空格datasg segmentbuffer db MAXLEN+1,0,MAXLEN+1 dup(0)   ;字符串输入缓冲区string db MAXLEN+3 dup(0)              ;字符串反序后的结果datasg endsassume cs:codesg,ds:datasgcodesg segmentstart: ;ds:dx指向输入缓冲区首址mov ax,datasgmov ds,axmov dx,offset buffer;输入字符串mov ah,10int 21h;判断字符串长度是否为0xor ch,chmov cl, buffer[1]     ;cl为字符串长度jcxz ok  ;长度为0则结束;长度不为0mov si,offset buffer       xor bh,bhadd bl,buffer[1]add si,bx                                      inc si                        ;设置ds:si指向字符串末尾  mov ax,datasgmov es,axmov di,offset string          ;设置es:di指向翻转字符串首地址;翻转字符串xor ah,ahmov al,SPACEok1:cmp al,BYTE ptr [si]jz ok2                        ;去掉空格mov bl,BYTE ptr [si]mov BYTE ptr [di],blinc diok2:dec siloop ok1;计算字符串长度mov cx,disub cx,offset string;---------------------------------------------------自定义输出--------------------------------------------------------;ds:si 指向源地址mov ax,datasgmov ds,axmov si,offset string;es:di 指向目的地址mov ax,0b800hmov es,axmov di,160*5+2*10   ;设置显示的位置;输出   mov bh,02h    ;设置显示字体的属性next:mov bl,BYTE ptr ds:[si]mov BYTE  ptr es:[di],blinc dimov BYTE ptr es:[di],bhinc siinc diloop next;---------------------------------------------------自定义输出--------------------------------------------------------;  输出翻转后的字符串;mov BYTE ptr [di],'$';mov dx,offset string;mov ah,09h;int 21hs: jmp s                         ;死循环,防止一闪而过,看不到结果;程序结束ok:mov ax,4c00hint 21hcodesg endsend start


4 0