《1.2微机原理与应用ppt课件》由会员分享,可在线阅读,更多相关《1.2微机原理与应用ppt课件(46页珍藏版)》请在金锄头文库上搜索。
1、怎么把程序和数怎么把程序和数据存入计算机?据存入计算机?就像把饼干放进就像把饼干放进盒子里面么?盒子里面么?通过汇编软件经通过汇编软件经过汇编链接形成过汇编链接形成可执行文件。可执行文件。汇编语言程序的上机处理过程汇编语言程序的上机处理过程主要的汇编程序:主要的汇编程序:MASM,TASM汇编语言言源程序源程序(文本文档)(文本文档)汇编软件件汇编MASM机器机器语言言目目标文件文件(.obj)连接接软件件link机器机器语言言可可执行文件行文件(exe,com)执行程序行程序汇编语言程序的开发过程汇编语言程序的开发过程编编辑辑文本编辑器,如文本编辑器,如EDIT源程序:文件名源程序:文件名.
2、asm汇汇编编汇编程序,如汇编程序,如ML.EXE连接接连接程序,如连接程序,如LINK.EXE调调试试调试程序,如调试程序,如CodeView错误错误错误错误错误错误错误错误目标模块:文件名目标模块:文件名.obj可执行文件:文件名可执行文件:文件名.exe应用程序应用程序第第3章章 汇编语言基础汇编语言基础3.1 源程序结构源程序结构3.1.1 语句格式语句格式3.1.2 程序格式程序格式3.1.3 开发方法开发方法3.2 数据表示数据表示3.2.1 数制数制3.2.2 编码编码3.2.3 常量表达常量表达3.3 变量应用变量应用3.3.1 变量定义变量定义3.2.2 变量属性变量属性语句
3、格式语句格式程序由程序由语句句组成成一个一个语句常占一行句常占一行一个一个语句不超句不超过132个字符,个字符,4个部分个部分执行性行性语句:表达句:表达处理器指令硬指令)理器指令硬指令)标号号: 硬指令助硬指令助记符符 操作数操作数,操作数操作数;注注释例:例:first: mov ah, 9 ;使得使得AH=9说明性明性语句:表达句:表达伪指令,控制指令,控制汇编方式方式名字名字 伪指令助指令助记符符 参数参数,参数参数,;注注释例:例: msgdb Hello, Assembly !,13,10, $标号与名字标号与名字标号:号:执行性行性语句中句中冒号分隔冒号分隔反映反映处理器指令在主
4、存中的理器指令在主存中的逻辑地址地址名字:名字:说明性明性语句中句中空格或制表符分隔空格或制表符分隔表示表示变量名、量名、逻辑段名、子程序名等段名、子程序名等反映反映变量、量、逻辑段和子程序等的段和子程序等的逻辑地址地址标号和名字是用号和名字是用户自定自定义的的标识符符标识符标识符Identifier)最多由最多由31个字母、数字及个字母、数字及规定的特殊符号如定的特殊符号如 _、$、?、)、)组成,不能以数字开成,不能以数字开头一个源程序中,用一个源程序中,用户定定义的每个的每个标识符必符必须唯一唯一不能是不能是汇编程序采用的保留字程序采用的保留字保留字保留字Reserved Word是是编
5、程程语言本身需要使言本身需要使用的各种具有特定含用的各种具有特定含义的的标识符、也称符、也称为关关键字字硬指令助硬指令助记符符 MOV伪指令助指令助记符符 DB操作符操作符OFFSET寄存器名寄存器名EAX预定定义符号符号data取名原取名原则类似高似高级语言言但不区但不区别大小写字母大小写字母硬指令硬指令助助记符:帮助符:帮助记忆指令功能的符号指令功能的符号硬指令助硬指令助记符符对应处理器指令,表示一种操作理器指令,表示一种操作数据数据传送指令送指令mov ah,9;使得使得AH9助助记符:符:MOV取自取自Move)功能:将源操作数功能:将源操作数传送至目的操作数送至目的操作数将数字将数字
6、9传送到送到AH寄存器中的指令寄存器中的指令伪指令伪指令伪指令助指令助记符符对应指示符,表达一个指示符,表达一个汇编命令命令字字节变量定量定义伪指令指令 助助记符:符:DB取自取自Define Byte) 功能:在主存中占用若干的存功能:在主存中占用若干的存储空空间,用于保,用于保存存变量量值,该变量以字量以字节为单位存取位存取变量名量名MSG包含有段地址和偏移地址包含有段地址和偏移地址操作符操作符OFFSET获得偏移地址得偏移地址mov dx, offset msg ;DX获得得msg的偏移的偏移地址地址操作符操作符SEG获得段地址得段地址mov dx, seg msg ;DX获得得msg的
7、段地的段地址址操作数与参数操作数与参数处理器指令的操作数:表示参与操作的理器指令的操作数:表示参与操作的对象象一个具体的常量一个具体的常量保存在寄存器的数据保存在寄存器的数据保存在存保存在存储器中的器中的变量量逗号前常是目的操作数,逗号后的常是源操作数逗号前常是目的操作数,逗号后的常是源操作数伪指令的参数:指令的参数:常量、常量、变量名、表达式等量名、表达式等可以有多个,参数之可以有多个,参数之间用逗号分隔用逗号分隔注释与分隔符注释与分隔符语句中分号后的内容是注句中分号后的内容是注释对指令或程序指令或程序进行行说明明汇编程序不程序不对它它们做任何做任何处理理注注释利于以后利于以后阅读,建,建议
8、养成养成书写注写注释的良好的良好习惯语句的句的4个个组成部分要用分隔符分开成部分要用分隔符分开标号后的冒号号后的冒号注注释前的分号前的分号操作数操作数间和参数和参数间的逗号的逗号分隔其他部分通常采用一个或多个空格或制表符分隔其他部分通常采用一个或多个空格或制表符注注释使用英文或中文均可使用英文或中文均可分隔符都是英文分隔符都是英文标点点例题例题3-1信息显示程序信息显示程序在数据段在数据段给出出这个字符串形式的信息:个字符串形式的信息:;数据段数据段msgdb Hello, Assembly !,13,10,$;定定义要要显示的字符串示的字符串在代在代码段段编写写显示字符串的程序:示字符串的程
9、序:;代代码段段mov dx,offset msg;指定字符串在数据段的偏移地址指定字符串在数据段的偏移地址mov ah,9int 21h;利用功能利用功能调用用显示信息示信息简化段定义源程序格式简化段定义源程序格式;example.asm.model small;定定义程序的存程序的存储模式模式.486;说明使用的明使用的80x86微微处理器指令理器指令.stack;定定义堆堆栈段段.data;定定义数据段数据段;数据定数据定义数据待填)数据待填).code;定定义代代码段段.startup;程序程序执行起始行起始;主程序指令待填)主程序指令待填).exit;程序程序执行行结束,返回束,返回
10、DOS;子程序指令待填)子程序指令待填)end;汇编结束束存储模式存储模式Memory Model)存存储模式决定一个程序的模式决定一个程序的规模模简化段定化段定义源程序格式中,必源程序格式中,必须有有.MODEL语句句.MODEL 存存储模式模式.MODEL语句确定了程序采用的存句确定了程序采用的存储模式模式一般的小型程序可以一般的小型程序可以选用用SMALL模式模式大型程序大型程序选择LARGE模式模式TINY模式模式创建建COM程序,其他模式程序,其他模式产生生EXE程程序序FLAT模式用于模式用于32位程序中,不能在位程序中,不能在DOS环境境执行行COM程序只有一个程序只有一个逻辑段
11、不超段不超过64KB)逻辑段定义逻辑段定义堆堆栈段定段定义伪指令指令.STACK创建一个堆建一个堆栈段段段名:段名:STACK,程序中可用,程序中可用STACK表示表示默默认是是1KB(1024400H字字节空空间数据段定数据段定义伪指令指令.DATA创建一个数据段建一个数据段段名:段名:DATA,程序中可用,程序中可用DATA表示表示代代码段定段定义伪指令指令.CODE创建一个代建一个代码段段默默认段名:段名:TEXT,程序中可用,程序中可用CODE表示表示处理器选择伪指令处理器选择伪指令缺省情况只缺省情况只汇编16位位8086指令集指令集利用利用32位寄存器完成位寄存器完成32位操作,必位
12、操作,必须加上加上.386及以上及以上处理器的理器的选择伪指令指令留心留心.386及以后的及以后的处理器理器选择伪指令的位置指令的位置在存在存储模式模式MODEL指令之后,默指令之后,默认采用采用16位段位段在存在存储模式模式MODEL指令之前,默指令之前,默认采用采用32位段位段简化段定义源程序格式简化段定义源程序格式;example.asm.model small;定定义程序的存程序的存储模式模式.486;说明使用的明使用的80x86微微处理器指令理器指令.stack;定定义堆堆栈段段.data;定定义数据段数据段;数据定数据定义数据待填)数据待填).code;定定义代代码段段.start
13、up;程序程序执行起始行起始;主程序指令待填)主程序指令待填).exit;程序程序执行行结束,返回束,返回DOS;子程序指令待填)子程序指令待填)end;汇编结束束.startup替替换为:start: mov ax,data mov ds,ax.exit替替换为mov ah,4chInt 21hDOS功能调用功能调用MS-DOS操作系操作系统提供提供给程序程序员的子程序的子程序调用子程序步用子程序步骤类似高似高级语言言调用函数)用函数)(1在在AH寄存器中寄存器中设置系置系统功能功能调用号用号(2在指定寄存器中在指定寄存器中设置入口参数置入口参数(3中断中断调用指令用指令“INT 21H执行
14、功能行功能(4根据出口参数分析功能根据出口参数分析功能调用用执行情况行情况字符串显示功能调用字符串显示功能调用主存的字符串以主存的字符串以“$”作作为结尾符尾符类似似C/C+语言中言中隐含用含用NULL作作为字符串字符串结尾尾功能编号功能编号 AH09H入口参数入口参数 DS DX欲显示的字符串逻辑地址欲显示的字符串逻辑地址(段地址段地址 偏移地址偏移地址)功能说明功能说明 将指定的字符串在当前光标位置开始显示将指定的字符串在当前光标位置开始显示字符串可以是任何长度字符串可以是任何长度可以包含控制字符(如回车可以包含控制字符(如回车0DH,换行,换行0AH)必须以必须以“$”(ASCII码为码
15、为24H)字符结尾)字符结尾汇编结束汇编结束end语句)语句)翻翻译源程序成目源程序成目标模模块的的过程到此程到此结束束源程序的最后必源程序的最后必须有一条有一条END语句句汇编程序不程序不处理理END指令之后的任何内容指令之后的任何内容END伪指令后面可以有一个指令后面可以有一个“标号参数号参数指定程序开始指定程序开始执行于行于该标号所指示的指令号所指示的指令end start执行结束执行结束汇编结束汇编结束程序完整框架程序完整框架 (1)SEGMENT/ENDS伪指令。伪指令SEGMENT和ENDS总是成对使用的。用这对伪指令来指定段的名称和范围。段名SEGMENT本段程序内容(指令语句或
16、伪指令语句)段名ENDS从SEGMENT伪指令之后出现的指令和伪指令都被认为是在该段之内,直至ENDS出现为止。当用于定义数据段、附加数据段和堆栈段时,处于SEGMENT/ENDS伪指令中间的语句,只能包括伪指令语句,不能包括指令语句,一般格式为段名SEGMENT数据定义,存储单元分配等伪指令语句段名ENDS当由SEGMENT/ENDS定义代码段时,中间的语句可包括指令语句和与指令有关的伪指令语句。一般格式为段名SEGMENT指令语句和与伪指令有关的伪指令语句段名ENDS所定义段的名称。段名是标识所定义段的名称。段名是标识符,同一段的符,同一段的SEGMENT/ENDS SEGMENT/END
17、S 伪伪指令前的段名必须一致。指令前的段名必须一致。DATA-SEG SEGMENT DATA_SEG ENDS ; EXTRA_SEG SEGMENT; EXTRA_SEG ENDS ; CODE_SEG SEGMENT; START: CODE-SEG ENDS ; END START ; 源程序模块结束源程序模块结束 定义数据段定义数据段定义附加数据段定义附加数据段定义代码定义代码(即指令即指令)段段STACK_SEG SEGMENTSTACK_SEG ENDS定义堆栈段定义堆栈段ASSUME伪指指令令。ASSUME伪指指令令语句句用用来来告告诉汇编程程序序在在指指令令执行行期期间内内存
18、存的的哪哪一一段段是是数数据据段段,哪哪一一段段是是堆堆栈段段,哪哪一段是代一段是代码段。段。ASSUME伪指令指令语句的格式如下:句的格式如下:ASSUME段段寄寄存存器器名名:段段名名符符,段段寄寄存存器器名名:段段名名符符,上述格式中上述格式中内的内容可有可无。内的内容可有可无。例如:例如:ASSUMECS:MYCODE,DS:MYDATAASSUMEES:MYEXTRA,SS:MYSTACKMYCODE SEGMENT ASSUME CS: MYCOED, DS: MYDATA, ES: MYEXTRA, SS: MYSTACK START: MOV AX, MYDATA MOV DS
19、, AX MOV AX, MYEXTRA MOV ES, AX MOV AX, MYSTACK MOV SS, AX MOV AH,4CH INT 21HMYCODE ENDS END START二进制数二进制数便于便于计算机存算机存储及物理及物理实现特点:逢二特点:逢二进一,由一,由0和和1两个数两个数码组成,成,基数基数为2,各个位,各个位权以以2k表示表示二二进制数:制数:anan-1a1a0.b1b2bman2nan-12n-1a121a020 b12-1b22-2bm2-m 其中其中ai,bj非非0即即1十六进制数十六进制数用于表达二用于表达二进制数,相互制数,相互转换简单基数基数1
20、6,逢,逢16进位,位位,位权为16k,16个数个数码:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F十六十六进制数:制数:anan-1a1a0.b1b2bman16nan-116n-1a1161 a0160b116-1b216-2bm16-m其中其中ai,bj是是0F中的一个数中的一个数码常用进位计数制对照表常用进位计数制对照表2 的次幂的缩简表的次幂的缩简表 1K=210 ,1M=220,1G=230,1T=240二进制数或十六进制数转换为十二进制数或十六进制数转换为十进制数进制数方法:按方法:按权展开展开二二进制数制数转换为十十进制数制数0011.1010B1211201
21、2-102-212-33.625十六十六进制数制数转换为十十进制数制数1.2H116021611.125十进制整数转换为二或十六进制数十进制整数转换为二或十六进制数整数部分整数部分转换:用除法:用除法十十进制数整数部分不断除以基数制数整数部分不断除以基数2或或16,并并记下余数,直到商下余数,直到商为0为止止由最后一个余数起逆向取各个余数,由最后一个余数起逆向取各个余数,则为转换成的二成的二进制和十六制和十六进制数制数12601111110B1267EH十进制小数转换为二或十六进制数十进制小数转换为二或十六进制数小数部分小数部分转换:用乘法:用乘法分分别乘以各自的基数,乘以各自的基数,记录整数
22、部分,直整数部分,直到小数部分到小数部分为0为止止0.81250.1101B0.81250.DH小数小数转换会会发生生总是无法乘到是无法乘到为0的情况的情况可可选取一定位数精度)取一定位数精度)将将产生无法避免的生无法避免的转换误差差十六进制数的加减运算十六进制数的加减运算二进制和十六进制数之间具有对应关系二进制和十六进制数之间具有对应关系整数从左向右整数从左向右小数从右向左小数从右向左每每4个二进制位对应一个十六进制位个二进制位对应一个十六进制位00111010B3AH,F2H11110010B十六进制数的加减运算类似十进制十六进制数的加减运算类似十进制逢逢16进位进位1,借,借1当当162
23、3D9H94BEHB897HA59FH62B8H42E7H计算机中的常用数据类型;计算机中的常用数据类型;计算机中算机中对实际数据有特殊的表示方法;数据有特殊的表示方法;整数分整数分带符号数和无符号数两种;符号数和无符号数两种;无符号数:字无符号数:字节、字、双字整数操作数中,、字、双字整数操作数中,对应的的 8 位、位、 16 位、位、 32 位二位二进制数全部用来表示数制数全部用来表示数值本身。本身。 没有用来表示符号位的位,没有用来表示符号位的位, 因而因而为正整数。正整数。无符号整数MSB(MostSignificantBit):最高有效位真值和机器数真值和机器数真真值:现实中真中真实
24、的数的数值机器数:机器数:计算机中用算机中用0和和1数数码组合表达的数合表达的数值定点数:固定小数点的位置表达数定点数:固定小数点的位置表达数值的机器数的机器数定点整数:将小数点固定在机器数的最右定点整数:将小数点固定在机器数的最右侧表达表达的整数的整数定点小数:将小数点固定在机器数的最左定点小数:将小数点固定在机器数的最左侧表达表达的小数的小数浮点数:小数点浮浮点数:小数点浮动表达的表达的实数数无符号数:只表达无符号数:只表达0和正整数的定点整数和正整数的定点整数有符号数:表达有符号数:表达负整数、整数、0和正整数的定点整数和正整数的定点整数符号位需要占用一个位符号位需要占用一个位常用机器数
25、的最高位常用机器数的最高位0表示正数、表示正数、1表示表示负数数n正数的原码表示:n设X=+Xn-2Xn-3X1X0(即n-1位二进制正数),那么nX原=0Xn-2Xn-3X10n负数的原码表示n设X=-Xn-2Xn-3X1X0(即n-1位二进制负数),那么nX原=1Xn-2Xn-3X10=2n-1+Xn-2Xn-3X1X0n=2n-1-(-Xn-2Xn-3X1X0)=2n-1-Xn注意:在这里我们一般假设n=8。原码原码n零的原码表示n在二进制数原码表示中有正零和负零之分,即n+0原=00000n-0原=10000n原码定义:X原=(n位二位二进制数,制数,最高位最高位为符号位符号位)X X
26、02 n-1-X X0例1.2:求X+18和Y-18的原码。解:X的真值+0010010,根据原码的定义,X原00010010;Y的真值-0010010,根据原码的定义,Y原10010010。n 表示范表示范围: n n位原位原码能能够表示的数表示的数值的范的范围为:n -(2n-1-1)+(2n-1-1),n 即即-011.1011.1。 反码反码 反码的定义反码的定义X反=X 0 X 2n-1-12 n-1+X (2n-1-1) X 0表表示示范范围:n位位反反码能能够表表示示的的数数值的的范范围为:-(2n-1-1)(2n-1-1)(n位二位二进制数,制数,最高位最高位为符号位符号位)同
27、同样,0的反的反码也是不惟一的:也是不惟一的:+0反反00000000,-0反反11111111。例例1.3:求:求X52和和Y-52的反的反码。解:解:X的真的真值0110100,因因为X0,所以有所以有X反反X原原00110100;Y的真的真值-0110100,因因为Y0,所以根据反所以根据反码表示方法,有表示方法,有Y反反=11001011。补码补码的定的定义X补=X 0 X 2n-1-1,2 n+X - 2n-1 X0。表示范围:n位补码能够表示的数值的范围为:-2n-1(2n-1-1)注意:与原码和反码不同,0的补码是惟一的。(n位二位二进制数,制数,最高位最高位为符号位符号位)例例
28、1.4:求:求X52和和Y52的的补码。解:解:X的真的真值0110100,因因为X0,所以所以X补X反反X原原00110100;Y的真的真值0110100,因因为Y0,所以所以Y补Y反反111001011111001100。原原码、补码和反和反码 根据根据X补及及X反的定反的定义式得如下式得如下关系:关系:当当X为正数正数时,X反反=X补=X原原=X;当当X为负数数时,X反是将反是将X原的符原的符号位保持不号位保持不变,其余各位,其余各位变反;反;X补则是将是将X原的符号位保持不原的符号位保持不变,其余各位,其余各位变反加反加 1。 BCD码码Binary Coded Decimal)二二进
29、制制编码的十的十进制数制数一个十一个十进制数位用制数位用4位二位二进制制编码来表示来表示常用常用8421 BCD码:低:低10个个4位二位二进制制编码表表示示09压缩BCD码:一个字:一个字节表达两位表达两位BCD码非非压缩BCD码:一个字:一个字节表达一位表达一位BCD码低低4位表达数位表达数值,高,高4位常位常设置置为0)BCD码很直很直观BCD码:0100 1001 0111 1000.0001 0100 1001十十进制真制真值:4978.149BCD码便于便于输入入输出,表达数出,表达数值准确准确ASCII码美国标准信息交换码)码美国标准信息交换码)标准准ASCII码用用7位二位二进制制编码,有,有128个个不可不可显示的控制字符:前示的控制字符:前32个和最后一个个和最后一个编码回回车CR:0DH 换行行LF:0AH 响响铃BEL:07H可可显示和打印的字符:示和打印的字符:20H后的后的94个个编码数数码09:30H39H大写字母大写字母AZ:41H5AH小写字母小写字母az:61H7AH空格:空格:20H扩展展ASCII码:最高:最高D7位位为1,表达制表符号,表达制表符号