串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP
- 复制字符串,没学串移动指令的操作
assume cs:codes,ds:datasdatas segmentbuf db 'Welcome to masm!'count equ $-bufcopy db 16 dup(?),0AH,0DH,'$'
datas endscodes segment
start:mov ax,datasmov ds,axlea si,buflea di,copymov cx,count/2;字传输next:mov ax,[si]mov [di],axadd si,2add di,2loop next
lea dx,copy
mov ah,09h
int 21h
MOV AH,4CH
INT 21H
codes ends
end start
- DF 方向标志位 DIRECTION FLAG
- 在串处理指令中,控制每次操作后SI,DI的增减
- DF = 0每次操作后SI,DI递增 UP
- DF = 1每次操作后SI,DI递减 DN/Down
MOVSB
(move string byte)
- movsb 以字节为单位传送(move string byte)
((ES) * 16 + (DI)) = ((DS) * 16 + (SI))
;DF = 0
(SI) = (SI) + 1
(DI) = (DI) + 1
;DF = 1
(SI) = (SI) - 1
(DI) = (DI) - 1
- movsw 以字为单位传送
((ES) * 16 + (DI)) = ((DS) * 16 + (SI))
;DF = 0
(SI) = (SI) + 2
(DI) = (DI) + 2
;DF = 1
(SI) = (SI) - 2
(DI) = (DI) - 2
CLD
- 对DF位进行设置的指令
- CLD指令:将标志寄存器的DF位设为0(CLEAR)
- SI和DI递增
- STD指令:将标志寄存器的DF位设为1(SET UP)
- SI和DI递减
想用MOVSB记得设置ES
MOV AX,DATASEG
MOV ES,AX
assume cs:codes,ds:datasdatas segmentbuf db 'Welcome to masm!'count equ $-bufcopy db 16 dup(?),0AH,0DH,'$'
datas endscodes segment
start:mov ax,datasmov ds,ax;没有设置ESmov es,axlea si,buflea di,copycld;清除标志寄存器mov cx,countnext:movsbloop next
lea dx,copy
mov ah,09h
int 21h
MOV AH,4CH
INT 21H
codes ends
end start
rep
- 通常与串传送指令搭配使用
- 根据CX的值,重复执行后面的命令
rep movsb
;s:movsb
;loop s
想使用REP
记得MOV CX = COUNT
assume cs:codes,ds:datasdatas segmentbuf db 'Welcome to masm!'count equ $-bufcopy db 16 dup(?),0AH,0DH,'$'
datas endscodes segment
start:mov ax,datasmov ds,ax;没有设置ESmov es,axlea si,buflea di,copycld;清除标志寄存器mov cx,countREP MOVSB
lea dx,copy
mov ah,09h
int 21h
MOV AH,4CH
INT 21H
codes ends
end start
串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP相关推荐
- 汇编语言随笔(5)-and、or指令,串传送指令movsb、访问内存单元的方式及实验4,5(向内存传送数据)
and.or指令 and指令,逻辑与指令,按位进行与运算:or指令,逻辑或指令,按位进行或运算. 如:mov al,01100011B and al,00111 ...
- 为什么INC,DEC指令不影响CF标志位呢?
引言 我们知道执行算数运算指令的时候,当结果的最高位与进位或者借位时会把状态寄存器FLAGS的CF位置为1,否则置为0,但是为什么INC和DEC这样的指令不影响CF标记位呢? 怀着对这个问题的疑惑,在 ...
- 汇编指令sub也改变标志位
SUB指令介绍: SUB:不带借位的减法指令. 指令格式:SUB OP1,OP2 指令功能:(OP1)←(OP1)-(OP2),将OP1-OP2的值,保存在OP1中,如:SUB [EAX],1 以EA ...
- 串传送指令MOVSB MOVSW
MOVSB(move string byte)ES:DI <-- DS:SI 把ds:si所指地址内存单元中的数据送到es:di所指向的内存单元中,源地址数据保持不变,si和di指向下一个要传送 ...
- Intel8086处理器使用NASM汇编语言实现操作系统09-关于数组复制的实现/movsb/movsw/cld/std/rep
本文介绍movsb和movsw指令,它是C++中memcpy函数的实现,在Java语言的ArrayList实现类中就使用了该指令,不过在Java中的方法是System.arraycopy方法 首先要了 ...
- DF标志和串传送指令
DF标志和串传送指令 flag的第10位是DF,方向标志位.在串处理指令中,控制si.di的递减. df = 0 每次操作后si.di递增 df = 1 每次操作后si.di递减 串传送指令 格式1: ...
- 指令系统(一)数据传送指令
指令系统概述 指令-控制计算机完成指定操作的命令 机器指令-指令的二进制代码的形式 汇编指令-助记符性形式的指令 指令系统:CPU所有指令及其使用规则的集合 指令系统分类 指令按功能分为7大类 数据传 ...
- 微型计算机原理与接口技术——8086指令系统之数据传送指令
8086指令系统之数据传送指令 前言 1.通用数据传送指令 一般传送指令MOV 指令格式 指令功能 MOV指令可实现以下各种传送 堆栈操作指令PUSH和POP 压栈指令 PUSH 指令格式 执行过程 ...
- 三菱FX5U传送指令
目录 MOV传送指令 CML取反传送指令 XCH数据交换 SWAP高低字节交换指令 BMOV传送指令 FMOV多点传送指令 传送指令 MOV传送指令 当数据为32位时,传送指令就变成了DMOV. 程序 ...
最新文章
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用50
- php快速排序法远离,php快速排序原理与实现方法分析
- 【Minimum Depth of Binary Tree】cpp
- VS2005--设置Release模式下调试
- 如何开发出优秀的APICloud应用
- SSM框架笔记07:初探Spring——采用XML配置文件与注解方式
- Android新手入门2016(14)--FragmentTabHost实现选项卡和菜单
- r语言 悲观剪枝_R语言实战(5) ——高级数据管理
- linux下设置好环境变量要重启计算机
- ajax 上传文件 data,ajax文件上传-FormData()
- 利用MapInfo将MapInfo格式数据转换成shp格式
- 如何使用阿里云矢量图标库
- 2017年下半年综合素质作文
- Debugging connection was closed. Reason: WebSocket disconnected
- CDA备考学习笔记——基础知识篇(三)
- 中文输入法无论如何都要占用Ctrl+Space快捷键终极解决!
- python猜年龄代码_Python实现猜年龄游戏代码实例
- SAP MD04详解
- mybatis-plus和mysql
- GD32F103学习笔记(8)——ADC接口使用
热门文章
- Keil用C语言定义函数,STC单片机Keil中C语言函数定位的方法
- python优先级排序_用Python实现优先级队列的3种方法
- java jtable 按钮_java web 怎么在jtable中添加按钮?
- winform 往第三方传值 put
- Vue 强制刷新组件
- 【mysql快速入门】牛客网:查询所有列查询多列查询结果去重查询结构返回限制行数将查询后的列重新命名
- 【数据结构和算法笔记】排序(1)排序概述
- 记录CodeForces第一次比赛经历
- 最简单的基于FFmpeg的移动端例子:Android HelloWorld
- python字符串方法总结_python字符串使用方法总结