汇编语言实现:从source(DS)开始有一个数据串,共100个字节,从该数据串中查找所有字符“!”并替换为“.”.若有,把搜索到的次数放在count单元中,每一个所在的地址放在adress后面的单元中。
时间: 2024-05-08 22:17:20 浏览: 110
以下是汇编语言实现代码:
```
DATA SEGMENT
source DB 100 DUP('$')
count DW ?
address DW 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV CX, 100
MOV SI, 0
MOV DI, 0
MOV BX, 0
SEARCH_LOOP:
CMP SI, CX
JE END_SEARCH
MOV AL, source[SI]
CMP AL, '!'
JE REPLACE
INC SI
JMP SEARCH_LOOP
REPLACE:
MOV source[SI], '.'
INC BX
MOV address[DI], SI
INC DI
INC SI
JMP SEARCH_LOOP
END_SEARCH:
MOV count, BX
MOV AH, 4CH
INT 21H
CODE ENDS
END START
```
解释:
- 第1行到第7行定义了数据段,其中source是存储数据串的数组,count是存储搜索到的次数的单元,address是存储搜索到的地址的数组。
- 第9行到第10行定义了代码段。
- 第12行到第14行是将数据段和代码段分别赋值给DS和CS寄存器。
- 第16行到第17行是程序的入口点。
- 第19行到第20行是将数据段的地址存储到AX寄存器中,并将DS寄存器的值设置为AX寄存器中的值。
- 第22行到第23行是将100存储到CX寄存器中,并将SI和DI寄存器的值设置为0,将BX寄存器的值设置为0。
- 第25行到第32行是搜索循环,首先比较SI和CX的值,如果相等则跳到END_SEARCH标签,否则将source[SI]中的值存储到AL寄存器中,比较AL和'!'的值,如果相等则跳到REPLACE标签,否则将SI寄存器的值加1,继续搜索。
- 第34行到第43行是替换循环,首先将source[SI]中的值替换为'.',将BX寄存器的值加1,将SI寄存器的值加1,将SI寄存器的值存储到address[DI]中,将DI寄存器的值加1,跳回SEARCH_LOOP标签,继续搜索。
- 第45行到第47行是搜索结束标签,将BX寄存器的值存储到count单元中。
- 第49行到第51行是程序结束标签,将4CH存储到AH寄存器中,调用21H中断,结束程序。
注意:以上代码仅供参考,实际使用时可能需要根据具体情况进行修改。
阅读全文