用emu8086编写程序,求一字符串的长度,并要求滤去第一个非空格之前的所有空格。字符串以"#"结束
时间: 2024-02-12 13:08:03 浏览: 100
好的,我来回答你的问题。
以下是用emu8086汇编语言编写的程序,可以求一个字符串的长度,并过滤掉第一个非空格之前的所有空格。字符串以"#"结束。
```
ORG 100h
MOV CX, 0 ; CX用来计数,初始值为0
MOV DL, ' ' ; DL用来存储当前读取的字符,初始值为空格
READ_LOOP:
MOV AH, 01h ; 读取一个字符
INT 21h ; 存储在AL中
CMP AL, '#' ; 判断是否为字符串结束符
JE END_READ
CMP DL, ' ' ; 判断上一个字符是否为空格
JE FILTER_SPACE
INC CX ; 字符长度计数器加1
MOV DL, AL ; 存储当前读取的字符
JMP READ_LOOP
FILTER_SPACE:
CMP AL, ' ' ; 判断当前读取的字符是否为空格
JE READ_LOOP ; 如果是,则继续读取下一个字符
MOV DL, AL ; 如果不是,则存储当前读取的字符
INC CX ; 字符长度计数器加1
JMP READ_LOOP
END_READ:
; 此时CX中存储的即为字符串的长度(不包括'#')
; 如果需要输出长度,可以调用INT 21h功能号02h
HLT
```
程序逻辑如下:
1. 初始化计数器CX和上一个字符DL为0和空格。
2. 进入读取字符的循环:读取一个字符,判断是否为字符串结束符(#)。
3. 如果上一个字符为非空格,直接将当前字符计入长度,并存储为上一个字符。
4. 如果上一个字符为空格,判断当前字符是否为空格。如果不是,则将当前字符计入长度,并存储为上一个字符;如果是,则忽略该字符,继续读取下一个字符。
5. 重复步骤2。
6. 循环结束后,CX中存储的即为字符串的长度(不包括'#')。
希望这个程序对你有所帮助!
阅读全文
相关推荐












