在实模式下,最低地址处的640KB内存是由操作系统和应用程序共用的。在此之上的空间为视频和硬件控制器保留的内存。
最高端的F0000-FFFFF之间的空间为系统ROM保留的。最低端的1024字节(00000~003FF)存放着32位地址项的中断向量表。这些32位地址称之为中断向量。 cpu在处理硬件和软件中断时要使用这些中断向量。
FFFFF:--------------------------------
|ROM BIOS |
F0000:|-------------------------------
|保留...
- [somniumchase] 我一运行就说没有数字 01/01 11:44
- [游客] 为什么啊 08/07 15:36
- [游客] 如果想快一些 就改下面这里 dx值改成1H delay: push ax 04/19 02:53
- [lshhjx] 注释在程序中很重要,楼主不知道吗? 12/08 13:40
- [biaggi] 看不明白,在下還須學習 11/06 08:11
- [游客] 我运行的时候直接显示Unkown filename跳出了- -请问怎么改 06/16 21:44
- [游客] 勿庸置疑,注释是好习惯。与人方便自己方便。 04/12 10:33
- [游客] 老实说,看着真心累呀! 04/07 18:37
- [游客] 很无语,初学者就多看书,不要动不动要别人注释,基础打好了,再自己注释,这样比别人帮你注释好得多 12/17 19:43
- [dgkepu] 初学者:不懂,希望有多点注释带着学习学习! 12/07 20:52
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [466987333] 你好,高手,我想请教一个问题。 我用的是win7操作系统,32位的,里面没有找masm目录,是不是 12/12 17:30
- [lanfioncc] 那个太高级了。。。我还有点看不懂。。不过谢谢!!! 11/27 11:23
- [yc2010] 实验16中的 table: dw sub1,sub2,sub3,sub4 可不可以改成呢? 09/11 09:08
- [yc2010] mov bl,ah mov bh,0 add bx,bx ----------->这里为 09/07 21:03
- [yc2010] 为什么要add bx,bx呢? 09/07 20:55
- [yc2010] 那是不是像table[bx],ds[bx]....等(内存单元)都是表示一个字节呢? 09/06 21:10
- [masmaster] 杨季文的《80X86汇编语言程序设计教程》 09/01 12:52
- [游客] to masmaster shl左移4位,那al传进来的4,5,6位背景色不就没了. 为什 09/01 11:00
[2010-07-19 16:13] 内存组织
阅读全文 |
评论次数(0) |
浏览次数(361) |
所属类型(汇编语言笔记)
[2010-07-18 15:14] 子程序指令:call/ret
子程序通常是执行一个任务的代码组。 是程序结构中非常重要的组成部分。 子程序存储在存储器中,可以重复使用(调用)的一段程序,子程序的缺点就是从调用到返回时需要花费少量时间。这一点,没有使用宏有优势。call指令调用子程序,而ret指令从子程序返回。
每当程序调用子程序时,利用栈存储子程序返回的地址。call指令将它后面的指令的地址push入栈。ret指令从栈中取回这个地址, 这样就返回到call后面的指令,使程序继续执行。
在汇编程序中队子程序的存放有特殊的规定。 子程序 要以伪指令proc开始并且以伪指令endp结束。每个伪指令必须和子程序名字一起出现。proc后面是子程序的类型:far...
每当程序调用子程序时,利用栈存储子程序返回的地址。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),则顺序执行程序的下一步指令。
多数条件指令简单明了,通常只测试某一个标志位。但是也有一些事测试多个标志位,比如相对大小的测试则要求测试多个标志位。
条件转移指令一览表:
------------------------------...
条件转移测试一下标志位:符号标志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以上使用...
无条件转移指令有三种类型:短转移,近转移和远转移。 短转移是两字节指令允许转移到相对地址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操作也可用于清除二进制数的位...
逻辑操作提供了低级语言中对二进制位的控制。逻辑指令允许对位置位清除或取反。全部的逻辑指令都影响标志位。逻辑指令总是清除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。
----------------------...
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,...
指令系统提供了两条指令修正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
串操作执行期间,对存储器的方位是通...
方向标志选择串操作期间变址寄存器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,低地址送至...
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指令不可预知,所以, 算是‘...
寄存器,存储区,段寄存器,标志,标志寄存器,立即数
其中,立即数形式的push/pop以及pusha/popa不能用于80386以下的处理器。
push和pop指令存储16位存贮单元的内容到栈或者从栈返回到存贮单元。立即数可以被压入栈但是不能从栈弹出,因为cpu不知道目标地址。
任意段寄存器的内容可以压入堆栈或者弹出,但是弹出的数据绝对不能进入CS寄存器, 因为如果执行pop cs后,它改变了下一条指令的部分地址,这使得pop cs指令不可预知,所以, 算是‘...
阅读全文 |
评论次数(0) |
浏览次数(612) |
所属类型(汇编语言笔记)