
汇编
文章平均质量分 78
ProgrammingRing
这个作者很懒,什么都没留下…
展开
-
中断和异常的处理
本文为 第17章笔记中断和异常中断和异常概述中断和异常的作用是指示系统中的某个地方发生一些事件, 需要引起处理器(包括正在执行中的程序和任务)的注意. 当中断和异常发生时, 典型的结果是迫使处理器将控制从当前正在执行的程序或任务转移到另一个历程或任务中去. 该例程叫做中断处理程序, 或者异常处理程序. 如果是一个任务, 则发生任务切换.1. 中断(Interrupt)原创 2014-03-15 18:14:47 · 12713 阅读 · 0 评论 -
分页机制
本文为 第16章笔记因为段的长度不定, 在分配内存时, 可能会发生内存中的空闲区域小于要加载的段, 或者空闲区域远远大于要加载的段. 在前一种情况下, 需要另外寻找合适的空闲区域; 在后一种情况下, 分配会成功, 但太过于浪费. 为了解决这个问题, 从80386处理器开始, 引入了分页机制. 分页功能从总体上来说, 是用长度固定的页来代替长度不一定的段, 藉此解决因段长度不同而带来的内原创 2014-03-15 10:51:01 · 19564 阅读 · 5 评论 -
任务切换
本文为 第15章笔记 由两种基本的任务切换方式, 一种是协同式额, 从一个任务切换到另一个任务, 需要当前任务主动地请求暂时放弃执行权, 或者在通过调用门请求操作系统服务时, 由操作系统"趁机"将控制转移到另一个任务. 这种方式依赖于每个任务的"自律"性, 当一个任务失控时, 其他任务可能得不到执行的机会. 另一种是抢占式的, 在这种方式下, 可以安装一个定时器中断, 并在中原创 2014-03-12 23:28:03 · 5670 阅读 · 0 评论 -
任务和特权级保护
本文为 第14章笔记任务的隔离和特权级保护任务, 任务的LDT和TSS程序是记录在载体上的指令和数据, 总是为了完成某个特定的工作, 其正在执行中的一个副本, 叫做任务(Task). 这句话的意思是说, 如果一个程序有多个副本正在内存中运行, 那么, 它对应着多个任务, 每一个副本都是一个任务. 为了有效的在任务之间实施隔离, 处理器建议每个任务都应当具有自己的描述原创 2014-03-12 20:06:12 · 3382 阅读 · 0 评论 -
存储器的保护
本文为 第12章笔记别名技术我们都已经知道, 在保护模式下, 代码段是不可写入的. 所谓不可写入, 并非是说改变了内存的物理性质, 使得内存写不进去, 而是说, 通过该段的描述符来访问这个区域时, 处理器不允许向里面写入数据或者更改数据. 但是, 很多时候又需要修改代码段, 如调试时加入断点指令int3. 不管怎么样, 如果需要访问代码段内的数据, 只能重新为该段安装一个新的描原创 2014-03-07 16:21:00 · 1779 阅读 · 0 评论 -
进入保护模式
本文为 第11章笔记全局描述符表全局描述符表中存放着段描述符, 每个段描述符8个字节.为了跟踪全局描述符表, 处理器内部有一个48位寄存器, 叫做全局描述符表寄存器(GDTR), GDTR分为两部分,分别为32位的线性地址和16的边界, 32位线性基地址部分保存的是全局描述符表在内存中的起始线性地址, 16位边界部分是全局描述符表的边界(界限), 其值等于表的大小(总字节数)原创 2014-03-06 19:41:12 · 2448 阅读 · 0 评论 -
bochs调试指令
bochs调试FAQ:1. Q:如何从引导扇区开始设置断点?A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的,所以我们可以在启动bochs调试的命令行下输入 pb 0x7c00或者 vb 0:0x7c00就着输入 cbochs就会在0x7c00处停下 2.转载 2012-03-29 18:19:29 · 1764 阅读 · 0 评论 -
《80x86汇编语言程序设计》保护模式第一个例题
《80x86汇编语言程序设计》保护模式第一个例题的一些个人理解和注视; 16位偏移的段间直接转移指令的宏定义jump macro selector, offsetv db 0eah ; jmp far 的操作码 dw offsetv dw selector endm; 字符显示宏指令定义echoch macro ascii mov ah, 2 mov dl原创 2012-03-22 22:23:01 · 1655 阅读 · 1 评论 -
Bochs安装FreeDOS与调试
最经看《80x86汇编语言程序设计》杨季文等著,里面的保护模式的例子无法调试,后来查到bochs可以调试,就折腾了一番,这里写下吧……>>>>>>>>>>>>>>>>>>>>>>>无耻的分割线>>>>>>>>>>>>>>>>>>>>>>>>下载地址:Bochs:http://bochs.sourceforge.net/FreeDOS:http://www.freedos.org原创 2012-03-22 13:32:15 · 8791 阅读 · 0 评论 -
《Intel汇编语言程序设计》书中例子编译
刚看到这例子是纠结了……编译不过啊,google后看到不少人便不过……后来经过一番查询,找到了编译方法用masm615编译:除了在例子里连接必要的lib文件外,就是设置masm615的环境变量了,pach里增加masm615的目录,include(没有新建)中增加include的目录,lib中增加lib的目录,例如:pach: x:\masm615\include: x:\masm原创 2012-03-22 10:22:34 · 3082 阅读 · 0 评论 -
80x86 DIVX子程序跟踪过程
转自:点击打开链接杨季文 80X86汇编语言程序 P352,子程序 DIVX ,使用移位和减法进行除法运算,尝试举例验证之。程序如下:;子程序名:DIVX;功 能:64 位数除以32 位数,商用64 位表示;入口参数:EDX:EAX=被除数; EBX=除数;出口参数:EDX:EAX=商; EB转载 2012-03-18 23:36:00 · 647 阅读 · 0 评论 -
汇编溢出
二个异符号数相加,OF=0 二个同符号数相加,结果与加数符号不同,OF=1 二个同符号数相减,OF=0 二个异符号数相减,结果与减数符号相同,OF=1==============================================在 rflags 寄存器里的下面三个标志位记录溢出, 符号和进位状态:OF(Overflow Fl转载 2012-02-21 15:52:24 · 3933 阅读 · 0 评论 -
实验14
参考网上的写的……ps:貌似加个循环就动态显示了……======================assume cs:code, ds:datadata segments1 db 9, 8, 7, 4, 2, 0s2 db "00/00/00 00:00:00", '$'s3 db 10h dup (0原创 2012-02-16 15:02:09 · 497 阅读 · 0 评论 -
Debug中cx的值
cx的值是程序的长度转自《汇编语言》论坛在程序加载的时候,计算CX的值是通过段地址和偏移地址的变动来求得的。(1)如果程序只有一个段或者是程序中的最后一个段,那么在计算过程中,不涉及段地址的改变,即段地址不变,变的只是偏移地址,所以计算出来偏移地址改变量就是cx的值。(2)如果是多个段,计算的应该过程是这样的:比如说,整个程序拥有N(N>1)个段,这时CX的值为:前N-1个段占转载 2012-01-10 16:35:48 · 2119 阅读 · 1 评论 -
汇编语言的段的最大和最小
转自《汇编语言》论坛这儿争论有什么意思,做个实验测试一下就可以了,最大是64K应该没有人反对吧 那就是最小了,有的说0 byte, 有的说16Bytes, 有的说其他的,那到底是多少,我们看这个程序 assume cs:code, ds:data data segment data ends code segment start:转载 2012-01-10 15:17:47 · 2508 阅读 · 3 评论