32位汇编语言程序设计17稿412c._第1页
32位汇编语言程序设计17稿412c._第2页
免费预览已结束,剩余29页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、序32位汇编语言程序设计 是计算机软件课 程。也是计算机专业学生的必修课程,与其 他程序设计语言相比, 汇编语言对机器的硬 件层封装最少,在操作系统的控制下允许程 序员最大限度地直接访问计算机硬件。汇编 语言从语言的角度逼真地摊述了微处理器的 体系结构,从软件角度描述了计算机系统硬 件层的运行规则。不同的CPU体系有不同的 汇编语言,即使同一种CPU体系也有 不 同 的汇 编 语 言 。 本 课 学 习 的 是Intel80X86CPU系 列的32位汇编语言HLA。2013-8 21?.vEl3Illi汇编语言程序设计2013-8 21为什么要学习汇编语言?在学习计算机专业其他课程时,会遇到一

2、些该课程 不能解答的问题:常数为什么不能修改,数据为什 么要有数据类型,为什么C/C+语言中数组的下标 从0开始,为什么不能用值传递参数或自动局部变 量从函数带冋信息,函数的形参变量和自动局部变 量放在内存的哪一部分,它们为什么会随着函数的 结束而消失,C/C+语言屮为什么要区分整数运算 和浮点数运算,编译程序为什么要便用逆波兰式等 等,学习32位汇编语言程序设计后,会帮助你理解 许多其他课程留下的问题。2013 8 213第一章汇编语言单词第一章汇编语言单词第二章第二章CPU映像和机器数映像和机器数第三章内存数据映像第三章内存数据映像 第四章操作数寻址方式第四章操作数寻址方式第五章输入输出函

3、数第五章输入输出函数第六章整型运算第六章整型运算 第七章整型控制结构第七章整型控制结构2013-8 21第八章浮点型运算第八章浮点型运算 第九章指针和字符串第九章指针和字符串 第十第十章数组和串章数组和串 第十二章过程第十二章过程2013-8 215-章汇编语言字符集和单词1.1汇编语言字符集1.2注释符1.3专用符号1.4保留字1.5标识符1.6汇编语言程序格式2013-8 21I吵吵I 61 1汇编语言字符集汇编语言采用ASCII码字符作为自己语 言的字符集。汇编语言中的单词只能用字符集中的字 符按语言语法规定组成。2013-8 212013-8 21101.2注释符零编语言的注释符分单行

4、注释符和跨行注释单行释符/可以放在程序某行中任何位置,汇编程序 忽略从/开始到行尾的所有内容。可跨行注释符/* */汇编程序忽略从/*开始到*/之间的所有内 容。2013-8 21例1:注释的用法(1)可跨行注释符/*下面的程序段对数组 实施快速排序算法 */mov ( 365 , ecx);/*给计数器赋初值*/( (2)单行注释符mov ( 365 , ecx); /给计数器赋初值1 3专用符号专用符号主要包括汇编语言的运算符、分专用符号主要包括汇编语言的运算符、分 隔符隔符、数制标识符。专用符号有一个字符数制标识符。专用符号有一个字符 的也有两个字的也有两个字符的。下面是常用的一个字符的

5、。下面是常用的一个字 符的专用符号。符的专用符号。* / + -();,=& $ %a: 下面是常用的两个字符的专用符号。下面是常用的两个字符的专用符号。-= !=2013-8-21IQH例2:专用符号举例mov:8 data , eaxstdout.put( 32位汇编语言,nl );stdout.put(pi=H,pi 10 3, nl);stdout.put( $6F, nl);stdout.put( 10101010, nl );2013 8 21122013-8 21141 4保留字保留字也称关键字,保留字包括CPU中的寄 存器名,汇编语言的指令助记符,数据类型 名称等。汇编

6、语言的保留字不区分大小写。13CPU中的寄存器名ALAHAXEAXBLBHBXEBXCLCHexECXDLDHDXEDXSIESIDIEDIBPEBPSPESPSTO ST1 ST2 ST3 ST4 ST5 ST6 ST72013-8 2116指令助记符ADDINCADCSUBDECCMP NEGSBBMULIMULINTMULDIVIDIVMOD IMOD2013 8 2115数据类型名称 int8int16int32 uns8uns16uns32 real32 real64real80 byteworddwordqwordIword charstringcsetarrayboolean其他

7、符号其他符号program begin end procedure type val staticvar readonly const2013-8 21U18如果想了解汇编语言专用符号和保留字的更 多的相关信息,请参考HLA手册。2013 8 21171.5标识符标识符可用作程序名、变量名、常量名、函 数名、过程名、标号等。汇编语言的标识符汇编语言的标识符 必须以字母必须以字母或下划线开始,后面可跟字母、或下划线开始,后面可跟字母、 数字、下划线。数字、下划线。由于受MASM的限制, 标识符 的长度不能超过236个ASCII字符。汇编语言编语言 的标识符区分大小写字的标识符区分大小写字母。母。

8、标识符不能与保留字同名。如果标识符与保 留字相同,汇编程序将按照保留字处理。2013-8 2120例3:合法的标识符和非法的标识符(1)合法的标识符addtion bigfirstlasta1s1small Small(2)非法的标识符1.6汇编语言程序基本格式program#include( ”stdlib.hhf”)19begin;vv 程序指令序列/数据段/代码段end:2013 8 2122程序中的program,begin,end是汇编语言的 保留字。程序名要按标识符取名。数据段用 来定义各种变量、常量;该位置还用来定义 过程(子程序) 。begin和end之间是代码段。 汇编语言提

9、供了输入输出标准库,为了使用 输入输出标准库,必须在程序开始用包含语 句把标准库的头文件”stdlib.hhf”包含到程序 中来。2013-&21例3:显示“汇编语言编程开始了!”的汇编 语言程序program HelioWorld;#include(”stdlib.hhf”)/包含标准库头文件beginHelioWorld;stdout.put(”汇编语言编程开始了!”,nl);stdout.put( ”击回车键继续”);stdin.readLn();end HelioWorld;212013-8 2124汇编语言程序执行前的处理在编辑器里编写好的汇编语言程序乂称源程 序,计算机无法

10、执行这样的程序,我们知道 计算机其实只认识二进制代码,为了让计算 机能执行源程序,需要把源程序翻译成二进 制代码,这个翻译器我们称为汇编程序,翻 译器产生二进制代码,我们称为目标程序, 这样的程序还不能执行,还必须为它链接必 要的系统代码,这个任务由链接程序完成。 琏接程序产生可执行代码,它以exe文件表O2013 8 2123结束把源程序变为可执行程序的过程盂s2013-8 2126汇编语言集成开发环境为了提高编写程序的效率,专门开发了编程 的集成开发环境(IDE),我们课程使用的集 成开发环境是RadASM ,它是一种绿色产品, 适合许多种汇编语言,使用方便。我们课程 主要使用的软件有hl

11、a ,masm32 ,RadASM, Ollydbg。2013-8 21JR RadASM汇圧仗畑宕V匚 2 童昨开冷汇2言叭幵妁hl创4 文件处啦)枯式Te)工a a(ao矽egIA)WJ(H)cawici oa 僅讦二Te(決回|去4 27a刁謝252013-8 21262013-8 2128If:S Char 77 Pg: 11912013 8 21272013-8 2130#include ”stdafx.h”#include ”iostream”using namespace std;int main(int argc, char* argv)coutH汇编语言编程开始了 !vven

12、dl;return 0;2013-8 21312013-8 21ran32汇编语言程序具有占用空间小, 运行效率高 的优点,与这个汇编语言程序相似的C/C+程序经编详后产生的执行代码约有152KB,而汇编语言编译的结果不到8K,汇编语言程 序常用于嵌入系统,控制系统编程,也用于 编写设备驱动程序,而设计图形界面不是汇 编语言的特长, 每种程序语言都各有扌冉长,在应用中注意要扬长避短。2013 8 21第二章机器数和CPU映像2.1整数机器数编码22机器整数的加减法运算及溢出问题2.3字符机器数编码2.4 Intel 80 x86 CPU映像3121整数机器数编码汇编语言把二进制整数分为两种,无

13、符号和有符号整数。无符号整数是指数据的每 一位都代表数值。在汇编语言程序设计里, 内存地址(指针),循环次数,ASCII码等都 是无符号整数。数数学运算中整数值有正数和学运算中整数值有正数和 负数之分,在计算机元件负数之分,在计算机元件级怎样表示正号和级怎样表示正号和 负号?答案是只能用数字负号?答案是只能用数字0和和1表示正号和负表示正号和负 号。因此必须进行符号和数值混合编号。因此必须进行符号和数值混合编码。码。2013-8-2133(一)原码表示法如果正数的符号用0表示,负数的符号用1表 示,绝对值用二进制数表示,这就是原码表 示法。假设计算机字长是n位,能表示ri1位 有符号整数,设x

14、=xn_2xn_3.xo,码表不是:r xn.2xn.3,.x0 xoX源码=YI xn.2xn.3.x0 xo2013 8 21342013 8 2136例仁 设n=8,求二进制数10010, -10010的原 码。二进制数10010的原码是0010010,在此最 高位的0代表+号。二进制数-10010的原码是0010010,在此最 高位的代表-号。根据定义,根据定义,0在原码中有两种表示,所以计在原码中有两种表示,所以计 算机内整算机内整数不采用原码表示法。数不采用原码表示法。2013 8 2135(-)补码表示法n位二进制整数补码的定义是:X0X 2n-1-1X补码=彳2JX -2n-1

15、X0n位二进制整数补码表示X是是n 1位二进制整数位二进制整数2013-8 2138二进制数转换为补码二进制正数转换成补码与原码相同。 二进制 转换成补码有两种方法: 方法1:根据定义求补码例2:n=8,求(-1010111)2和的补码。-1010111补码=28-1010111=100000000-1010111=10101001-119补码=28-1110111= 100000000-1110111=100010012013-8 21方法2:写出负数的绝对值,求绝对值的补 码,然后对每位取反(包括符号位),末位加1o例3:n=8,求(-1010111)2和的补码。100000000 101

16、0111100000000 1110111372013-8 2139计算(-1010111)2的补码1.求负数绝对值10101112.求补码10101113.取反码01010004.力力M0101001/ n位补码位补码2013-8 21计算-119的补码1十进制换成一进制-11101112.求负数绝对值3.求补码4.取反码5.末位加12013-8 210在补码中只有一种表示法。整数数值在计算 机元件级用二进制补码表示。注意补码表示是 非对称性的。8位补码表示有符号数的范岡是-128-127, 16位补码表示有符号数的范围是3276832767。我们将补码逐位取反,再加1的运算称为求补运算。一

17、个整数的补码经过求补运算结果是该整数的补码经过求补运算结果是该 数相反数相反数的补码。数的补码。求补运算X补.卜X补计算补码的真值1110111000392013-8042对于正数补码,直接用权的多项式展开求和。例:已知n=8位,求01001010的真值用权的多项式展开求和:原式=26+23+21=74对于负数, 有两种方法, 每种方法有多个计 算步骤。2013 8 2141方法一:根据补码的定义 X补码=2n+X X(2JX补码)例:求0001001(-的补码)真值 X = - (28- 0001001 ) =- 1110111 =-11910000000010001001111011120

18、13-8 2144方法二:对负数的补码求补,得到它的绝对值, 计算绝对值的权的多项式的和,然后对和实施 取负运算。例:求0001001 (- 1110111的补码)真值(1)求补0001001 01110111(2)取负01110111一-01110111(3)求权多项式之和一01110111 = -1192013-8 2143我们看同一个整数补码用不同位数表示时有何差别。 例4:求117,17的8位和16位的补码。117的补码n = 801110101n = 160000000001110101-117的补码n = 810001011n = 161111111110001011从例子中得出:一个8位补码数要变成16位补码数时,只需用它的符号位的值填满高8位。这个操作称为因为在计算机元件级无法区分一个二进制数是 有符号的还是无符号的。所以在机器内一个二 进制数可代表有符号数,也可代表无符号数。 例如:假定n=8位,机器内有个整数%10001010,它 可以代表无符号数138;也可以代表右符号数-118o汇编语言程序员对程序中的整数哪些是 无符号的,哪些是有符号的必须一清二楚。2.2机器整数加减法运算及溢出问题(-)零扩展和符号扩展计算机内整数的加法和减法运算要求参加运算数据 的反度要相同。如果参加运算的数据长度不同时, 在运算之前要把位数短

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论