位汇编语言程序设计稿

上传人:lcm****801 文档编号:57364614 上传时间:2018-10-21 格式:PPT 页数:804 大小:5.67MB
返回 下载 相关 举报
位汇编语言程序设计稿_第1页
第1页 / 共804页
位汇编语言程序设计稿_第2页
第2页 / 共804页
位汇编语言程序设计稿_第3页
第3页 / 共804页
位汇编语言程序设计稿_第4页
第4页 / 共804页
位汇编语言程序设计稿_第5页
第5页 / 共804页
点击查看更多>>
资源描述

《位汇编语言程序设计稿》由会员分享,可在线阅读,更多相关《位汇编语言程序设计稿(804页珍藏版)》请在金锄头文库上搜索。

1、2018/10/21,1,32位汇编语言程序设计,计算机科学与信息工程学院 赵建州,2018/10/21,2,前 言,32位汇编语言程序设计是计算机软件课程。也是计算机专业学生的必修课程,与其他程序设计语言相比,汇编语言对机器的硬件层封装最少,在操作系统的控制下允许程序员最大限度地直接访问计算机硬件。汇编语言从语言的角度逼真地描述了微处理器的体系结构,从软件角度描述了计算机系统硬件层的运行规则。不同的CPU体系有不同的汇编语言。本课介绍的是Intel 80X86CPU系列的32位汇编语言。,2018/10/21,3,在学习计算机专业其他课程时,会遇到一些该课程不能解答的问题:常数为什么不能修改

2、,数据为什么要有数据类型,指针为什么也要有数据类型,为什么C/C+语言中数组的下标从0 开始,为什么不能用值传递参数或自动局部变量从函数带回信息,函数的形参变量和自动局部变量放在内存的哪一部分,它们为什么会随着函数的结束而消失, C/C+语言中为什么要区分整数运算和浮点数运算等等,通过学习32位汇编语言程序设计,会帮助你理解许多其他课程留下的问题。,2018/10/21,4,第一章 汇编语言单词第二章 CPU映像和机器数第三章 内存数据映像第四章 操作数寻址方式第五章 输入输出函数第六章 整型运算第七章 整型控制结构,结束放映,2018/10/21,5,第八章 浮点型运算第九章 指针和字符串第

3、十章 数组和串第十二章 过程,结束放映,2018/10/21,6,第一章 汇编语言单词,1.1 汇编语言字符集和单词 1.2 注释符 1.3 专用符号 1.4 保留字 1.5 标识符 1.6 汇编语言程序格式,2018/10/21,7,1.1 汇编语言字符集和单词,汇编语言采用ASCII码字符作为自己语言的字符集。 汇编语言的单词由一个或多个ASCII码字符组成,它们对于汇编程序有预定的语法意义。汇编语言的单词包括注释符、专用符号、保留字、标识符等。,2018/10/21,8,1.2 注释符,汇编语言的注释符分单行注释符和跨行注释符。单行释符 /可以放在程序某行中任何位置,编译程序忽略从 /

4、开始到行尾的所有内容。跨行注释符 /* */编译程序忽略从 /* 开始到 */ 之间的所有内容。,2018/10/21,9,例1:注释的用法(1)跨行注释符/* 下面的程序段对数组实施快速排序算法 */ mov ( 365 , ecx); /* 给计数器赋初值 */(2)单行注释符mov ( 365 , ecx); / 给计数器赋初值,2018/10/21,10,1.3 专用符号,专用符号主要包括汇编语言的运算符、分隔符、数制标识符。专用符号有一个字符的也有两个字符的。下面是一个字符的专用符号。* / + - ( ) : ; , . = & | ! $ % “ 下面是两个字符的专用符号。& |

5、 = != = := ,2018/10/21,11,例2:专用符号举例mov( ,2018/10/21,12,1.4 保留字,保留字也称关键字,保留字包括 CPU中的寄存器名,汇编语言的指令助记符,语句,数据类型名称等。汇编语言的保留字不区分大小写。,2018/10/21,13,CPU中的寄存器名 AL AH AX EAX BL BH BX EBX CL CH CX ECX DL DH DX EDX SI ESI DI EDI BP EBP SP ESP ST0 ST1 ST2 ST3 ST4 ST5 ST6 ST7,2018/10/21,14,指令助记符和语句 ADD INC ADC SUB

6、 DEC CMP NEG SBB MUL IMUL INTMUL DIV IDIV MOD IMOD IF ELSE ENDIF WHILE ENDWHILE FOR ENDFOR FOREVER ENDFOR REPEAT UNTIL,2018/10/21,15,数据类型名称 int8 int16 int32 uns8 uns16 uns32 real32 real64 real80 byte word dword qword lword char string cset array boolean,2018/10/21,16,其他符号program begin end procedure

7、typeval static var readonly const 如果想了解汇编语言专用符号和保留字的更多的相关信息,请参考HLA手册。,2018/10/21,17,1.5 标识符,标识符可用作程序名、变量名、常量名、函数名、过程名、标号等。汇编语言的标识符必须以字母或下划线开始,后面可跟字母、数字、下划线。由于受MASM的限制,标识符的长度不能超过236个ASCII字符。汇编语言的标识符区分大小写字母。标识符不能与保留字同名。,2018/10/21,18,例3:合法的标识符和非法的标识符(1)合法的标识符addtion big first lasta1 s1 small Small(2)非

8、法的标识符%a1 5s AL s1,2018/10/21,19,1.6 汇编语言程序格式,program 程序名;begin 程序名; / 代码段end 程序名;,2018/10/21,20,程序中的program,begin,end 是汇编语言的保留字。程序名要按标识符取名。声明段用来声明各种变量、常量为它们赋予初值;还用来声明过程。begin和end之间是代码段。汇编语言提供了输入输出标准库,为了使用输入输出标准库,必须在程序开始用包含语句把标准库的头文件“stdlib.hhf“包含到程序中来。,2018/10/21,21,例3:显示“汇编语言编程开始了!” 的汇编语言程序 program

9、 HelloWorld; #include( “stdlib.hhf“ ) / 包含标准库头文件 begin HelloWorld;stdout.put( “汇编语言编程开始了!“, nl );stdout.put( “击回车键退出 “ );stdin.readLn(); end HelloWorld;,2018/10/21,22,2018/10/21,23,2018/10/21,24,2018/10/21,25,如果用C+编写同样的程序,编写的代码如下: #include “stdafx.h“ #include “stdio.h“int main(int argc, char* argv)

10、printf(“汇编语言编程开始了!n“);return 0; ,2018/10/21,26,#include “stdafx.h“ #include “iostream“ using namespace std; int main(int argc, char* argv) cout“汇编语言编程开始了!“endl;return 0; ,2018/10/21,27,汇编语言程序具有占用空间小,运行效率高 的优点,与这个汇编语言程序相似的C/C+ 程序经编译后产生的执行代码约有152KB, 而汇编语言编译的结果不到8K,汇编语言程 序常用于嵌入系统,控制系统编程,也用于 编写设备驱动程序,而设

11、计图形界面不是汇 编语言的特长,每种程序语言都各有擅长, 在应用中注意要扬长避短。,2018/10/21,28,第二章 机器数和CPU映像,2.1 整数机器数编码 2.2 机器整数的加减法运算及溢出问题 2.3 字符机器数编码 2.4 Intel 80x86 CPU映像,2018/10/21,29,2.1整数机器数编码,汇编语言语法把二进制整数分为两种,无符号和有符号整数。无符号整数是指数据的每一位都代表数值。在汇编语言程序设计里,内存地址(指针),循环次数,ASCII 码等都是无符号整数。数学运算中整数值有正数和负数之分,在计算机元件级怎样表示正号和负号?答案是只能用数字表示正号和负号。因此

12、必须进行符号和数值混合编码。,2018/10/21,30,(一)原码表示法 如果正数的符号用0 表示,负数的符号用1 表 示,绝对值用二进制数表示,这就是原码表 示法。假设计算机字长是n 位,能表示n-1位 有符号整数,设X=Xn-2Xn-3X0,原码表示是:0Xn-2Xn-3X0 X 0 X源码=1Xn-2Xn-3X0 X 0,2018/10/21,31,例1:设n=8,求二进制数10010, -10010的原 码。 二进制数 10010的原码是00010010,在此最 高位的0代表 + 号。 二进制数-10010的原码是10010010,在此最 高位的1代表 号。 根据定义, 0 在原码中

13、有两种表示,所以计 算机内整数不采用原码表示法。,2018/10/21,32,(二)补码表示法 n位二进制补码的定义是:X 0 X 2n-1-1 X补码=2n+X -2n-1 X 0 X是n-1位二进制整数,2018/10/21,33,二进制数转换为补码 二进制正数转换成补码与原码相同。 二进制负数转换成补码有两种方法: 方法1:根据定义求补码 例2:n=8,求( -1010111) 2和-119的补码。 -1010111补码 = 28-1010111=100000000-1010111=10101001-119补码 = 28-1110111=100000000-1110111=1000100

14、1,100000000101011110101001,100000000111011110001001,2018/10/21,34,方法2:写出负数的绝对值,求绝对值的补码,然后对每位取反(包括符号位),末位加1。例3:n=8,求(- 1010111)2和-119的补码。计算(- 1010111)2 的补码 1 求负数绝对值 1010111 2 求补码 01010111 / n位补码 3 取反码 10101000 4 加1 10101001,2018/10/21,35,计算 - 119 的补码 1. 十进制换成二进制 - 1110111 2求负数绝对值 1110111 3求补码 01110111 4取反码 10001000 5末位加1 10001001,2018/10/21,36,0在补码中只有一种表示法。整数数值在计算 机元件级用二进制补码表示。注意补码表示是 非对称性的。8位补码表示有符号数的范围是 -128127,16位补码表示有符号数的范围是 -3276832767 。 我们将补码逐位取反,再加1的运算称为求补 运算。正数的补码经过求补运算结果是它相反 数的补码;负数的补码经过求补运算结果也是 它相反数的补码。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号