题目

在数据段中有一个字符串,其长度为17,要求把它们转送到附加段中的一个缓冲区中,应该怎么做呢

显然这个题要使用串传送指令MOVS,MOVS每次传送的是一个字节/字,因此需要重复执行串传送指令才能完成一个数据串的传送,即是使用 REP MOVS 指令

执行 REP MOVS指令前,应先做好:

把原串首地址送给SI寄存器

把目的串首地址送给DI寄存器

把数据串长度放入CX计数寄存器

设置方向标志DX(CLD/STD)

代码:

data segmentmess1 db 'personal_computer'
data ends
extra segmentmess2 db 17 dup(?)   ;开辟17个连续的字节单元,但是里面没有内容
extra ends
code segmentassume cs:code,ds:data,es:extra  ;这是一条伪指令
start:mov ax,datamov ds,axmov ax,extramov es,axlea si,mess1   ;原串首地址送给silea di,mess2   ;目的串首地址送给dimov cx,17      ;传送次数cld            ;地址递增rep movsb      ;完成串传送,movsb是以字节方式进行传送mov ah,4chint 21h
code endsend start

怎么按照地址减小的方向来传送呢?这时需要修改的地方如下:

lea si,mess1+16   ;原串末地址送给si
lea di,mess2+16   ;目的串末地址送给di
mov cx,17
std               ;地址递减
rep movsb

能不能把原串和目的串放在同一个段来处理呢?

方式1:段共用,数据段和附加段共用同一个段。段是可以共用的,但是共用的前提是数据没有冲突,可以看到这里并没有冲突

data segmentmess1 db 'personal_computer'mess2 db 17 dup(?)   ;开辟17个连续的字节单元,但是里面没有内容
data ends
code segmentassume cs:code,ds:data,es:data  ;这是一条伪指令
start:mov ax,datamov ds,axmov es,axlea si,mess1   ;原串首地址送给silea di,mess2   ;目的串首地址送给dimov cx,17      ;传送次数cld            ;地址递增rep movsb      ;完成串传送,movsb是以字节方式进行传送mov ah,4chint 21h
code endsend start

方式2:把原串和目的串都放在附加段,这时要格外注意修改段跨越前缀

data segment
data ends
extra segmentmess1 db 'personal_computer'mess2 db 17 dup(?)   ;开辟17个连续的字节单元,但是里面没有内容
extra ends
code segmentassume cs:code,ds:data,es:extra  ;这是一条伪指令
start:mov ax,datamov ds,axmov ax,extramov es,axlea si,mess1   ;原串首地址送给silea di,mess2   ;目的串首地址送给dimov cx,17      ;传送次数cld            ;地址递增rep movsb es:byte ptr[di],es:[si]     ;完成串传送,movsb是以字节方式进行传送mov ah,4chint 21h
code endsend start

本文为个人学习笔记

汇编---串传送指令MOVS相关推荐

  1. 汇编语言随笔(5)-and、or指令,串传送指令movsb、访问内存单元的方式及实验4,5(向内存传送数据)

    and.or指令 and指令,逻辑与指令,按位进行与运算:or指令,逻辑或指令,按位进行或运算.       如:mov al,01100011B               and al,00111 ...

  2. 汇编串操作指令std 和 cld

    CLD与STD是用来操作方向标志位DF(Direction Flag).CLD使DF复位,即DF=0,STD使DF置位,即DF=1.用于串操作指令中. 例如: MOVS ( MOVe String) ...

  3. DF标志和串传送指令

    DF标志和串传送指令 flag的第10位是DF,方向标志位.在串处理指令中,控制si.di的递减. df = 0 每次操作后si.di递增 df = 1 每次操作后si.di递减 串传送指令 格式1: ...

  4. 串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP

    复制字符串,没学串移动指令的操作 assume cs:codes,ds:datasdatas segmentbuf db 'Welcome to masm!'count equ $-bufcopy d ...

  5. 8086到80386汇编数据传送指令的扩展

    80386及以上汇编的数据传送指令如下: MOV     传送字或字节.   MOVSX   先符号扩展,再传送.   MOVZX   先零扩展,再传送.   PUSH    把字压入堆栈.   PO ...

  6. 串传送指令MOVSB MOVSW

    MOVSB(move string byte)ES:DI <-- DS:SI 把ds:si所指地址内存单元中的数据送到es:di所指向的内存单元中,源地址数据保持不变,si和di指向下一个要传送 ...

  7. 串操作指令详解 MOVS,LODS,STOS,CMPS,SCAS,REP

    目录 串传送指令MOVS 串存储指令STOS 串读取指令LODS 串比较指令CMPS 串扫描指令SCAS 重复前缀指令REP 指令包括:MOVS,LODS,STOS,CMPS,SCAS,REP 串的概 ...

  8. 【微机原理与接口 7】—— 常用指令分析4 (串操作指令剖析)

    文章目录 一.关于串操作的一些说明: 1.1 串操作指令执行的一般流程 二.正题--串操作指令 2.1 串传送指令 MOVS 2.2 串比较指令 CMPS 2.3 串扫描指令 2.4 串加载与串存储 ...

  9. 汇编中的串操作指令(MOVS,CMPS,SCAS,LODS,STOS)

           学汇编的都知道,汇编中很多问题都是对字符串进行的操作,但是我们操作时总是重复相同的操作,用多个指针进行记录,不断判断只针对位置,这样确实很麻烦,于是汇编提供了一种对字符串进行操作的指令, ...

  10. 串操作指令应用(MOVS/CMPS/SCAS/LODS/STOS)

    串操作指令(MOVS/CMPS/SCAS/LODS/STOS)的使用: 1.串传送指令 使用 上述三种格式的串传送指令在执行前都需要预先设置地址指针DS:SI和ES:DI,设置传送方向,如果要重复执行 ...

最新文章

  1. 20210808 滑模中常见趋近率
  2. Cisco路由器故障诊断技术(3)
  3. TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])
  4. ESP8266--接线与基础指令(讲解与运用)
  5. CUDA学习(一)之使用GPU输出HelloWorld
  6. The only difference is that they are written
  7. 兼容IE8遇到的问题
  8. Atitit 搜索蓝牙设备 powershell的实现 java noede.js python 先用脚本语言python nodejs,不好实现。。Java 也不好实现。。 Netcore可以,
  9. 圣诞使用循环打印以下圣诞树:要求输入树的高度,打印树
  10. java语言中modifiers_Java基础——Modifier类
  11. 你和你的女神之间,差了一个OpenCV口红色号识别器
  12. 从身家500万到两手空空,看她如何再次成功翻身
  13. Flutter路由管理和接收页面的返回值
  14. 卧底软件:帮助公司找出“内奸”
  15. landsat7数据预处理
  16. android短信和彩信探秘threads
  17. python双下划线什么意思_python中_、__、__xx__(单下划线、双下划线等)的含义
  18. 12 Consensus building in group decision making based on multiplicative consistency with incomplet r
  19. Android RIL 架构学习总结
  20. 解决国内访问s3.amazonaws.com下载文件非常缓慢的问题

热门文章

  1. 腾讯云技术布道师贺嘉正式受邀出席SDCC 2016微信开发专题,分享腾讯云的小程序解决方案...
  2. 搜索方法_如何搜索到自己的CSDN博客
  3. Encountered unexpected token:XXXXX
  4. Java轻量级缓存Ehcache与SpringBoot整合
  5. 【Chrome】678- Chrome插件开发全攻略
  6. (一)基于Multisim的超外差接收系统:本地振荡器的设计
  7. mysql got signal 11_轻松解决MYSQL错误mysqld got signal 11 ;
  8. Autojs之QQ 群发消息(是QQ 群发,不是QQ群 发)
  9. 自制Tableau数据看板示例
  10. HTTPS 加密、证书、签名与握手