汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-07-19 16:13] 内存组织

在实模式下,最低地址处的640KB内存是由操作系统和应用程序共用的。在此之上的空间为视频和硬件控制器保留的内存。
最高端的F0000-FFFFF之间的空间为系统ROM保留的。最低端的1024字节(00000~003FF)存放着32位地址项的中断向量表。这些32位地址称之为中断向量。 cpu在处理硬件和软件中断时要使用这些中断向量。
FFFFF:--------------------------------
       |ROM BIOS                      |
F0000:|-------------------------------
       |保留...
阅读全文 | 评论次数(0) | 浏览次数(361) | 所属类型(汇编语言笔记)

[2010-07-18 15:14] 子程序指令:call/ret

子程序通常是执行一个任务的代码组。 是程序结构中非常重要的组成部分。 子程序存储在存储器中,可以重复使用(调用)的一段程序,子程序的缺点就是从调用到返回时需要花费少量时间。这一点,没有使用宏有优势。call指令调用子程序,而ret指令从子程序返回。
每当程序调用子程序时,利用栈存储子程序返回的地址。call指令将它后面的指令的地址push入栈。ret指令从栈中取回这个地址, 这样就返回到call后面的指令,使程序继续执行。
在汇编程序中队子程序的存放有特殊的规定。 子程序 要以伪指令proc开始并且以伪指令endp结束。每个伪指令必须和子程序名字一起出现。proc后面是子程序的类型:far...
阅读全文 | 评论次数(0) | 浏览次数(663) | 所属类型(汇编语言笔记)

[2010-07-18 13:22] 有条件转移指令:jcc/jcxz/loop

所有的有条件转移都是短转移。条件转移的范围是在相对于转移指令的+127~-128字节以内。80386以上的处理器,条件转移是段转移或者近转移。允许有条件的转移到当前代码段内的任意位置。
条件转移测试一下标志位:符号标志SF,零标志ZF,进位标志CF,奇偶标志PF和溢出标志OF。 如果条件为真(置1), 则跳至转移指令相关联的标号处执行。 如果条件为假(清0),则顺序执行程序的下一步指令。
多数条件指令简单明了,通常只测试某一个标志位。但是也有一些事测试多个标志位,比如相对大小的测试则要求测试多个标志位。
条件转移指令一览表:
------------------------------...
阅读全文 | 评论次数(0) | 浏览次数(782) | 所属类型(汇编语言笔记)

[2010-07-17 16:13] 无条件转移指令:jmp

控制指令jmp, 允许程序跳过一段程序,跳转到存储器任何部分区执行一段指令。
无条件转移指令有三种类型:短转移,近转移和远转移。 短转移是两字节指令允许转移到相对地址127~-128字节范围内的任意存储单元。3字节的近转移指令允许转移到代码段内当前地址起±32K字节范围以内(即当前代码段任何位置)。远转移指令为5字节指令,允许转移到整个存储器的任何内存单元。
短的和近的转移通常叫做段内转移。而远转移通常叫做段间转移。
在80386到奔腾处理器,如果按照保护模式运行并且有4G字节的代码段, 则近转移±2G字节范围;如果按实模式运行,则是在±32K字节范围内。在保护模式中,80386以上使用...
阅读全文 | 评论次数(0) | 浏览次数(527) | 所属类型(汇编语言笔记)

[2010-07-17 13:07] 逻辑运算指令:and/or/xor/not/neg/test

基本的逻辑指令包括:and,or,xor,not。test是and的另外一种形式。而neg是类似于not指令。
逻辑操作提供了低级语言中对二进制位的控制。逻辑指令允许对位置位清除或取反。全部的逻辑指令都影响标志位。逻辑指令总是清除CF位和OF位。 其他标志位的变化取决于结果的调节。
当操作寄存器或存储单元中的二进制数据时,整数的最高位总是零。字节中位的位置序号是从位0向左递增到位7,而字是到位15,双字32位是用位31的位置标示它的最高位。

and指令:
and 对两个操作数进行按位与操作。简单的说, 和0相与结果总是零,1和1相与结果总是1。
and操作也可用于清除二进制数的位...
阅读全文 | 评论次数(0) | 浏览次数(354) | 所属类型(汇编语言笔记)

[2010-07-17 10:10] ASCII运算指令:aaa/aas/aam/aad

ascii算术运算指令作用于ascii码数字。 这些30H到39H范围的数码对应十进制数的0~9.
ascii有4条指令:
aaa;加法后ascii调整
aas;减法后ascii调整
aam;乘法后ascii调整
aad;先ascii调整再做除法
这些指令都是用ax作为源和目的寄存器

aaa指令,两个一位的ascii码数据相加不产生任何使用的数据。 例如31h和39h相加,结果是6ah,经过aaa调整后ax的内容是0100h。通过和3030h相加得到结果3130h,如果结果小于10,aaa清除ah,如果大于10,则把1加到ah。
----------------------...
阅读全文 | 评论次数(0) | 浏览次数(486) | 所属类型(汇编语言笔记)

[2010-07-17 09:23] BCD运算指令:daa/das

有两种算术运算方法使用bcd数据:加法和减法。
指令系统提供了两条指令修正bcd加法和减法的操作。daa指令(加法运算后十进制调整)跟在bcd加法后面。而das指令(减法运算后十进制调整)跟在bcd减法后面。两条指令的结果,使他们称为bcd数字。
bcd码数据, 总是以压缩格式出现的数字,并且以每个字节两个数字的格式存储。调整指令只作用于bcd加法和减法以后的al寄存器。

daa指令:daa指令紧跟在add或者adc指令之后,把结果调整为bcd结果。如:
-------------------------------------------------------
mov dx,...
阅读全文 | 评论次数(0) | 浏览次数(753) | 所属类型(汇编语言笔记)

[2010-07-16 17:44] 串操作指令:lods/stos/movs/ins/outs/scas/cmps

有5种串操作指令。每条串操作指令允许传送的数据可以是字节,字,双字,或者是重复传送的字节,字,双字 。在使用串操作指令前,必须设置好D标志位。
方向标志选择串操作期间变址寄存器SI和DI的自动增量或减量。此标志位只适用于串操作指令。
cld指令清零D位,即D=0;为自增方式。字符串传送方向由低地址向高地址传输。
std指令置1D位,即D=1;为自减方式。字符串传送方向由高地址向低地址传送。
如果串操作指令对字节操作, 那么si/di的内容±1。如果草操作指令对字操作, 那么si/di的内容±2。传送双字的话,si/di的内容±4。

si和di
串操作执行期间,对存储器的方位是通...
阅读全文 | 评论次数(0) | 浏览次数(912) | 所属类型(汇编语言笔记)

[2010-07-16 14:48] 装入有效地址指令:lea/lds/les/lss

在16位的8086指令中装入有效地址的指令有:lea,lds,les。
lea指令把偏移地址装入16位/32位寄存器中, 这个地址由该指令选定的寻址方式决定。
lea跟offset的比较
offset是编译器提供的伪指令, 由编译器在编译阶段生成地址,如果对于简单的操作数, 效率要远远高于lea。而lea是x86指令, 它在程序运行中生成有效地址,但是复杂性灵活性要比offset强大很多。
lds/les指令确定把内存单元位置的偏移地址装入任何16位寄存器。然后把确定内存段的地址装入DS或ES。
如:lds bx,[di] ;把数据段中由DI寻址的32位数传送至BX和DS,低地址送至...
阅读全文 | 评论次数(0) | 浏览次数(366) | 所属类型(汇编语言笔记)

[2010-07-16 11:01] 栈操作指令:push/pop

push和pop的重要性不言而喻,他存贮并恢复来自LIFO堆栈存储器的数据。80X86cpu有6种形式的push/pop指令:
寄存器,存储区,段寄存器,标志,标志寄存器,立即数
其中,立即数形式的push/pop以及pusha/popa不能用于80386以下的处理器。
push和pop指令存储16位存贮单元的内容到栈或者从栈返回到存贮单元。立即数可以被压入栈但是不能从栈弹出,因为cpu不知道目标地址。
任意段寄存器的内容可以压入堆栈或者弹出,但是弹出的数据绝对不能进入CS寄存器, 因为如果执行pop cs后,它改变了下一条指令的部分地址,这使得pop cs指令不可预知,所以, 算是‘...
阅读全文 | 评论次数(0) | 浏览次数(612) | 所属类型(汇编语言笔记)
页码数(5):  1  2  3  4  5