01 2016 档案
摘要:(十)保护模式下的栈 76 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 77 mov cx,00000000000_11_000B ;加载堆栈段选择子78 mov ss,cx79 mov esp,0x7...
阅读全文
摘要:一、Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式。 (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 (3)虚拟8086模式:这种方式可以使用户在保护模式下运行8086程序(比如cmd打开的con...
阅读全文
摘要:一、80286的工作模式 80286首次提出了实模式和保护模式的概念。 实模式:和8086的工作方式相同; 保护模式:提供了存储器管理机制和保护机制,支持多任务。 二、80286的寄存器 (一)通用寄存器 80286的通用寄存器和8086一样,有AX,BX,CX,DX,BP,SP,SI,DI...
阅读全文
摘要:VIM编辑器是可以显示行号的。但是,有时候我们需要在整个代码的行首添加行号。怎么实现呢?实现的方法有很多,这里就介绍我知道的一种吧。 在每行行首添加某个字符串 :%s/^/your_string/ 在每行行尾添加某个字符串 :%s/$/your_string/ 解释: % 表示针对文件的每一行...
阅读全文
摘要:运行命令 gcc -v 显示: Target: x86_64-linux-gnu 所以,我这里的gcc默认生成64位的程序。 如果想编出32位的程序,就要加 -m32选项。可是我尝试了,还是不行。 原来,需要安装东西。 $ sudo apt-get install build-ess...
阅读全文
摘要:首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便。所以从现在起,我要给代码加上行号。我写博客用的这个插入代码的插件,确实不支持自动插入行号。我真的没有找到什么好方法,无奈之下,只能按照网友的说法,在VIM中给每行代码加上行号,然后再贴出来。 在VIM中每一行都添加上行号的方法是:...
阅读全文
摘要:本博文是对原书8.3.10的内容的总结。 一、相对短转移 指令格式是: jmp short 标号 标号也可以替换成具体的数值(标号和数值是等价的),例如 jmp short 0x2000 说明: (1)该指令属于段内转移指令,而且只允许转移到距离当前指令-128~127字节的地方。 (2...
阅读全文
摘要:之前已经做了一些理论上的铺垫,这次我们就可以看代码了。 一、代码清单 ;代码清单11-1 ;文件名:c11_mbr.asm ;文件说明:硬盘主引导扇区代码 ;创建日期:2011-5-16 19:54 ;设置堆栈...
阅读全文
摘要:这篇博文,我们编写一个C语言的小程序,来解析数据段或者代码段描述符的各个字段。这样我们阅读原书的代码就会方便一点,只要运行这个小程序,就可以明白程序中定义的数据段或者代码段的描述符了。 这段代码,我用了“位字段”的知识,这还是第一次使用C语言的这个特性呢,如果有不对的地方,欢迎博友斧正。 写代码...
阅读全文
摘要:一、段描述符的分类 在上一篇博文中已经说过,为了使用段,我们必须要创建段描述符。80X86中有各种各样的段描述符,下图展示了它们的分类。 看了上图,你也许会说:天啊,怎么这么多段描述符啊!我可怎么记住呢? 别担心,我会在以后的博文中,跟随原书的作者,为您逐步介绍。我们的学习是循序渐进的,所以不...
阅读全文
摘要:在进入保护模式之前,我们先要学习一些基础知识。今天我们看一下全局描述符表(Global Descriptor Table, 简称GDT)。 同实模式一样,在保护模式下,对内存的访问仍然使用段地址加偏移地址。但是,在保护模式下,在每个段能够访问之前,必须先登记。这就好比像C语言中,“对变量的使用必...
阅读全文
摘要:在说正题之前,我们先看2个概念。 1.指令集架构(ISA) ISA 的全称是 instruction set architecture,中文就是指令集架构,是指对程序员实际“可见”的指令集,包含了程序员编写一个能正确运行的二进制机器语言程序的所有信息,涉及到指令、 I/O 设备等。例如 Inte...
阅读全文
摘要:1.BIOS中断 我们可以为所有中断类型自定义中断处理过程,包括内部中断、硬件中断和软中断。 BIOS中断,又称BIOS功能调用,主要是为了方便地使用最基本的硬件访问功能。通常,为了区分针对同一硬件的不同功能,使用寄存器AH来指定具体的功能编号。 比如说,以下的指令用于从键盘读取一个按键: m...
阅读全文
摘要:有幸结识了《X86汇编语言:从实模式到保护模式》一书。我觉得这本书非常好,语言活泼,通俗易懂,源码丰富,受益匪浅。读罢一遍,意犹未尽。于是打算再读一遍,并把自己的读书所学总结成笔记,一来给自己留个纪念,二来供各位访客参考。初出茅庐,牛刀小试,如有错误,实属必然。还请广大博友批评指正,不吝赐教。 ...
阅读全文
摘要:上次我们说了代码,这次我们说说怎样看到实验结果。 首先编译源文件(我的源文件就在当前路径下,a盘和c盘在上一级目录下): nasm -f bin c08_mbr.asm -o c08_mbr.bin nasm -f bin c09_1.asm -o c0901.bin 然后将bin文件写入a盘...
阅读全文
摘要:1.代码清单 ;代码清单9-1 ;文件名:c09_1.asm ;文件说明:用户程序 ;创建日期:2011-4-16 22:03 ;=======================================...
阅读全文
摘要:80X86中断系统 能够处理256个中断 用中断向量号0~255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 1、中断的分类 中断可以分为内部中断和外部中断。 (1)内部中断 除法错中断 指令中断 溢出中断 单步中断 断点中断 (2)外部中断 非屏蔽中断...
阅读全文
浙公网安备 33010602011771号