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

我的博客

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

[2010-08-01 14:54] 关于Enter和Leave指令

Enter:
Enter指令自动为被调用的过程创建堆栈框架,它为局部变量保留堆栈空间并在堆栈中保存基址指针EBP。 该指令执行下面三个动作:
o:在堆栈上压入EBP(push ebp)
o:把EBP设为堆栈框架的基址指针(mov ebp,esp)
o:为局部变量预留空间(sub esp,numbytes)

Enter指令有两个操作数:第一个操作数十常量,用于指定要为局部变量保留出多少堆栈空间;第二个操作数指定过程的嵌套层数(通常层数为0),格式:
enter numbytes,nestinglevel
两个操作数都是立即数。 numbytes总是向上取4的倍数,以使ESP按双...
阅读全文 | 评论次数(2) | 浏览次数(446) | 所属类型(汇编语言笔记)

[2010-08-01 10:17] 关于局部变量

在单个子程序/过程/函数中创建、使用和注销的变量称之为局部变量。局部变量与过程之外的全局变量相比有明显有点:
o:只有在局部变量所在过程之内的语句才能看到和修改局部变量。这个特点有助于避免程序源码多处修改一个变量导致的bug。
o:局部变量使用的存贮空间在过程结束后立即释放
o:一个过程内的局部变量的名字可以和其他过程中的局部变量的名字相同。不会发生名字冲突。
o:对递归过程已经可能由多个线程同时执行的过程而言,局部变量是必须的。

局部变量在运行时栈上创建的。 在内存中其位置通常在基址指针EBP之下,尽管在汇编时不能给定默认值,但是可以在运行时初始化。例如:
subproc  ...
阅读全文 | 评论次数(0) | 浏览次数(312) | 所属类型(汇编语言笔记)

[2010-07-31 10:08] 关于堆栈框架(3)

通过堆栈传递8位和16位参数:
在保护模式下传递堆栈参数时,最好使用32位的操作数,虽然可以在栈中压入16位的操作数, 但是这样做会使ESP无法对齐在双字地址边界上,有此可能导致页故障,程序的性能也可能降低。 因此在传递8位或16位堆栈参数时,利用指令movzx把它扩展成32位模式后再压入。例如:
var1 db x
var2 dw y
...
movzx eax,var1
push eax
movzx eax,var2
push eax
call ...

传递长整数参数:
在使用堆栈向过程传递长整数(由多个字节构成)参数时, 可以先把高位字节压入, 然后再把低位字节...
阅读全文 | 评论次数(0) | 浏览次数(366) | 所属类型(汇编语言笔记)

[2010-07-30 18:43] 关于堆栈框架(2)

堆栈参数的访问:
在调用函数时,C程序使用标准的方法初始化和访问参数。 C中的函数以序言开始,序言部分的代码保存了EBP寄存器,并使EBP指向当时堆栈的顶部,函数还有可能把一些寄存器入栈, 这些寄存器的值将在函数返回的时候恢复。函数以收尾代码结束,在这部分代码中,EBP被恢复, ret指令从函数返回。如:
subproc    proc
           push  ebp  ;序言部分将EBP入栈保存。
然后,将ESP/SP的值设为EBP/BP的值,所以EBP/BP开始作为堆栈的基址指针使用了。
subproc    proc
           push ebp
   ...
阅读全文 | 评论次数(0) | 浏览次数(411) | 所属类型(汇编语言笔记)

[2010-07-30 10:55] 关于堆栈框架(1)

堆栈框架(Stack Frame)也叫活动记录(Activation Record),它是为传递的参数、子例程的返回地址,局部变量和保存的寄存器保留的堆栈空间。
创建堆栈框架步骤:
o:如果有传递参数, 则压入堆栈
o:子例程被调用,子例程的返回地址压入堆栈
o:子例程开始执行时,EBP被压入堆栈
o:把EBP的值设为ESP的值,从这时开始,EBP就作为寻址所有子例程参数的基址指针使用了
o:如果有局部变量, BP/EBP减去一个数值,以便在堆栈中为局部变量保留空间
o:如果任何寄存器需要保存, 则压入堆栈

堆栈架构的结构受程序的内存模式和参数传递约定的直接影响。

堆...
阅读全文 | 评论次数(0) | 浏览次数(334) | 所属类型(汇编语言笔记)

[2010-07-25 17:27] .COM程序和.EXE程序

以com或exe为扩展名的程序称为暂留程序(相对于驻留程序而言),它通常被转入到足够容纳程序的内存段中执行。当程序执行完毕,扎用的内存也随之释放。如有必要暂留程序可以把一部分代码保留在内存中,这样的程序叫做内存驻留程序(TSR)。
当程序被加载到内存时,MS-DOS在程序的开始为其创建一个特殊的256字节的信息块,称之为程序段前缀(PSP)。PSP结构:
------------------------------------------------------
偏移    内容
80--ff  用于存放dos命令行的副本,和默认的磁盘传输缓冲
5c--7f  FCB1和FCB2. ...
阅读全文 | 评论次数(0) | 浏览次数(467) | 所属类型(汇编语言笔记)

[2010-07-23 12:50] 键盘是如何工作的

BIOS调用int 16h来处理来自键盘的输入。BIOS int 16h不允许重定向。但是在读键时更容易一回,每个扩展键都会产生一个8位的扫描码,对于IBM极其兼容机而言, 每个键的扫描码都是唯一的, 所有的按键都产生扫描码。标准化的ASCII码几乎在所有的计算机上都是相同的。

按键之后会发生一系列事件,这些事件从键盘控制芯片开始直到字符被放入键盘输入缓冲区的数组中结束。键盘缓冲区在任何时刻最多可容纳15次击键,每次击键都会产生两字节的数据(ASCII+SCANCODE)。当用户按下一个键时会产生下面一系列事件:
1,键盘控制器芯片向PC的键盘输入端口发送一个8位扫描码
2,输入端口...
阅读全文 | 评论次数(0) | 浏览次数(1026) | 所属类型(汇编语言笔记)

[2010-07-23 10:22] 文本模式下显示字符的三种方法

1,通过DOS层访问。任何运行或者模拟DOS的计算机都能够使用int 21h 在屏幕上显示字符。 输入输出也很方便的重定向到其他设备上。缺点就是输出较慢而且不能控制文本颜色

2,通过BIOS层访问。使用BIOS提供的int 10h 服务输出字符,这种方式执行起来较快,且允许指定输出文本的颜色。缺点是不能重定向。

3,直接访问视频区。字符直接送入显存, 执行时瞬时的, 输出不能重定向。

应用程序在选择使用何种访问方式不尽相同。 要求性能高的程序选择直接写屏, 其他一些则选择BIOS层访问。需要重定向的时候, 选择DOS层访问。
注意:DOS中断调用BIOS过程。而BIOS过程...
阅读全文 | 评论次数(0) | 浏览次数(324) | 所属类型(汇编语言笔记)

[2010-07-22 09:51] 关于PSP的一点知识

在dos下执行某个程序, 则它的各个段以及指针寄存器寻址的位置以及内存的组织如下图:
偏移                   段
-----------------------
|                     |
|                     |
|程序和所有的程序段   |
|                     |
|                     |
|                     |
|                     |
|---------------------|0000:00FFH CS和SS  ...
阅读全文 | 评论次数(4) | 浏览次数(1503) | 所属类型(汇编语言笔记)

[2010-07-21 16:10] 基本VGA显示系统

基本的VGA显示系统具有多种显示模式。dos中常用的模式是:16色640X480模式和256色320X200模式。
VGA图形方式显示位于存储地址A0000H到AFFFFH之间的视频存储区。
文本方式显示位于B0000H到B7FFFH之间或者B8000H到BFFFFH之间的视频存储区。
当选择256色320X200模式时,显示内存中的每个字符为对应一个像素或一个图像元素的颜色色值,即256种颜色的某种颜色。 这种显示方式称之为位图显示。该图形显示模式(13H)要用到64000字节的内存, 直接定位于内存的A0000H到AF9FFH之间。这种显示方式显示256种颜色。他的内存组织跟16色的...
阅读全文 | 评论次数(0) | 浏览次数(1011) | 所属类型(汇编语言笔记)
页码数(5):  1  2  3  4  5