高分!紧急!汇编 输入字符串,去空格后反向输出

作者&投稿:运卸 (若有异议请与网页底部的电邮联系)
汇编菜鸟急求字符串反向输出程序!~

;屏幕能够控制有提示信息
.model small
.386
.stack 400h
.data
input db 'Please input the string:','$'
shuchu db 'The result is:','$'
buffer db 50, 0, 50 dup(?) ;定义了50个字符
;宏定义
screencontrol macro do ;进行屏幕的控制
mov ah,2 ;置光标
mov bh,0
mov dl,12 ;列号,可以自己修改
int 10h ;BIOS调用
lea dx,do
mov ah,9 ;显示字符串
int 21h
endm
.CODE
START:
mov ax,@data
mov ds,ax
mov es,ax
mov dh,7 ;置行号,可以自己修改
screencontrol input
lea si,buffer
mov dx,si
mov ah,0ah
int 21h
mov dh,9 ;置行号,可以自己修改
screencontrol shuchu
mov bx,[si+1]
and bx,000ffh
mov cx,bx
ok: mov dx,[si+bx+1]
mov ah,2
int 21h
dec bx
loop ok
mov ah,1 ;暂停,任意键关闭
int 21h
mov ah,4ch
int 21h
END START

#include #include int main(){char s[100]={'\0'};int i=0,j=0;scanf("%[^
]",s);printf("
源字符串:%s",s);while(s[i]!='\0'){if(s[i]!=' '){s[j++]=s[i];}i++;}s[j]='\0';printf("
新字符串:%s",s);return 0;}

我运行的没有错啊,

例如输入abcd   efg,中间有3个空格,它会输出gfedcba

修改后的代码全给你了,就算有错应该不是nospace的吧。

;输入字符串去空格后反向输出的程序

.model small

.386

DATA SEGMENT

 

 buf db 100, 0 ,100 DUP (0)

 msg1 db 'Please input a string: ',0DH,0Ah,'$'

 crlf db 0Dh,0Ah,'$'

 leng db 0

DATA ENDS

STACK SEGMENT

 

 DB 64 DUP (?)

STACK ENDS

CODE SEGMENT

 

 assume cs:CODE,ds:DATA,es:DATA,ss:STACK

START:

 mov ax,DATA

 mov ds,ax

 mov es,ax

 

 lea dx,msg1 ;输出提示文字

 mov ah,09h

 int 21h

 

 lea dx,buf 

 mov ah,0ah ;接受字符串

 int 21h;

 

 mov dx,offset crlf

 mov ah,09h ;输出字符串中断

 int 21h

 

 call count

 

 call nospace;把这行去掉之后是可以实现反向输出的,当然不能 去空格

 

 lea dx,buf

 mov bl,leng;新字符串长度送到bl

 mov bh,00h

 cmp bx,0000h

 jnz L1

 jz EXIT

 

L1:

 mov dl,buf+1[bx] ;把最后一位送到dl

 mov ah,02h ;输出一个字符中断

 int 21h

 dec bx ;倒着输出字符

 jnz l1

 

EXIT:

 mov AH,4CH

 int 21H

count: 

 xor dx,dx

 xor cx,cx

 lea di,buf

 push di

 mov al,0

lop: 

 cmp al,[di]

 je done

 inc dl

 inc di

 loop lop

done: 

 mov leng,dl;把数组长度存至leng

 pop di

 ret

nospace:

 push si

 push di

 push ax

 push bx

 push cx

 

 lea si,buf

 add si,2  ;读指针si

 mov di,si  ;写指针di

 xor ch,ch

 mov cl,[si-1] ;字符数组长度

 cld

 xor bl,bl  ;新的字符长度

L2:

 lodsb   ;读取字符

 cmp al,' '

 je L3   ;如果是空格,跳过保存操作

 stosb   ;保存字符

 inc bl   ;记录长度

L3:

 loop L2 

 mov leng,bl

 

 pop cx

 pop bx

 pop ax

 pop di

 pop si

 ret

CODE ENDS

END START



建议直接到相关的专业网站去咨询吧,这里关注的较少。

;符合题目要求
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START:
push cs
pop ds
mov dx,offset message
mov ah,9 ;提示
int 21h
mov dx,offset buffer
mov ah,0ah ;接收一个字符串
int 21h
mov ax,0e0dh
int 10h
mov al,0ah
int 10h
mov ax,buffer
mov cl,ah
mov ch,0
jcxz quit
xor bp,bp
mov cx,cx
mov si,offset string
mov ah,0eh
nx1: lodsb
cmp al,20h ;抽去其中的空格
jz skip
push ax
inc bp
skip:
loop nx1
mov cx,bp
nx2:
pop ax
int 10h ;按相反的顺序显示
loop nx2
quit:
mov ah,7
int 21h
mov ah,4ch
int 21h

message db 13,10,9,'Input a string: $'
buffer db 255,0
string db 255 dup (0)
CODE ENDS
END START

自己加一个专业的群问一下 那里有很多高手可以给你解答


铜川市19289794883: 跪求:用汇编语言写 输入一个字符串,以回车符结束,并去掉其内的空格,然后输出. 万分感谢!!!
雀恒宁通: data segment inf1 db 0dh,0ah,'input string: $' inf2 db 0dh,0ah,'the string without space: $' buf1 db 81 db ? db 100 dup(0) buf2 db 100 dup(0) data ends stack segment stack db 100 dup(0) stack ends code segment assume ds:data,ss:stack,cs:code ...

铜川市19289794883: 汇编语言编写,从键盘输入一个字符串,删除其中的空格,删除前和删除后的字符串都显示 -
雀恒宁通: ;消空 code segmentassume cs:codeorg 100h start:jmp bbb str1 db 254 dup(' ') str2 db 254 dup(' ') num db ? msg1 db 10,13,'please input string:','$' lfcr db 10,13,'$'bbb:push cspop dslea dx,msg1mov ah,9int 21h MOV cx,0lea di,str1 ...

铜川市19289794883: 写一个汇编程序,它先接收一个字符串,然后抽去其中的空格,最后按相反的顺序显示这个改变后的字符串. -
雀恒宁通: 用循环的方式将字符串的每个字符放入一个集合中 删除集合中所有空的元素 用循环的方式将字符串的每个字符倒向输出就OK拉.

铜川市19289794883: 80x86汇编语言剔除字符串中的空格 -
雀恒宁通: code segment assume cs:code,ds:code org 100h ;COM格式 start: push cs pop ds push cs pop es lea dx,Tips ;显示提示 mov ah,9 int 21h cld lea si,Tips mov di,si mov cx,Count Q0:lodsb cmp al,20h ;剔除符串中的空格 jz Q1 stosb Q1:loop Q0 mov...

铜川市19289794883: 现有一个以“$”结尾的字符串,编写程序完成剔除字符串中的空格字符.
雀恒宁通: .data string db 'Let us have a try !','$' .code .startup mov dx,offset string mov ah,9 int 21h ;显示原字符串 mov al,' ' ;AL← 空格( ASCII码为 20H) mov di,offset string outlp:cmp byte ptr [di],'$';外循环,先判断后循环 jz done ;为 $结...

铜川市19289794883: c语言编写,输入字符串,删除字符串中所有空格并输出 -
雀恒宁通: #include int main () { int i,i1; char a[100]; gets(a); for (i=0;a[i]!='\0';i++) if (a[i]==' ') for (i1=i;a[i1]!='\0';i1++) a[i1]=a[i1+1]; for (i=0;a[i]!='\0';i++) printf ("%c",a[i]); putchar ('\n'); return 0; }

铜川市19289794883: 编写程序,任意输入一个字符串(字符数小于100),输入一个字符,然后去掉字符串中的该字符 -
雀恒宁通: #include <stdio.h> int main(int argc,char *argv[]){char s[101],i,j,k;gets(s);scanf(" %c",&k);j=i=0;while(s[j++]=s[i++])if(s[j-1]==k)j--;puts(s);return 0; }

铜川市19289794883: 急!!C语言简单编程:“将从键盘输入的字符直接显示到终端,并去掉其中所有空白字符.”一定要能运行的. -
雀恒宁通: #include "stdio.h" #define MAX 100 int main() {char a[MAX]="";char b;int i=0;printf("请输入字符串,最大长度100,以#结束:");while(1){scanf("%c",&b);if(b!=' ') //输入的不是空格,就放到输出缓存a[]中a[i++]=b;if((b=='#'...

铜川市19289794883: 汇编实验用INT21 0AH输入字符串,再通过INT21H 09H输出,输出为空 -
雀恒宁通: .DATAN EQU 20MAXLEN DB N ;缓冲区最大长度 ACTLEN DB ? ;缓冲区实际字符个数 STRING DB N DUP('$') ;N个字符空间 CR DB 0AH,0DH,'$' .CODE START: MOV AX,@DATAMOV DS,AXMOV AH, 0AHLEA DX,STRING; 缓冲区...

铜川市19289794883: c语言中,怎么忽略输入字符串中的空格符. -
雀恒宁通: 字符串输入可以用scanf函数和gets函数.scanf函数是当输入的数据遇到空格就停止.比如输入数据kkkkkk ssssss sssaa11.用scanf("%s",str);得到的str为"kkkkkk",而空格后面的东西不会赋值给str.而使用gets(str);得到的str为kkkkkk ssssss sssaa11.gets函数是将一整行包括空格都赋值给str.对于你给的例子.main里面的代码为: main() { char str[10]; gets(str); puts(str); return(0); } 输出结果就是a b c.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网