用SI 和 DI实现字符串的复制

用si和di实现将字符串’welcome to masm!'复制到它后面的数据区中。
在这里插入图片描述

;用si和di实现将字符串'welcome to masm!'复制到它后面的数据区中。
assume cs:code,ds:data
data segment
	db 'welcome to masm!'
	db '................'
data ends

code segment
	start:
		mov ax,data
		mov ds,ax
		
		mov si,0
		mov di,16 ;设置两个偏移地址寄存器  或mov di,10H
		
		mov cx,8;可以用字型数据来复制,所以可以设cx=8,循环八次

	copystring:
		mov ax,ds:[si]
		mov ds:[di],ax
		add si,2
		add di,2
		loop copystring


		mov ax,4c00h
		int 21h
code ends
end
	

注意,在程序中十六位寄存器进行内存之间的数据传送,一次复制两个字节,共循环八次。

si和di和bx功能相同,si和di不能分为两个八位寄存器来使用

优化:可以不需要di了,因为观他们 的关系差的是16,用mov ds:[si+16],ax即可
在这里插入图片描述
也可以通过设置栈:
在这里插入图片描述

;用si和di实现将字符串'welcome to masm!'复制到它后面的数据区中。
assume cs:code,ds:data
data segment
	db 'welcome to masm!'
	db '................'
data ends

stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0

stack ends

code segment
	start:
		mov ax,stack
		mov ss,ax
		mov sp,32

		mov ax,data
		mov ds,ax
		
		mov si,0		
		mov cx,8;可以用字型数据来复制,所以可以设cx=8,循环八次

	copystring:
		push ds:[si] ;通过push pop
		pop ds:[si+16]
		add si,2 
		loop copystring

		mov ax,4c00h
		int 21h
code ends
end

逻辑更清晰的写法:
在这里插入图片描述
或者:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值