X86汇编学习笔记P3--串操作

本文详细介绍了如何使用X86汇编语言进行串操作,包括字符串拷贝、查找与替换、大小写转换及字典序排序。通过实例展示了如何实现strcpy、查找替换、大小写转换函数,并探讨了冒泡排序应用于字符串排序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面已经通过动手实现冒泡排序和大数乘法熟悉了X86的基本编程,此次作业则完成串处理相关操作。

本次主要实现四个程序:拷贝字符串、字符串的查找与替换、字符串的大小写转换、字符串的字典序排序

一、字符串拷贝

程序实现的功能是实现strcpy函数,我们很容易能够使用高级语言实现,用汇编则比较繁复。

我们使用LODSB    STOSB命令来完成字符串的拷贝,同高级语言,我们仍然要考虑字符串重叠的问题,那么

就必须判别字符串首部的位置:

SI    >    DI,则正向复制,其他情况则反向复制

明确了这个,就很容易完成以下代码:

STACK 			SEGMENT		PARA		STACK
STACK_AREA		DW			100H DUP(?)
STACK_BTM		EQU			$ - STACK_AREA
STACK 			ENDS

DATA			SEGMENT		PARA
DRC1			DB			2 DUP(0)
SRC			DB			'TEST STRING',00H
SRC_LEN			EQU			$ - SRC
DRC2			DB			'DRC2'
			DB			10H DUP(0)
CPY_LEN			EQU			SRC_LEN					;此处设置拷贝字符串长度
DATA			ENDS

CODE			SEGMENT		PARA
			ASSUME		DS:DATA,CS:DATA,SS:STACK,ES:DATA 


MAIN			PROC		FAR
				MOV			AX,DATA				;INIT
				MOV			DS,AX
				MOV			ES,AX
								
				CALL		DISP_STR
				MOV			SI,OFFSET	SRC 
				MOV			DI,OFFSET	DRC2
				MOV			CX,CPY_LEN

				CALL		STRCPY1

				CALL		DISP_STR		

EXIT:			MOV			AX,4C00H
				INT			21H

MAIN			ENDP

STRCPY1			PROC

				MOV			AX,CPY_LEN
				CMP			AX,0
				JZ			STR1_END
				
				CMP			SI,DI
				JA			STR1_CLD			;SI > DI 正向复制			
STR1_STD:		STD		
				XOR			AX,AX
				ADD			AX,CPY_LEN
				DEC			AX
				ADD			SI,AX
				ADD			DI,AX

				JMP			STR1_LP1
STR1_CLD:		CLD
STR1_LP1:		LODSB							
				STOSB
				LOOP		STR1_LP1
STR1_END:		RET
STRCPY1			ENDP



DISP_STR		PROC								;DOS中显示目的字符串
				PUSH		SI 
				PUSH		DX
				MOV			SI,OFFSET DRC2			;目的字符串
				CLD
DISP1:			LODSB
				CMP			AL,0
				JZ			DISP_EXIT
				MOV			DL,AL
				MOV			AH,2
				INT 		21H
				JMP			SHORT	DISP1
DISP_EXIT:		MOV			DL,0DH
				MOV			AH,2
				INT 		21H
				MOV			DL,0AH
				INT 		21H

			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值