Intel8086处理器使用NASM汇编语言实现操作系统09-关于数组复制的实现/movsb/movsw/cld/std/rep
本文介绍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相关推荐
- Intel8086处理器使用NASM汇编语言实现操作系统15-段的定义section/vstart和align语法
vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section a ;NASM汇编中使用section关 ...
- Intel8086处理器使用NASM汇编语言实现操作系统10-硬盘读取(in/out)
本示例遇到的新汇编指令in,out out 正确写法 out 0xf3,ax ;将ax里的值放到0xf3端口,且只能是ax,al,eax out dx,ax ;第1操作数如果是寄存器,则必须使用dx ...
- Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/
很多人都知道一个有符号的数,最高位是1,则表示负数,最高位是0,则表示正数,如果假设我的CPU是4位CPU,那么对于1001这个数,是表示+9,还是表示-7呢??? 其实CPU并不关心这个数是+9还是 ...
- Intel8086处理器使用NASM汇编语言实现操作系统04-实模式-屏幕显示不定长度的字符串(cmp/je)
本示例遇到的新汇编指令cmp,je cmp正确写法 cmp eax,666 ;用eax里的值减去666,如果值为0,则将ZR(ZF)标志位=1;如果发生借位或进位,CF(CY)标志位=1;如果溢出,则 ...
- NASM汇编语言与计算机系统13-段的定义/vstart和align语法
vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section amov ax,1mov ax,2a_l ...
- NASM汇编语言与计算机系统03-实模式-屏幕显示HelloWorld(mov,jmp,time,dd,dw,$$)
本文涉及到的汇编指令mov,jmp,times(独有),dd(独有),dw (独有),$,$$ dd/dw times 10 dd 0 ;dd表示一个双字,在8086下占用4个字节 times 10 ...
- NASM汇编语言与计算机系统02-实模式-显存原理
显卡以高频的刷新速度一直不停的扫描显存中的数据,将显存中的数据显示到屏幕上 显卡有两种模式 1.文本模式:为了方便叙述,本文的代码示例采用文本模式 2.图形模式 对于CPU来说,显存也是内存,显存的地 ...
- NASM汇编语言与计算机系统01-环境搭建
使用的程序有4个,分别是 1.Nasm汇编编译器 2.Sublime文本工具(一会需要安装NASM插件) 3.VirtualBox虚拟机 4.Bochs虚拟机调试器(一个带有调试功能的虚拟机) 1.安 ...
- NASM汇编语言与计算机系统13-段的定义vstart和align语法
vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section amov ax,1mov ax,2a_l ...
最新文章
- js 原生跨页面通信_DOM操作是跨线程的你知道吗?
- 【排序】快速排序,C++实现
- 【C++/C】【学习笔记】二分算法——处理“最小却最大”问题
- Python编程基础:第七节 字符串切片String Slicing
- 使用WMI对象收集计算机信息
- Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis
- 云南职称计算机准考证打印,会计考试准考证打印
- Spring AOP失效之谜
- 关系分类 relation classification
- 从矩阵与空间操作的关系理解CSS3的transform
- 常用组合逻辑电路及MSI组合电路模块的应用—上篇
- gimp 抠图_gimp软件如何实现抠图?
- 2020mysql下载教程
- linux打补丁教程,Linux下patch打补丁命令
- 嵌入式音视频解决方案 Webrtc vs MetaRTC
- 利用PyG实现社区检测经典算法ClusterNet
- openwrt设置网络共享
- 实用工具系列 - FileZilla安装下载与使用
- TB6612FNG与直流电机控制教程
- 小程序商店刷榜_微信小程序游戏跳一跳刷榜原理解析!
热门文章
- 关于阿法狗的一点个人小见解
- react componentWillReceiveProps
- D55XT80-ASEMI大功率三相整流桥55A 800V
- 苹果手机可以投屏到电视上吗_什么软件可以投屏,苹果手机如何操作
- vue element 表格错位
- python-django_自定义标签和过滤器_模板的导入与继承_静态文件使用方式_inclusion_tag的用法
- ADAMS的学习笔记一 平面四杆机构
- 没学历学java很难找工作吗
- 第一次发布npm包时可能遇到到问题。重名、邮箱验证、登录账号、淘宝源换成npm源
- 查看 centos 具体版本号