本文介绍movsb和movsw指令,它是C++中memcpy函数的实现,在Java语言的ArrayList实现类中就使用了该指令,不过在Java中的方法是System.arraycopy方法

首先要了解几个汇编指令

movsb与movsw

movsb    ;将ds:si位置的数据,复制到es:di处,数据长度为1字节,;复制完数据之后,标志寄存器中的方向位=0,则si+1,若;方向位=1,则si-1
movsw   ;将ds:si位置的数据,复制到es:di处,数据长度为2字节;复制完数据之后,标志寄存器中的方向位=0,则si+2,若;方向位=1,则si-2

cld与std

cld      ;无操作数,会将flag寄存器的方向位置,使方向标志位DF=0;在本文中,将DF=0,则movsb指令每执行一次,会将其偏移量+1,;对应的,movsw指令每执行一次,会将偏移量+2
std     ;无操作数,与cld完全相反,使DF=1,则movsb每执行一次,偏移量会;-1,movsw偏移量-2

rep

rep movsb    ;表示重复执行movsb指令,至于重复多少次,则取决于cx中的值
mov cx,6
rep movsw   ;表示重复执行movsw指令6次,因为cx中是6

下面的代码会在屏幕上显示LikeZZ

jmp code
text: db 'L',0x0b,'i',0x0b,'k',0x0b,'e',0x0b,'Z',0x0b,'Z',0x0b
code:mov si,textmov ax,0x7c0    ;mov ds,ax      ;ds:si存放的是'L'的地址mov di,0mov ax,0xb800 ;mov es,ax      ;es:di存放的是显存起始地址mov cx,12cldrep movsb       ;将ds:si的值放到es:di中
again: jmp again    ;保持程序永不停止,否则CPU跑飞
times 510-($-$$) db 0
dw 0xaa55

Intel8086处理器使用NASM汇编语言实现操作系统09-关于数组复制的实现/movsb/movsw/cld/std/rep相关推荐

  1. Intel8086处理器使用NASM汇编语言实现操作系统15-段的定义section/vstart和align语法

    vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section a ;NASM汇编中使用section关 ...

  2. Intel8086处理器使用NASM汇编语言实现操作系统10-硬盘读取(in/out)

    本示例遇到的新汇编指令in,out out 正确写法 out 0xf3,ax ;将ax里的值放到0xf3端口,且只能是ax,al,eax out dx,ax ;第1操作数如果是寄存器,则必须使用dx ...

  3. Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/

    很多人都知道一个有符号的数,最高位是1,则表示负数,最高位是0,则表示正数,如果假设我的CPU是4位CPU,那么对于1001这个数,是表示+9,还是表示-7呢??? 其实CPU并不关心这个数是+9还是 ...

  4. Intel8086处理器使用NASM汇编语言实现操作系统04-实模式-屏幕显示不定长度的字符串(cmp/je)

    本示例遇到的新汇编指令cmp,je cmp正确写法 cmp eax,666 ;用eax里的值减去666,如果值为0,则将ZR(ZF)标志位=1;如果发生借位或进位,CF(CY)标志位=1;如果溢出,则 ...

  5. NASM汇编语言与计算机系统13-段的定义/vstart和align语法

    vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section amov ax,1mov ax,2a_l ...

  6. NASM汇编语言与计算机系统03-实模式-屏幕显示HelloWorld(mov,jmp,time,dd,dw,$$)

    本文涉及到的汇编指令mov,jmp,times(独有),dd(独有),dw (独有),$,$$ dd/dw times 10 dd 0 ;dd表示一个双字,在8086下占用4个字节 times 10 ...

  7. NASM汇编语言与计算机系统02-实模式-显存原理

    显卡以高频的刷新速度一直不停的扫描显存中的数据,将显存中的数据显示到屏幕上 显卡有两种模式 1.文本模式:为了方便叙述,本文的代码示例采用文本模式 2.图形模式 对于CPU来说,显存也是内存,显存的地 ...

  8. NASM汇编语言与计算机系统01-环境搭建

    使用的程序有4个,分别是 1.Nasm汇编编译器 2.Sublime文本工具(一会需要安装NASM插件) 3.VirtualBox虚拟机 4.Bochs虚拟机调试器(一个带有调试功能的虚拟机) 1.安 ...

  9. NASM汇编语言与计算机系统13-段的定义vstart和align语法

    vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section amov ax,1mov ax,2a_l ...

最新文章

  1. js 原生跨页面通信_DOM操作是跨线程的你知道吗?
  2. 【排序】快速排序,C++实现
  3. 【C++/C】【学习笔记】二分算法——处理“最小却最大”问题
  4. Python编程基础:第七节 字符串切片String Slicing
  5. 使用WMI对象收集计算机信息
  6. Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis
  7. 云南职称计算机准考证打印,会计考试准考证打印
  8. Spring AOP失效之谜
  9. 关系分类 relation classification
  10. 从矩阵与空间操作的关系理解CSS3的transform
  11. 常用组合逻辑电路及MSI组合电路模块的应用—上篇
  12. gimp 抠图_gimp软件如何实现抠图?
  13. 2020mysql下载教程
  14. linux打补丁教程,Linux下patch打补丁命令
  15. 嵌入式音视频解决方案 Webrtc vs MetaRTC
  16. 利用PyG实现社区检测经典算法ClusterNet
  17. openwrt设置网络共享
  18. 实用工具系列 - FileZilla安装下载与使用
  19. TB6612FNG与直流电机控制教程
  20. 小程序商店刷榜_微信小程序游戏跳一跳刷榜原理解析!

热门文章

  1. 关于阿法狗的一点个人小见解
  2. react componentWillReceiveProps
  3. D55XT80-ASEMI大功率三相整流桥55A 800V
  4. 苹果手机可以投屏到电视上吗_什么软件可以投屏,苹果手机如何操作
  5. vue element 表格错位
  6. python-django_自定义标签和过滤器_模板的导入与继承_静态文件使用方式_inclusion_tag的用法
  7. ADAMS的学习笔记一 平面四杆机构
  8. 没学历学java很难找工作吗
  9. 第一次发布npm包时可能遇到到问题。重名、邮箱验证、登录账号、淘宝源换成npm源
  10. 查看 centos 具体版本号