汇编编写程序段,实现(1)将长度为10的字符串string1内容复制到字符串string2
时间: 2023-11-27 09:55:29 浏览: 170
假设string1和string2已经在数据段中定义好了,可以使用MOV指令逐个字符地将string1复制到string2中。具体的汇编代码如下:
```
MOV CX, 10 ; CX寄存器用来计数,循环10次
MOV SI, OFFSET string1 ; 将string1的偏移地址存入SI寄存器
MOV DI, OFFSET string2 ; 将string2的偏移地址存入DI寄存器
COPY_LOOP:
MOV AL, [SI] ; 将SI指向的string1中的字符读入AL寄存器
MOV [DI], AL ; 将AL寄存器中的字符写入到DI指向的string2中
INC SI ; 指向下一个字符
INC DI ; 指向下一个字符
LOOP COPY_LOOP ; 循环10次
```
这段代码中,CX寄存器用来计数循环次数,SI和DI分别指向string1和string2中的字符,AL寄存器用来临时存储读取到的字符。每次循环,将SI指向的字符读入AL寄存器,再将AL寄存器中的字符写入到DI指向的字符中,并将SI和DI分别指向下一个字符。循环10次后,即完成了字符串的复制。
相关问题
用汇编语言编写程序段,实现(1)将长度为10的字符串string1内容复制到string2中,(2)将字符串string3
(1)将长度为10的字符串string1内容复制到string2中
假设string1的首地址为s1,string2的首地址为s2,可以使用MOV指令将s1中的内容复制到s2中。
```
MOV CX, 10 ; CX寄存器存储字符串长度
MOV SI, s1 ; SI寄存器存储s1的首地址
MOV DI, s2 ; DI寄存器存储s2的首地址
LOOP_START:
MOV AL, [SI] ; 将s1中的字符存储到AL寄存器中
MOV [DI], AL ; 将AL寄存器中的字符存储到s2中
INC SI ; 指向s1的下一个字符
INC DI ; 指向s2的下一个字符
LOOP LOOP_START ; 循环复制剩余字符
```
(2)将字符串string3反转
假设string3的首地址为s3,可以使用MOV指令将s3中的字符反转。
```
MOV CX, 10 ; CX寄存器存储字符串长度
MOV SI, s3 ; SI寄存器存储s3的首地址
MOV DI, s3 ; DI寄存器存储s3的首地址
ADD SI, CX-1 ; 将SI指向s3的末尾字符
LOOP_START:
CMP SI, DI ; 判断是否完成反转
JLE END_LOOP
MOV AL, [SI] ; 将s3中的字符存储到AL寄存器中
MOV BL, [DI] ; 将s3中的字符存储到BL寄存器中
MOV [SI], BL ; 将BL寄存器中的字符存储到s3中
MOV [DI], AL ; 将AL寄存器中的字符存储到s3中
DEC SI ; 指向s3的前一个字符
INC DI ; 指向s3的下一个字符
JMP LOOP_START
END_LOOP:
```
汇编编写完整程序,从键盘输入一个字符串STRING,同时,把字符串STRING中的‘&’字符用空格符替代。并显示出替代后字符串及被替代字符的位置
'字符替换为‘#’,并将新字符串输出。
数据存放:
输入字符串:80H
输出字符串:90H
代码如下:
MOV AH, 0AH ;读入字符串
LEA DX, INPUT ;输入缓冲区地址
INT 21H
MOV BX, OFFSET INPUT+1 ;BX指向输入缓冲区第二个字节(跳过长度)
MOV CX, BYTE PTR [INPUT] ;CX存储输入字符串长度
MOV DI, OFFSET OUTPUT+1 ;DI指向输出缓冲区第一个字节
MOV DL, '#' ;要替换的字符
LOOP1:
MOV AL, [BX] ;读入一个字符
CMP AL, 13 ;判断是否为回车符
JE EXIT ;如果是回车符,退出循环
CMP AL, 10 ;判断是否为换行符
JE EXIT ;如果是换行符,退出循环
CMP AL, '\'' ;判断是否为单引号
JE REPLACE ;如果是单引号,执行替换操作
MOV [DI], AL ;将字符存入输出缓冲区
INC BX ;指向下一个字符
INC DI ;指向下一个位置
LOOP LOOP1 ;继续循环
REPLACE:
MOV [DI], DL ;替换为#
INC BX ;指向下一个字符
INC DI ;指向下一个位置
LOOP LOOP1 ;继续循环
EXIT:
MOV BYTE PTR [OUTPUT], DI-OFFSET OUTPUT-1 ;输出字符串长度
MOV AH, 09H ;输出字符串
LEA DX, OUTPUT ;输出缓冲区地址
INT 21H
MOV AH, 4CH ;退出程序
INT 21H
数据段:
INPUT DB 0AH, 00AH, 'Please enter a string: $'
DB 0DH, 0AH, '$'
OUTPUT DB 0AH, 00AH, 'The new string is: $'
DB 0DH, 0AH, '$'
DB 80 DUP ('$') ;输入缓冲区
DB 80 DUP ('$') ;输出缓冲区
程序说明:
1、通过INT 21H,AH=0AH来读入字符串。
2、用BX指向输入缓冲区第二个字节,跳过长度。
3、用CX存储输入字符串长度。
4、用DI指向输出缓冲区第一个字节。
5、用DL存储要替换的字符。
6、用一个循环读入输入字符串中的每个字符。
7、如果读入的字符是回车符或换行符,退出循环。
8、如果读入的字符是单引号,执行替换操作。
9、将读入的字符存入输出缓冲区。
10、继续循环,直到读入整个字符串。
11、替换操作:将DI指向的位置存入#,并将DI、BX分别指向下一个位置。
12、输出新字符串。
阅读全文