汇编串操作指令

首先有两个buf,存放两个字符串
让SI存buf1, DI存buf2
由于SI的段基址是DS, DI的段基址是ES
所以在比较字符串的时候,我们让ES和DS端重合即可
对于字符串的输入问题:
让AH = 0AH DX = 串首址

CLD:让DF为0,即字符串指针增加方向。然后让SI与DI朝DF的方向自增1个字节

STD:让DF为1, 即字符串指针减小方向。然后让SI与DI朝DF方向自减一个字节

1.使用串处理时(比如串比较),一定要写
MOV ES,AX;附加段与数据段为同一段

ES附加段寄存器,用于指出存放附加数据的附加段的段地址

2.CLD指令功能:
将标志寄存器Flag的方向标志位DF清零。
在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后。

3.串比较(影响标志位)
格式:CMPS DST,SRC
CMPSB
CMPSW

CMPS(Compare String):串比较 CMPS指令的语法格式为:
CMPSB
CMPSW
CMPSD 功能: DS:[SI] - ES:[DI]; if(DF=0) then
SI=SI+size;
DI=DI+size; else
SI=SI-size;
DI=DI-size;
CMPSB\CMPSW\CMPSD将DS:SI所指源串的一个字节、字、双字与ES:DI所指目的串的一个字节、字、双字进行比较,根据比较结果设置标志位。然后,若DF=0,则SI和DI增加1,2,4。否则SI和DI减少1,2,4。
对标志位的影响:有,同CMP
因此
CMPSB:字节串比较
DS:[SI] - ES:[DI]
SI<-SI+(-)1,DI<-DI+(-)1

CMPSW:字串比较
DS:[SI] - ES:[DI]
SI<-SI+(-)2,DI<-DI+(-)2

MOVS ( MOVe String) 串传送指令
MOVSB //字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1
MOVSW //字串传送 DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2

  执行操作:[DI] = [SI] ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素. 
    
  在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.
  
  1.目的串必须在附加段中,即必须是ES:[DI]
  2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI]) 

十六进制转二进制

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值