汇编语言_串处理例子

题目

	将数据段中的字符串string1传送到附加段string2中

设计思路

    1.分别定义数据段和附加段
    2.用si保存原串string1的偏移地址  用di保存目的串便宜地址 ,传送个数由cx指出
    3.用CLD指令将方向标志DF清0,以便从低地址开始取数,依次递增,取下一个数
    4.用REP MOVSB指令实现穿传送

串处理指令

串传送

格式

movs dst,src
dst<-src
movsb
movsw
(mov byte ptr es:[di],ds:[si])

格式要求

1.原串的偏移地址由si指出 目的串偏移地址由di指出
2.rep 前缀功能:重复串操作直到 cx=cx-1=0
3.串传送方向由方向标志DF指出
DF=0 si,di自动加一
DF=1 si,di自动减一
CLD 使DF=0
STD使DF=1

串比较

格式

CMPS DST,SRC
CMPSB
CMPSW
执行的操作:分别从dst和src中取字节(字)数据进行相减,结果不回送,改变标志位

格式要求

1.原串的偏移地址由si指出 目的串偏移地址由di指出
比较次数 cx指出
和重复前缀 repz/repe或repnz/repne连用
repz cx不为0或是结果不相等 结束重复
repnz cx不为0或是结果相等结束操作

串扫描

格式

scas dst //目的操作数
scasb
scasw
在目的串中找出与AL,AX中相同(不相同)的字节或字,结果不保存,改变标志位

格式要求

目的串在es中用di指出
扫描次数由cx指出
没扫描一次
di自动增或减
cx-1
和重复前缀REPZ/REPE 或 REPNZ/REPXE连用

串获取

格式

LODS SRC
LODSB
LODSW

功能

从原串取出一字节,放入AL或AX中

格式要求

1.原串在数据段定义,偏移地址由si指出
2.与REP连用,连续取出字节或字,取出次数cx

串存入

格式

STO DST
STOSB
STOSW

功能

讲AL或AX中的内容存入DST中

格式要求

1.原串在附加段定义,偏移地址由di指出
2.与REP连用,连续存入字节或字,存入次数cx

代码

将str1中的东西传到str2中

data segment
str1 db '1234567890'
data ends
//数据段定义

extra segment
str2 db 10 dup(?)
extra ends
//附加段定义

code segment
assume cs:code,es:extra,ds:data //将各段与其名称连接
start:
mov ax,data
mov ds,ax//将data地址传到ds中
mov ax,extra
mov es,ax//将extra地址传到ds中
lea si,str1
lea di,str2//将str1和str2偏移地址分别传到si,di中
cld  //方向标志清0
mov cx,10
rep movsb //以字节的形式重复cx次
mov ah,4ch
int 21h
code ends
end start

比较两个字符串

data segment
bunch1 db 'student'
bunch2 db 'stuDent'
data ends

code segment
assume cs:code,ds:data,es:data
mov ax,data
mov ds,ax
mov es,ax
lea si,bunch1
lea di,bunch2
cld
mov cx bunch2-bunch1
rep cmpsb
jz let1
mov dl,'N'
jmp print
let1:
mov dl,'Y'
print:
mov ah,2
int 21h//输出dl中的数据
mov ah,4ch
int 21h
code ends
end start

在字数组value中查找-1,并保存在addr1单元

extra segment
value dw 1,0,3,5,-1,7
addr1 dw ?
extra ends

code segment
assume cs:code,es:extra
start:
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax
mov ax,-1
lea di,value
cld
mov cx,addr1-value
sar cx,1
repnz scasw
sub di,2
mov addr1,di
mov ah,4ch
int 21h
code ends
end start
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值