摘要: 子程序的定义 子程序的定义方式如下所示。 子程序名 proc [距离][语言类型][可视区域][USES 寄存器列表][,参数:类型]...[VARARG] local 局部变量列表 指令 子程序名 endp proc和endp伪指令定义了子程序开始和结束的位置, proc后面跟的参数是子程序的属性和输入参数... 阅读全文
posted @ 2009-04-11 16:31 jasonM 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 变量的使用 1. 以不同的类型访问变量 这个话题有点像C语言中的数据类型强制转换,C语言中的类型转换指的是把一个变量的内容转换成另外一种类型,转换过程中,数据的内容已经发生了变化,如把浮点数转换成整数后,小数点后的内容就丢失了。在MASM中以不同的类型访问不会对变量造成影响。 举一个简单的例子,先以db方式定义一个缓冲区: szBuffer db 1024 dup (?) 然... 阅读全文
posted @ 2009-04-11 16:08 jasonM 阅读(632) 评论(0) 推荐(0) 编辑
摘要: 标号、变量和数据结构 当程序中要跳转到另一位置时,需要有一个标识来指示新的位置,这就是标号,通过在目的地址的前面放上一个标号,可以在指令中使用标号来代替直接使用地址。 使用变量是任何编程语言都要遇到的工作,Win32汇编也不例外,在MASM中使用变量也有需要注意的几个问题,错误地使用变量定义或用错误的方法初始化变量会带来难以定位的错误。变量是计算机内存中已命名的存储位置,在C语言... 阅读全文
posted @ 2009-04-11 14:51 jasonM 阅读(1029) 评论(0) 推荐(0) 编辑
摘要: API是什么 Win32程序是构筑在Win32 API基础上的。在Win32 API中,包括了大量的函数、结构和消息等,它不仅为应用程序所调用,也是Windows自身的一部分,Windows自身的运行也调用这些API函数。 在DOS下,操作系统的功能是通过各种软中断来实现的,如大家都知道int 21h是DOS中断,int 13h和int 10h是BIOS中的磁盘中断和视频中断。当应用程序要引... 阅读全文
posted @ 2009-04-11 14:22 jasonM 阅读(859) 评论(0) 推荐(0) 编辑
摘要: 3.1.2 段的定义 1. 段的概念 把上面的Win32的Hello World源程序中的语句归纳精简一下,再列在下面: .386 .model flat,stdcall option casemap:none .data .code end 开始标号 上一节讲到的选项、模式等定义并不会在编译好的可执行程序中产生什么东西,它们只是“说明”,而真正的数据和... 阅读全文
posted @ 2009-04-11 13:42 jasonM 阅读(522) 评论(0) 推荐(0) 编辑
摘要: Win32汇编源程序的结构 任何种类的语言,总是有基本的源程序结构规范,在讨论C语言的书中,大家都会记得这个非常经典的Hello World程序: #include main() { printf("Hello, world"n"); } 像这样一个程序,就说明了C语言中最基本的格式,main()中的括号和下面的花括号说明了一个函数的定义方法,printf语句说明了一个函数的调... 阅读全文
posted @ 2009-04-11 13:37 jasonM 阅读(685) 评论(0) 推荐(0) 编辑
摘要: 段描述符 前面我们已经说明了使用段选择符来定位描述符表中的一个描述符。段描述符是GDT和LDT表中的一个数据结构项,用于向处理器提供有关一个段的位置和大小信息以及访问控制的状态信息。每个段描述符的长度是8字节,含有3个主要字段:段基地址、段限长和段属性。段描述符通常由编译器、链接器、加载器或者操作系统来创建,但绝不是应用程序。图4-13给出了所有类型段描述符的一般格式。 498)this.s... 阅读全文
posted @ 2009-04-10 11:43 jasonM 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 内存寻址 内存是指一组有序字节组成的数组,每个字节有唯一的内存地址。内存寻址则是指对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串。80x86支持多种数据类型:1字节、2字节(1个字)或4字节(双字或长字)的无符号整型数或带符号整型数,以及多字节字符串等。通常,字节中某一位的定位或寻址可以基于字节来寻址,因此最小数据类型的寻址... 阅读全文
posted @ 2009-04-10 01:03 jasonM 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 进程如何使用内存? 毫无疑问,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。 对任何一个普通进程来讲,它都会涉及到5种不同的数据段。稍有编程知识的朋友都能想到这几个数据段中包含有“程序代码段”、“程... 阅读全文
posted @ 2009-04-09 22:54 jasonM 阅读(658) 评论(1) 推荐(0) 编辑
摘要: 1.我们前面讲过,cpu的地址线,数据线,控制线与存储器打交道时,都是将它们看成是若干连续的存储单元组成的逻辑存储器,俗称:内存地址空间。 Cpu除了与存储器打交道外,还与哪些芯片进行访问呢: 1. 接口卡上的芯片。(比如网卡,显卡)上的接口芯片。 2. 主板上的接口芯片。Cpu通过它们对部分外设进行访问。 3. 其它芯片。 每个芯片都有很多寄存器,都可以... 阅读全文
posted @ 2009-04-06 21:40 jasonM 阅读(1165) 评论(1) 推荐(0) 编辑