x86汇编语言-从实模式到保护模式----第五章

  • 注释由';'开始。
  • 将显存映射到地址空间里,0xB8000~0xBFFFF。
  • Intel的处理器不允许将一个立即数传送到段寄存器,只允许这样的指令:
    mov 段寄存器,通用寄存器
    mov 段寄存器,内存单元
  • 为了方便,多数汇编语言编译器允许在指令中直接使用字符的字面值来代替数值形式的ASCII码,如:
    mov byte [es:0x00], 'L'
    mov byte [es:0x00], 0x4c
  • 为了访问内存单元,需要给出段地址和偏移地址。在mov byte [0x00], 'L'中,物理地址=DS左移4位+0x00。关键字byte用来修饰目的操作数。如mov [0x00], al和mov al, [0x02]则不需要。
  • mov指令的目的操作数不允许为立即数,而且,目的操作数和源操作数不允许同时为内存单元。因此,如mov 0x1c, al和mov [0x01], [0x02]都是错误的。
  • 汇编地址是指源程序编译期间,编译器为每条指令确定的汇编地址,指示该指令相对于程序或者段起始处的距离,以字节计。当编译后的程序装入物理内存后,它又是该指令在内存段内的偏移地址。
  • 在NASM中,每条指令的前面都可以有一个标号,以指示和代表该指令的汇编地址。如:
    infi: jmp near infi

    或者不需要冒号,又或者单独占用一行位置:

    infi:jmp near infi

    因为infi所在的那一行没有指令,它的地址就是下一行的地址。

  • DB(Declare Byte)、DW(Declare Word)、DD(Declare Double Word)、DQ(Declare Quad Word),均不能超过表达的大小
  • 16位的二进制除以8位的二进制数:被除数在AX中,除数由8位通用寄存器或者内存单元提供。指令执行后,商在寄存器AL中,余数在寄存器AH中。比如:
    div cl
    div byte [0x0023]

    任何时候,只要是在指令中涉及内存地址的,都允许使用段超越前缀。如:

    div byte [cs:0x0023]
    div byte [es:0x0023]
  • 32位的二进制数除以16位的二进制数:被除数高16位在DX,低16位在AX,除数由16位的通用寄存器或者内存单元提供。指令执行后,商在AX中,余数在DX中。
  • 异或操作xor:xor指令的两个操作数具有相同的数据宽度。对于清零操作,xor比 mov更高效。
  • 相对近转移:
    infi: jmp near infi

    关键字near表示目标位置在当前代码段内,更重要的是,指示相对量是16位的。实际上,这是3字节指令,操作码是0xE9,后跟两字节的操作数。但是,该操作数并非目的位置的偏移地址,而是目标位置相对于当前指令的偏移量(以字节为单位)。在编译阶段,编译器用目标位置的汇编地址减去当前指令的汇编地址,再减去当前指令的长度(3B),得到了jump near infi的实际操作数。

  • 主引导扇区最后两个字节数据为0x55和0xAA。
    dw 0xaa55
    ;或者
    db 0x55, 0xaa
  • 伪指令times可用于重复它后面的指令若干次。如
    times 20 mov ax, bx 
  • 书上源代码:
             ;代码清单5-1 ;文件名:c05_mbr.asm;文件说明:硬盘主引导扇区代码;创建日期:2011-3-31 21:15 mov ax,0xb800                 ;指向文本模式的显示缓冲区mov es,ax;以下显示字符串"Label offset:"mov byte [es:0x00],'L'mov byte [es:0x01],0x07mov byte [es:0x02],'a'mov byte [es:0x03],0x07mov byte [es:0x04],'b'mov byte [es:0x05],0x07mov byte [es:0x06],'e'mov byte [es:0x07],0x07mov byte [es:0x08],'l'mov byte [es:0x09],0x07mov byte [es:0x0a],' 'mov byte [es:0x0b],0x07mov byte [es:0x0c],"o"mov byte [es:0x0d],0x07mov byte [es:0x0e],'f'mov byte [es:0x0f],0x07mov byte [es:0x10],'f'mov byte [es:0x11],0x07mov byte [es:0x12],'s'mov byte [es:0x13],0x07mov byte [es:0x14],'e'mov byte [es:0x15],0x07mov byte [es:0x16],'t'mov byte [es:0x17],0x07mov byte [es:0x18],':'mov byte [es:0x19],0x07mov ax,number                 ;取得标号number的偏移地址mov bx,10;设置数据段的基地址mov cx,csmov ds,cx;求个位上的数字mov dx,0div bxmov [0x7c00+number+0x00],dl   ;保存个位上的数字;求十位上的数字xor dx,dxdiv bxmov [0x7c00+number+0x01],dl   ;保存十位上的数字;求百位上的数字xor dx,dxdiv bxmov [0x7c00+number+0x02],dl   ;保存百位上的数字;求千位上的数字xor dx,dxdiv bxmov [0x7c00+number+0x03],dl   ;保存千位上的数字;求万位上的数字 xor dx,dxdiv bxmov [0x7c00+number+0x04],dl   ;保存万位上的数字;以下用十进制显示标号的偏移地址mov al,[0x7c00+number+0x04]add al,0x30mov [es:0x1a],almov byte [es:0x1b],0x04mov al,[0x7c00+number+0x03]add al,0x30mov [es:0x1c],almov byte [es:0x1d],0x04mov al,[0x7c00+number+0x02]add al,0x30mov [es:0x1e],almov byte [es:0x1f],0x04mov al,[0x7c00+number+0x01]add al,0x30mov [es:0x20],almov byte [es:0x21],0x04mov al,[0x7c00+number+0x00]add al,0x30mov [es:0x22],almov byte [es:0x23],0x04mov byte [es:0x24],'D'mov byte [es:0x25],0x07infi: jmp near infi                 ;无限循环
          number db 0,0,0,0,0times 203 db 0db 0x55,0xaa

     

转载于:https://www.cnblogs.com/hlk09/p/9780596.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面向对象(3) —— 抽象类、接口、内部类、匿名内部类

目录抽象类(abstract)抽象类的使用方法抽象类的应用:模板方法模式接口接口的概念接口的特点接口的使用接口实现与抽象类继承的区别接口的多继承内部类概念成员内部类(使用较多)及应用创建成员内部类的实例在成员内部类…

Kohana和Zencart

2019独角兽企业重金招聘Python工程师标准>>> 我有一个Kohana php框架但是客户求和zencart系统结合。我有一个想法是Kohana重新zencart 有没有人用过?应该没有吧 Kohana 是一款纯 PHP5 的框架,基于 MVC 模式开发, 它的特点就是高安…

Linux stmac网卡代码分析 -- open

Open stmmac_open是在stmmac_netdev_ops结构体里的,这个ops在probe时就已经注册到了net_device结构体里,在网卡对于stmmac_open函数调用的时间我还不确定是否是在网卡link up时 下面看看stmmac_open函数,文件位置: drivers/net/…

g++ linux 编译开栈_方舟编译器编译hello world踩坑全记录

闲来无事,看到方舟编译器完整开源,于是打算拿来试着编译一个东西来,接下来把踩过的一些坑记录一下。参考文档方舟编译器的官网是OpenArkCompiler​www.openarkcompiler.cn但是这个网站上的文档其实是过时的,没有更新过的&#xff…

绘制自定义键盘

先看下微信当中的自带的数字键盘 这种实现方式比较简单,可以直接用inline-block标签,设置每行平均宽度,比如一行要放4个按钮,可以那么宽度就可以设为25%,同时要注意设置css样式为box-sizing: border-box,这样在设置边框…

配置管理小报100329:脚本中ftp命令无法自动输入密码怎么办?

为什么80%的码农都做不了架构师?>>> 知识点: 作者:王(zbwangjian.cn) 脚本中ftp命令无法自动输入密码怎么办?参考: http://www.linji.cn/post/1620/ http://www.hamo…

linux下使用网易邮箱发邮件

0x0 最近要写个脚本监视系统运行情况,有异常及时通过邮件通知我。 本次测试中使用网易的邮箱作为邮件发送服务器(邮箱账号需要开启smtp服务如下图),由于网易邮箱验证比较严格,需要进行一些额外操作才可以正常发送邮件…

Java面向对象(4) ——多态

目录多态的概念对象上下转型多态应用之打印机多态的概念 多态是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果。比如:猫吃鱼、狗吃肉、人吃米饭。 多态存在的三个必要条件: 需要存在继承(extends&#xf…

ffmpeg 转换flv压缩大小_ffmpeg转换参数和压缩输出大小的比率 参考 最新版本FFMPEG...

https://blog.cnlabs.NET/3668.htmlffmpeg 转换压缩比例FFMPEG如果是压缩为FLV文件 3个编码可选1. -c:v flv 标准FLV编码 这个好处是速度快 清晰度高的话 视频文件会比较大2. -c:v vp6 VP6编码 这个大家都很少使用 其实这个也算不错3. -c:v libx264 H.264编码 估计使用这个的比…

Git 常用命令清单,掌握这些,轻松驾驭版本管理

GitHub 地址&#xff0c;欢迎star&#xff0c;查看更多整理的前端知识点 工程下载、分支的增删查改 工程下载&#xff1a; clone 远程工程&#xff1a;git clone https://XXXX.gitfetch 远程分支到本地某分支&#xff1a;git fetch origin <orginname>:<localname>…

【运维囧事】运维的苦乐之旅

人生就是一段充满苦与乐的旅程&#xff0c;在人生当中有痛苦也有欢乐&#xff0c;痛苦不一定是负面的&#xff0c;有的时候还会使你进步&#xff0c;增强应变能力。对一般人而言&#xff0c;人生一定要是快乐的才是有意义的&#xff0c;可是你仔细想想&#xff0c;有谁不是因为…

ubuntu下网易云音乐适配高分辨率屏幕

0x0 环境 ubuntu20处理器 AMD 我主流工作环境是Ubuntu20&#xff0c;而且很依赖音乐&#xff0c;网易云音乐适配了Ubuntu&#xff0c;而最近我换了个4K屏幕 开机启动网易云音乐后发现界面文字变得很小完全没法看&#xff0c;如下图 分析发现网易云音乐是通过 /opt/netease/ne…

Java基础 —— 异常

目录异常的概念及分类异常的处理try-catch-finally异常抛出throw(s)自定义异常异常的概念及分类 什么是异常 异常是指在程序的运行过程中发生的一些不正常事件。比如&#xff1a;除0溢出、数组下标越界、所要读取的文件不存在。 异常导致的后果 项目JAVA程序的执行过程中如出现…

excel函数去重_excel去重函数

在日常工作问题中&#xff0c;经常会遇到一个问题&#xff0c;当你呼哧呼哧处理了大半天的数据后才发现&#xff0c;原始数据好多重复的&#xff0c;导致你得到的结果全部错误……顿时&#xff0c;想砍人的心都有了&#xff0c;心理阴影面积无穷大……当然&#xff0c;胖斯基也…

解决网站请求速度慢的一些方法

开门见山&#xff0c;网站请求反应速度慢首先考虑服务器问题。 我在开发中遇到的就是服务器实例限制cpu占用10%以内访问正常&#xff0c;超出则限制访问速度&#xff0c;也就是网站请求速度慢 具体和阿里工程师聊天截图如下&#xff1a; 按照对方说的&#xff0c;升级了相关配置…

Windows Server 2012 在个人终端上使用的推荐设置

Windows Server 2012&#xff0c;也就是 Windows 8 的服务器版本&#xff0c;相对于 Windows 8 企业版而言&#xff0c;增强了作为服务器的功能&#xff0c;弱化了作为终端系统的功能。   目前微软官方提供了 Windows 8 企业版&#xff08;90 天评估期&#xff09;和 Windows…

解决crontab 定时任务加载失败

0x0 系统&#xff1a;centos7内核&#xff1a;3.10.0-1160.15.2.el7.x86_64 今天用crontab创建定时任务&#xff0c;在测试时发现任务并没有按预期执行&#xff0c; 使用systemctl status crond 查看crond的状态 > # systemctl status crond …

Java高级 —— 泛型

目录泛型概念泛型可设置多个类型参数泛型继承泛型接口限制泛型可用类型泛型通配声明泛型方法泛型方法限制泛型可用类型泛型概念 问题引入&#xff1a;如果我们需要产生多个对象&#xff0c;每个对象的逻辑完全一样&#xff0c;只是对象内的成员啊变量的类型不同。那我们如何去…

python显示目录中的文件_Python中的文件和目录操作实现

Python中的文件和目录操作实现对于文件和目录的处理&#xff0c;虽然可以通过操作系统命令来完成&#xff0c;但是Python语言为了便于开发人员以编程的方式处理相关工作&#xff0c;提供了许多处理文件和目录的内置函数。重要的是&#xff0c;这些函数无论是在Unix、Windows还是…

wopihost

项目介绍 基于wopi协议开发的WopiHost, 支持word, excel&#xff0c;ppt(仅支持预览)等文档的预览和编辑。 运行环境 需要安装Office online 2016才可以使用&#xff0c;基于jdk 1.8&#xff0c;spring boot开发。 使用案例 word文档预览 http://[owas.domain]/wv/wordviewerfr…