欢迎来到天天文库
浏览记录
ID:56891853
大小:492.50 KB
页数:21页
时间:2020-07-20
《汇编语言程序例.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第1章Windows汇编语言程序设计基础知识21第1章Windows汇编语言程序设计基础知识1.1如何学习Windows汇编语言汇编语言是在机器语言之上的助记符语言,即用符号来表示二进制码,以便用户记忆,例如指令MOVAX,1234是将数1234送到AX寄存器,这条指令编译后是个二进制数。如果用大篇幅讲解指令及一些基本算法,那又回到DOS汇编语言去了。书中把指令系统详细列出并给出使用例,程序中用到某条指令时,可随时查找。由于编译系统提供了很多高级语法,使Windows汇编语言与高级语言已很相似,因此,我们在注意掌握基本指令的基础上,把注意力放在
2、如何用汇编语言指令或伪指令调用Windows提供的API函数上。这样才能体现出Windows汇编语言的特点。1.2Windows汇编语言与DOS汇编语言的区别在DOS和Windows操作系统下,80x86芯片的指令系统是一样的。在DOS操作系统实模式下,寄存器都是16位的,要访问1MB的内存空间,必须用分段的概念(因为216=10000h=64KB,即寻址范围从0000到0FFFFh,只能访问64KB,详细原理见书中“地址线的根数和寻址范围的关系”章节),因而提出了相对地址的概念。这个概念给学DOS汇编的人带来了很大难度。在Windows操作系
3、统下,寄存器都是32位的(232=100000000h=4GB,寻址范围从00000000到0FFFFFFFFh,即能访问4GB)。这使Windows汇编语言可以工作在平坦模式,即没有分段的概念,这样Windows汇编语言比DOS汇编语言更好学(再也没有分段的麻烦了)!在DOS操作系统,用户可以用汇编语言指令访问计算机的所有资源。但是,在Windows操作系统下,汇编语言中的一些特权指令(例如IN,OUT等)是不许用户使用的,除非你编写了驱动程序。微软这样做是为了操作系统自身的安全,但也给用户开发程序带来了不便。在DOS操作系统下,用户可以用系
4、统BIOS提供的调用口int第1章Windows汇编语言程序设计基础知识2113h直接访问硬盘,而在Windows操作系统下是不能使用的。要想直接访问硬盘,必须使用Windows操作系统提供的API调用函数。1.3二进制数1.3.1将十进制数转为二进制、八进制和十六进制数将十进制数转为二进制数的方法,一般教科书中都给出除2求余的方法,这种方法用起来不方便。下面给出一种比较快的计算方法。1.将十进制整数转为二进制数任何一个整数,都是由以下数中的一些数相加的结果。20=1210=102421=2211=202822=4212=409623=8213
5、=819224=16214=1638425=32215=3276826=64216=6553627=128217=13107228=256218=26214429=512219=524288例1:将十进制数31转为二进制数。第1章Windows汇编语言程序设计基础知识21例2:将8193转为二进制数。2.将十进制小数转为二进制数任何一个小数,都是以下数中的一些数相加的结果。2–1=0.52–2=0.252–3=0.1252–4=0.0625例如:将十进制数0.625转为二进制数。注意:小数有除不尽(除2)的数,由于是小数点后的数,只要有一定的精
6、度就可舍弃。如果一个数既有整数部分,又有小数部分,则分别转换,转换后加入小数点就可以了。3.将十进制数转为八进制数和十六进制数将十进制数转为二进制数后,再转为八进制数和十六进制数就很简单了。结论如下。整数:将二进制整数从右往左3位一组(不够时左边补0),便成为八进制数。将二进制整数从右往左4位一组(不够时左边补0),便成十六进制数。小数:将二进制小数从左往右3位一组(不够时右边补0),便成为八进制数。将二进制小数从左往右4位一组(不够时右边补0),便成为十六进制数。第1章Windows汇编语言程序设计基础知识21例如:十进制(D)二进制(B)八
7、进制(O)十六进制(H)000011112102231133410044510155611066711177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F二进制从右往左3位一组八进制16100002010二进制从右往左4位一组十六进制1710001211118100102212191001123132010100241421101012515221011026162310111271724110003018251100131192611010321A2
8、711011331B2811100341C2911101351D3011110361E3111111371F321000004020注意:二进制数有两
此文档下载收益归作者所有