• 注释由';'开始。
  • 将显存映射到地址空间里,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

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

  1. x86汇编语言从实模式百度云_Intel x86 CPU 32位保护模式杂谈之任务切换 上

    目录: 什么是任务 任务由什么组成 任务门描述符是什么东东?有了TSS描述符为什么要有任务门描述符? 参考文献 什么是任务 任务(task)是处理器可以分配.执行.挂起的工作单位,笔者认为和我们操作系 ...

  2. 硬盘和显卡的访问与控制(一)——《x86汇编语言:从实模式到保护模式》读书笔记01

    本文是<x86汇编语言:从实模式到保护模式>(电子工业出版社)的读书实验笔记. 这篇文章我们先不分析代码,而是说一下在Bochs环境下如何看到实验结果. 需要的源码文件 第一个文件是加载程 ...

  3. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  4. 《x86汇编语言:从实模式到保护模式》视频来了

    <x86汇编语言:从实模式到保护模式>视频来了 很多朋友留言,说我的专栏<x86汇编语言:从实模式到保护模式>写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节. ...

  5. 《x86汇编语言:从实模式到保护模式》读书笔记之后记

    本来打算把整本书的读书笔记写完,可是由于有其他的计划(就叫做"B计划"吧)且优先级更高,所以我的读书笔记搁浅了.为了全力以赴执行B计划,我的博客要荒芜一段时间(我希望不要永远荒芜下 ...

  6. 处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39

    处理器在实施任务切换时的操作--<x86汇编语言:从实模式到保护模式>读书笔记39 处理器可以通过以下四种方法实施任务切换: 1. call指令或者jmp指令的操作数是GDT内的某个TSS ...

  7. 任务切换——《x86汇编语言:从实模式到保护模式》读书笔记38

    任务切换--<x86汇编语言:从实模式到保护模式>读书笔记38 本文及后面的几篇博文是原书第15章的学习笔记. 本章依然使用第13章的主引导程序. 1. 协同式多任务与抢占式多任务 有两种 ...

  8. 任务切换的方法——《x86汇编语言:从实模式到保护模式》读书笔记37

    任务切换的方法--<x86汇编语言:从实模式到保护模式>读书笔记37 1. 中断门和陷阱门 在实模式下,内存最低端的1M是中断向量表,保存着256个中断处理过程的段地址和偏移.当中断发生时 ...

  9. 任务和特权级保护(五)——《x86汇编语言:从实模式到保护模式》读书笔记36

    任务和特权级保护(五)--<x86汇编语言:从实模式到保护模式>读书笔记36 修改后的代码,有需要的朋友可以去下载(c14_new文件夹).下载地址是: GitHub: https://g ...

  10. 任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35

    任务和特权级保护(四)--<x86汇编语言:从实模式到保护模式>读书笔记35 7. 正式进入用户程序的局部空间 67 mov ebx,message_1 68 call far [fs:P ...

最新文章

  1. python打开指定文件-python打包压缩、读取指定目录下的指定类型文件
  2. 字节 字符 utf-8 unicode 以及提交表单验证字符长度 .......
  3. 学计算机的考研还是工作室,毕业后,考研和工作哪个更有出路,你后悔了吗?...
  4. PAT1061 判断题 (15 分)
  5. 基于TCP的在线聊天程序
  6. 5个能提高你工作效率的Excel技巧
  7. linux 分卷解压
  8. my javaeye blog
  9. 韩顺平php视频笔记35 php运行过程
  10. 《深入理解 Spring Cloud 与微服务构建》第九章 熔断器 Hystrix
  11. 【米课】思维导图与深度思考
  12. 海量数据挖掘MMDS week6: MapReduce算法(进阶)
  13. C++中的set(STL的应用部分)
  14. 实用分享-MAC修改器(摆脱网络封锁的困扰)
  15. c语言 程序设计一篇,用c语言编程任务br/请编写一个程序,从输入中读取一篇中文文 爱问知识人...
  16. (新)最新抖音无水印解析原理再分析过程,柳暗花明又一村
  17. c语言解三色旗问题加注释,C语言经典算法——三色旗问题
  18. 潇洒郎: 解决EDAS论文上传文字没有嵌入问题:Upload failed: The font Arial,Italic is not embedded in the file.
  19. 苹果付费app共享公众号_【苹果iOS付费游戏应用帐号分享】新增一款40元iOS游戏应用共享帐号...
  20. 企业wifi管家——让天下没有难管的wifi

热门文章

  1. 使用 Log4Net 记录日志
  2. vue --- configureWebpack模拟后台数据
  3. 水瓶与天蝎的八年爱恋(图
  4. RabbitMQ 延迟队列,消息延迟推送
  5. Python多线程豆瓣影评API接口爬虫
  6. 顺大势逆小势策略之代码实现及可行性分析
  7. linux运维基础篇 unit7
  8. 将团队迁移到可视化项目管理软件
  9. 你可能不知道的跨域解决方案
  10. Haproxy 与 Cookie