• 注释由';'开始。
  • 将显存映射到地址空间里,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. 在Ubuntu中打开pycharm步骤:
  2. java基础IO BIO、NIO、AIO的区别
  3. 嵌入式linux系统下简单守护进程(daemon)的编写
  4. 使用对象操作流程,读写文件
  5. linux centos 6.3 下载,CentOS 6.3发布 附ISO下载地址
  6. 二胎妈妈,35岁,年薪70万,家庭工作平衡太难,要不要辞职?
  7. 日本程序开发式自定义的malloc/free函数(一)-外部式样书(外部仕様書)
  8. 计算机视觉实战(五)图像梯度计算
  9. SQL Server 2008中文版关系数据库基础与实践教程pdf
  10. ae效果英文版翻译对照表_AE 特效中英翻译
  11. US1M-ASEMI小电流贴片快恢复二极管
  12. 中兴路由器查看时间_中兴路由器的设置方法教程
  13. matlab图片纹理特征直方图,常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。...
  14. electron-vue-windows
  15. 全球及中国水疗水下跑步机行业研究及十四五规划分析报告
  16. java堆是什么意思_java中的“堆栈”是什么意思?
  17. 软件设计学习笔记1_架构
  18. 开源搜索引擎排名第一,Elasticearch是如何做到的?
  19. VASP - Bader Charge Analysis
  20. win10关闭电池保护模式_Windows10如何关闭电源保护模式?

热门文章

  1. 内存容量出现异常的解决办法
  2. Courses hdu 1083(匹配)
  3. ASP 判断Session变量是否存在的4种方法
  4. SOA系列文章(二):服务设计原理:服务模式和反模式
  5. nodeJS中的异步编程
  6. koa --- [MVC实现之四]Router、Controller、Service的实现
  7. 前端知识点梳理(一)
  8. Linux服务器ftp+httpd部署
  9. 创建DLL、Lib以及使用DLL、Lib
  10. MAC OS X 1.1 El Capitan安装方法与步骤