版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Principle and Application of Microcomputer微 机 原 理 及 应 用,教 师:田 行 斌 单 位:机 电 系,R2,学习内容,微型计算机系统概述 微处理器指令系统 汇编语言程序设计 微处理器外部特性 半导体存储器系统 基本输入输出接口 并行接口及其应用,学习目的,了解微型计算机的硬件知识 熟练掌握汇编语言程序设计 建立微机系统的整体概念,为接口开发及应用奠定基础,微型计算机系统概述,微型计算机的发展和应用 微型计算机的系统组成 计算机中的数据表示,微型计算机的发展,第1代:4位微机。 CPU:4004 第2代:8位微机。 CPU:8080 第3代:16
2、位微机。CPU:8086、8088 第4代:32位微机。CPU:80386、Pentium 第5代:64位微机。CPU:Itanium,微型计算机的应用,用于数值计算、数据处理及信息管理 用于过程控制及嵌入应用方向,微型计算机系统的组成,硬件系统: CPU、存储器、I/O接口、I/O设备、系统总线 软件系统: 系统软件操作系统、语言处理软件等 应用软件为某个应用编制的程序,微机系统的硬件组成,IBM PC系列计算机,IBM PC/AT,IBM PC/XT,计算机中的数据表示,计算机中各种信息均表示为二进制数据。 数:用来直接表征量的多少,可进行运算。 码:指代码或编码,用来代表某个事物。,基本
3、术语,位 (Bit) :二进制位,为0或1。 字节(Byte):8个二进制位。 字 (Word):2字节(16位)数据。 双字(Double Word):4字节数据。 千字节(KB):210个字节。 兆字节(MB):220个字节。,计算机中的数,二进制数后缀为B或b,十进制数后缀为D或d,十六进制数后缀为H或h。 二进制数:由数字0和1组成,基数为2,逢2进1,各个数位的权值由右向左依次为20、21、22、23、 。 十六进制数:由数字符号0-9、A-F组成,基数为16,逢16进1,各个数位的权值由右向左依次为160、161、162、163、 。,二进制数与十进制数之间的转换,二进制数到十进制
4、数的转换:按权展开求和00001011B12312112011D 十进制数到二进制数的转换:除基取余建议按照按权展开的逆过程进行,二进制数与十六进制数之间的转换,每4位二进制数对应1位十六进制数0000B=0H 0100B=4H 1000B=8H 1100B=CH0001B=1H 0101B=5H 1001B=9H 1101B=DH0010B=2H 0110B=6H 1010B=AH 1110B=EH0011B=3H 0111B=7H 1011B=BH 1111B=FH 十六进制数常用来简化对二进制数的书写,计算机中的码,用于表示有符号数的补码。 用于表示十进制数的BCD码。 美国标准信息交换
5、码ASCII码。,补码,计算机内部默认采用补码表示有符号数。规定:最高有效位为符号位,0表示正数,1表示负数。 正数的补码:最高有效位为0,其余各位为该整数的二进制表示。如:(2)(00000010B)补 负数的补码:最高有效位为1,其余各位可对该整数的二进制表示求补(即按位取反再加1)得到。如:(2)(11111110B)补,补码的性质,(X)补 (Y)补(X Y)补(X)补 (Y)补 (X)补 - (Y)补(X - Y)补(X)补 (- Y)补 采用补码表示有符号数可将减法转换为加法。,有关补码的问题,1) 已知(负数)补码求真值按权展开求和,但符号位的权值要取为相反数。 (1000001
6、0B)补1(128)12126 2) 已知补码求相反数的补码 (+4)=(00000100B)补 (-4)=(11111100B)补 由右向左抄写,遇到照写,遇到第一个也照写,其后各位按位取反。据此,可根据一个正数的补码得到其相反数(负数)的补码。,补码的符号扩展,补码的符号扩展是指将有符号数的长度扩展而不改变其值。原则是:新扩的左侧各位均复制原符号位上的值。(68H)补= (0068H)补 (86H)补= (FF86H)补,BCD码,Binary Code Decimal:二进制编码的十进制数 压缩的8421BCD码 0000B=0 0011B=3 0110B=6 1001B=9 0001B
7、=1 0100B=4 0111B=7 0010B=2 0101B=5 1000B=8,ASCII码,美国标准信息交换码。码长7位,用来表示34个外设控制符号和94个可供打印的西文符号。数码09的ASCII码为30H39H;大写字母AZ的ASCII码为41H5AH;小写字母az的ASCII码为61H7AH;0DH表示回车,0AH表示换行。,第一章教学要求,掌握微机系统的组成 熟练二进制数与十进制数的转换、二进制数与十六进制数的转换 熟练掌握有符号数的补码表示、BCD码,第一章练习,8位机器数所能表示的无符号数和有符号数的范围是多少?16位机器数呢? (37)和(37)的补码是多少? 数据50和5
8、0H所对应的BCD码是多少? 8位机器数46H,若作为无符号数、有符号数补码、BCD码、ASCII码,各代表什么?,微处理器指令系统,微处理器的内部结构 8086/8088的寻址方式 8086/8088指令系统,微处理器的基本结构,算术逻辑单元ALU(运算器) 寄存器组:包括通用寄存器,地址寄存器,标志寄存器。 指令处理单元(控制器):包括指令寄存器,指令译码逻辑,时序和控制逻辑。,8086/8088的功能结构,总线接口单元BIU:由指令队列、指令指针IP 、段寄存器、地址加法器和总线控制逻辑等组成,负责CPU对存储器和外设进行访问。 执行单元EU:由ALU、数据寄存器、地址寄存器、标志寄存器
9、和指令译码逻辑等组成,负责指令的译码、执行和数据的运算。,8086的内部结构图,8086/8088的寄存器结构,8086/8088中有14个16位寄存器 通用寄存器AX、BX、CX、DX、SI、DI、BP、SP 指令指针IP 标志寄存器FLAGS 段寄存器CS、SS、DS、ES,通用寄存器,16位的通用寄存器有8个,它们是:AX、BX、CX、DX、SI、DI、BP、SP 其中,前4个寄存器(即AX、BX、CX、DX)还可以各分成高8位和低8位的两个独立的8位寄存器,它们分别是:AH、AL,BH、BL,CH、CL,DH、DL,寄存器AX/BX/CX/DX,AX:16位累加器,用于算术运算以及与外
10、设传送信息等;AL为8位累加器。 BX:基址寄存器,常用来做基址指针,指向一批连续存放的操作数的基地址。 CX:计数器,作为循环和串操作等指令中的隐含计数器。 DX:数据寄存器,用来存放外设端口的16位地址,或双字长数据的高16位。,变址寄存器SI/DI,变址寄存器常用于存储器寻址时提供地址。 SI是源变址寄存器。 DI是目的变址寄存器。 在串操作类指令中,SI和DI具有特别的功能。,指针寄存器SP/BP,指针寄存器用于寻址内存堆栈中的数据。 SP为堆栈指针寄存器,指示栈顶的偏移地址。SP不能再用于其他目的,具有专用性。 BP为基址指针寄存器,表示数据在堆栈段中的基地址。 SP/BP寄存器与S
11、S堆栈段寄存器联合使用以确定堆栈段中的存储单元地址。,指令指针IP,指令指针IP,指示代码段中指令的偏移地址。 它与代码段寄存器CS联用,确定下一条指令的物理地址。CPU通过CS:IP来取指,从而控制指令序列的执行流程。 IP是一个专用寄存器,用户不能直接访问。,标志寄存器FLAGS,标志(Flag)用于反映指令的执行结果或控制指令的执行形式。各种标志存放于一个16位的标志寄存器FLAGS中。 标志分成两类状态标志:用来记录程序运行结果的状态信息;控制标志:用于控制处理器的具体工作方式。,状态标志CF/PF/AF,CF进位标志位。做加减运算时,若最高有效位有进位或借位,则CF置1,反之置0。
12、PF奇偶标志位。当运算结果的低8位中l的个数为偶数时,则PF置1,反之置0。 AF半进位标志位。做加减运算时,若Bit3有向Bit4的进位或借位,则AF置1,反之置0。,状态标志ZF/SF/OF,ZF零标志位。运算结果为0时,ZF置1,否则置0。 SF符号标志位。运算结果的最高位为1时,SF置1,否则置0。 OF溢出标志位。若有符号数的加减运算有溢出,OF置1,否则置0。,控制标志TF/IF/DF,陷阱标志TF(单步标志):TF1,CPU单步执行指令;TF0,CPU正常工作。 中断允许标志IF:控制外部可屏蔽中断是否可以被CPU响应。IF1允许中断,IF0禁止中断。 方向标志DF:用于串操作指
13、令中控制地址的变化方向。DF0地址增加;DF1地址减少。,8086/8088的存储器结构,存储器以字节为单位存储信息。每个存储器单元(字节单元)都有一个地址。 8086/8088有20根地址线。最大可寻址的存储器单元数为2201MB。 其物理地址范围为00000HFFFFFH。例如:00002H34H。,小端方式,字或双字信息在存储器中占相邻的2个或4个存储单元。 多字节数据占据的地址空间用低地址来表示。 按“小端方式”存储,即“低字节对低地址、高字节对高地址”。例如:00002H1234H,意指:00002H34H, 00003H12H。,存储器的分段管理,8086/8088将1MB存储器空
14、间分成若干个逻辑段来管理。每个段最大限制为64KB。 采用逻辑地址(段地址:偏移地址)的形式来表达段中每个存储器单元的20位物理地址。 段地址和偏移地址都是16位二进制数。,段地址,段地址说明该逻辑段在内存中的起始位置,即该段中的第一个内存单元的物理地址。 规定段地址必须是模16地址,即0H的形式,故可采用16位二进制数据表示,保存在16位的段寄存器(CS,DS,ES,SS)中。,偏移地址,偏移地址说明该段中某个内存单元距离该段起始位置的偏移量。 由于每个段的长度不超过64KB,故偏移地址也可采用16位二进制数据表示。,逻辑地址和物理地址,物理地址 段地址10H + 偏移地址。 一个存储器单元
15、只有一个唯一的物理地址。 但一个存储器单元可以拥有多个逻辑地址。,代码段(Code Segment),代码段主要用来存放指令代码(程序),也可存放数据。 代码段寄存器CS存放代码段的段地址。 指令指针寄存器IP指示下条指令的偏移地址。 处理器利用CS:IP取得下一条要执行的指令。,数据段(Data Segment),数据段存放程序所使用的数据。 数据段寄存器DS存放数据段的段地址。 通过各种存储器寻址方式得到存储器中操作数的偏移地址(有效地址EA)。 处理器利用DS:EA存取数据段中的数据。,附加段(Extra Segment),附加段是附加的数据段,也用于数据的保存。 附加段寄存器ES存放附
16、加段的段地址。 通过各种存储器寻址方式得到存储器中操作数的偏移地址(有效地址EA) 。 处理器利用ES:EA存取附加段中的数据。,堆栈段(Stack Segment),堆栈段用于堆栈(Stack),用来暂时存放数据、保存程序断点、和向子程序传递参数等。 堆栈段寄存器SS存放堆栈段的段地址。 堆栈指针寄存器SP指示堆栈栈顶的偏移地址。 处理器利用SS:SP操作堆栈栈顶的数据。,逻辑段的使用,程序的指令序列必须安排在代码段。 程序使用的堆栈一定在堆栈段。 程序中的数据默认是安排在数据段,也经常安排在附加段。数据的存放比较灵活,实际上可以存放在任何一种逻辑段中。,8086/8088的寻址方式,指令由
17、操作码和操作数两部分组成。如:MOV AH,0B9H ;将B9H传送到AH寄存器 操作码说明计算机要执行何种操作,是指令中不可缺少的部分。操作数就是各种操作的对象。指令可以有一个、两个或没有操作数。 寻找操作数的方式(或操作数的存放方式)叫做操作数的寻址方式。,操作数,操作数可以是一个具体的数值,存放于操作码之后,称为立即数操作数; 操作数可以是存放数据的寄存器,数据存放于该寄存器中,称为寄存器操作数; 操作数可以是用某种方式指明的数据所在的存储器单元的地址,数据存放于该存储器单元中,称为存储器操作数。,立即数寻址方式,立即数操作数(imm)紧跟在操作码之后,作为指令的一部分存放在操作码之后的
18、内存单元中。它可以是8位数值(i8),也可以是16位数值(i16)。 MOV AX,1234H; 操作数1234H就是使用立即数寻址方式。指令执行后AX=1234H,其中AH=12H,AL=34H。,寄存器寻址方式,寄存器操作数存放于CPU的内部寄存器reg中。它可以是8位寄存器(r8,可以是AH/AL/BH/BL/ CH/CL/DH/DL之一),或是16位寄存器(r16,可以是AX/BX/CX/DX/SI/DI/BP/SP之一,也可以是段寄存器CS/DS/SS/ES之一)。 MOV AX,BX; 操作数AX、BX均使用寄存器寻址方式。指令执行后AX中的值与BX中的值相同,而BX中的值不变。,
19、存储器寻址方式,存储器操作数存放于存储器单元中。指令中给出的是操作数所在的存储器单元的逻辑地址。因段地址默认在数据段寄存器DS中,故只要给出偏移地址即可。有以下5种具体方式: 直接寻址方式寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址,直接寻址方式,指令中直接给出操作数的有效地址。段地址默认在数据段寄存器DS中,可以使用段超越前缀来改变。 设DS=ES=1492H,16920H=12H,16921H=34H MOV AH,2000H;AH=12H MOV AX,ES:2000H;AX=3412H,符号地址,实际编程时,通常是通过定义变量,然后使用变量名(符号地址)来指代该变量所在内存
20、单元的偏移地址。 WVAR DW 3412H;设WVAR的偏移地址为2000H MOV AX,2000H;AX=3412H MOV AX,WVAR ;AX=3412H,中括号可省略,变量,变量实质上是指内存单元的数据,因而可以改变。变量需要事先定义才能使用。 变量名 伪指令 初值表 变量名是用户自定义的标识符,用来表示该变量所占用的内存单元的首地址。 变量定义伪指令为变量分配或预留内存单元。其中DB用来定义字节变量,DW用来定义字变量。 初值表是用逗号分隔的参数,是用户定义的多个数据初值。,寄存器间接寻址方式,操作数的有效地址存放于基址类寄存器BX、BP或变址类寄存器SI、DI中。当使用寄存器
21、BX/SI/DI寻址时,默认的段寄存器为DS;当使用寄存器BP寻址时,默认的段寄存器为SS。均可以使用段超越前缀改变。 设DS=1492H,ES=1492H,BX=2000H,16920H=12H MOV AL,BX;AL=12H MOV DH,ES:BX;DH=12H,寄存器相对寻址方式,操作数的有效地址是寄存器(BX/BP/SI/DI)的内容与有符号的8位或16位位移量之和。当使用寄存器BX/SI/DI寻址时,默认的段寄存器为DS;当使用寄存器BP寻址时,默认的段寄存器为SS。均可以使用段超越前缀改变。 设DS=ES=1492H,SI=2000H,16926H=12H MOV AL,SI0
22、6H;AL=12H MOV DH,ES:SI+06H;DH=12H,基址变址寻址方式,操作数的有效地址是一个基址类寄存器(BX或BP)的内容与另一个变址类寄存器(SI或DI)的内容之和。当使用基址寄存器BX时,默认的段寄存器为DS;当使用基址寄存器BP时,默认的段寄存器为SS。均可以使用段超越前缀改变。 设DS=1492H,BX=2000H,SI=06H,16926H=12H MOV AL,BXSI;AL=12H,相对基址变址寻址方式,操作数的有效地址是一个基址类寄存器(BX或BP)的内容,一个变址类寄存器(SI或DI)的内容与有符号的8位或16位位移量之和。当使用基址寄存器BX时,默认的段寄
23、存器为DS;当使用基址寄存器BP时,默认的段寄存器为SS。均可以使用段超越前缀改变。 设DS=1492H,BX=2000H,DI=04H,16926H=12H MOV AL,BXDI+02H;AL=12H,8086/8088指令系统,数据传送类指令 算术运算类指令 按位操作类指令 控制转移类指令 处理器控制指令,操作数的表示符号的约定,i88位立即数,i1616位立即数imm代表i8或i16 r88位寄存器,r1616位寄存器reg代表r8或r16 seg段寄存器CS、DS、ES、SS m88位存储器操作数m1616位存储器操作数,mem代表m8或m16 dest目的操作数src 源操作数,M
24、OV指令,MOV reg/mem,imm ;立即数送寄存器或主存 MOV reg/mem/seg,reg ;寄存器送(段)寄存器或 ;主存 MOV reg/seg,mem ;主存送(段)寄存器 MOV reg/mem,seg ;段寄存器送寄存器或主存,MOV指令注意事项(1),目的操作数与源操作数必须类型一致。MOV AX,BH ;错误指令 目的操作数不能是立即数。MOV 2000,AX;错误指令 立即数不能超过目的操作数的表示范围。MOV AL,2000;错误指令 两个操作数不能都是存储器操作数。假设wbuf1、wbuf2是两个字变量MOV wbuf1,wbuf2;错误指令,MOV指令注意事
25、项(2),不能将任何数据传送给CS寄存器。MOV CS,AX ;错误指令 指令指针IP不能作为操作数。MOV AX,IP ;错误指令,MOV指令注意事项(3),两个操作数不能都是段寄存器。MOV DS,ES ;错误指令 立即数不能直接传送至段寄存器。MOV DS,2000H ;错误指令,MOV指令练习,将BH中的无符号数(有符号数)传送至AX 将字变量Wbuf2的内容传送至字变量Wbuf1 将ES的内容传送至DS 将段寄存器DS赋初值2000H 将立即数12H传送至偏移地址为2000H的内存单元,XCHG指令,XCHG reg,reg/mem; XCHG reg/mem,reg; 源操作数与目
26、的操作数内容互换 MOV AX,1234H;AH=12H,AL=34HXCHG AH,AL ;AH=34H,AL=12H 不能在内存单元之间交换数据。 段寄存器不能作为操作数。,XCHG指令练习,将字变量A、B的内容互换 A DW 1234HB DW 5678H,XLAT指令,XLAT ;ALBX+ALXLAT table;table为字节表格变量名 ;利用该变量名,可进行段超越。 换码(查表转换)过程为:先在主存中建立一字节表格;将表格的首地址存放于BX寄存器中;将欲查元素的序号存放于AL寄存器中;执行XLAT,则AL中的内容即为欲查元素。,十六进制数到ASCII码的转换,TABLE1 DB
27、 30H,31H,32H,33H,34H,35H, 36H,37H,38H,39H,41H,42H,43H,44H,45H,46H MOV BX,OFFSET TABLE1MOV AL,04HXLAT ;AL=34H,OFFSET取变量的偏移地址,堆栈操作指令,堆栈(Stack) 是主存中开辟的用于暂时存放数据的一个特殊区域。按先进后出或后进先出的原则管理,类似于货舱中摞放货物。 堆栈段的段地址存放于段寄存器SS中,偏移地址存放于寄存器SP中。 PUSH r16/m16/seg ;SP=SP2 ;SS:SP=r16/m16/seg POP r16/m16/seg ;r16/m16/seg=SS
28、:SP ;SP=SP+2,堆栈操作注意事项,堆栈操作均为16位(字)操作; 不能将立即数压入堆栈; 进栈和出栈的操作伴随着堆栈指针SP的调整,SS:SP永远指向堆栈段的栈顶。 堆栈只有一个出口。,堆栈的作用,堆栈不可或缺,被很多指令使用:如堆栈操作指令PUSH和POP、子程序调用CALL和返回RET、中断调用INT和返回IRET等;内部异常、外部中断等也利用堆栈 堆栈可用来临时存放数据,以便随时恢复它们 常利用堆栈基址指针BP,随机读写堆栈数据 利用堆栈实现主、子程序间传递参数 堆栈还常用于子程序的寄存器保护和恢复,堆栈操作练习,设AX=1234H,SP=2000H,执行PUSH AX指令后S
29、P的值是多少? SS:SP指向的内存单元的内容是什么? 请利用堆栈将两个字变量A、B内容互换。,标志操作指令(1),CLC ;CF=0 STC ;CF=1 CMC ;CF=CF CLD ;DF=0 STD ;DF=1 CLI ;IF=0 STI ;IF=1,标志操作指令(2),LAHF ;AH=FLAGS的低8位 SAHF ;FLAGS的低8位=AH PUSHF ;SP=SP2,SS:SP=FLAGS POPF ;FLAGS=SS:SP,SP=SP+2,LEA指令,LEA r16,mem;r16mem的偏移地址 LEA BX,SI+06H;若SI1000H,则BX=1006H WVAR DW
30、1234H;设其偏移地址为0001H MOV BX,WVAR ;BX=1234HLEA SI,WVAR ;SI=0001HMOV DX,SI ;DX=1234H,LEA指令与OFFSET操作符的区别,OFFSET操作符是在汇编阶段取得变量的偏移地址 LEA指令在指令执行时计算出偏移地址 OFFSET无需在执行时计算、指令执行速度更快 LEA指令能获取汇编阶段无法确定的偏移地址LEA BX,BX+SI+0F62H 两者的源操作数类型不同 OFFSET只能用于简单变量MOV BX, OFFSET SI+06H ; 错误指令,指针传送指令,LDS r16,mem;r16mem,DS=mem+2 LE
31、S r16,mem;r16mem,ES=mem+2 设DS=2000H,SI=0502H,20502H=0666H,20504H=0888H;执行 LES BX,SI 后 BX=? ES=? 答:BX=0666H,ES=0888H。,加减法指令,ADD reg ,imm/reg/memADD mem ,imm/reg ADD dest,src;dest=destsrc SUB dest,src;dest=destsrc 目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数类型要一致。 按定义影响6个状态标志位。,对状态标志位影响情况的说明,不影响;如:MOV指令。 按定义影响;如:
32、ADD指令。 强制(规定)影响;如:CLC指令。 未(无)定义(随机影响);如:MUL指令。,对状态标志位CF和OF的说明,进位标志反映无符号整数运算结果是否超出范围 有进位,加上进位或借位后运算结果仍然正确 溢出标志反映有符号整数运算结果是否超出范围 有溢出,运算结果已经不正确 操作数是无符号数,关心进位 操作数是有符号数,注意溢出,溢出标志位OF的判断,人工判断的简单规则:只有当两个相同符号数相加(含两个不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,则不会产生溢出。,带进/借位加减法指令,ADC reg ,imm/reg/memADC mem ,imm/reg
33、 ADC dest,src;dest=destsrcCF SBB dest,src;dest=destsrcCF 目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数类型要一致。 按定义影响6个状态标志位。,ADC/SBB指令的应用,ADC指令用于与ADD指令结合实现多精度数的加法。 先将两个操作数的低16位相加(用ADD指令)。 再加高位部分、并将进位加到高位(用ADC指令)。 SBB指令用于与SUB指令结合实现多精度数的减法。 先将两个操作数的低16位相减(用SUB指令)。 再减高位部分、并减去借位(用SBB指令)。,CMP指令,CMP dest,src;destsrc 按定义
34、影响6个状态标志位。 CMP指令将目的操作数与源操作数相减,但差值不回送到目的操作数中。它通过减法运算影响状态标志位,常用于比较两个操作数的大小关系。 注意:CMP指令执行前后两操作数内容均不变。,增量减量指令,INC reg/mem;reg/mem=reg/mem1 DEC reg/mem;reg/mem=reg/mem1 常用于计数器和地址指针的调整。 不影响CF标志,但影响其它状态标志位。,NEG指令,NEG reg/mem;reg/mem = 0reg/mem 按定义影响6个状态标志位。 当操作数为128或32768时,操作数不变,但OF置1。 通常总是使CF=1,除非操作数为0。,加
35、减类指令练习(1),求下列指令执行后AH及各状态标志位的情况。 MOV AH,64HMOV AL,0A8HCMP AH,ALADC AH,ALINC AH,加减类指令练习(2),求Z=X+Y的值。(注:X、Y、Z均为无符号数) X DW 1234HY DB 0B5HZ DW ? X DW 1234HY DW 5678HZ DD ? ;DD用于定义双字型变量 X DD 1234H Y DD 5678HZ DD ?,符号扩展指令,CBW;AL符号扩展成AX若AL的最高有效位是0,则AH=00H;若AL的最高有效位是1,则AH=FFH; CWD;AX符号扩展成DX.AX若AX的最高有效位是0,则DX
36、=0000H;若AX的最高有效位是1,则DX=FFFFH;,乘法指令,MUL r8/m8 ;AX=ALr8/m8,无符号乘法 MUL r16/m16;DX.AX=AXr16/m16 IMUL r8/m8 ;AX=ALr8/m8,有符号乘法 IMUL r16/m16;DX.AX=AXr16/m16,除法指令,DIV r8/m8;AL=AXsrc的商,AH=AXsrc的余 DIV r16/m16;AX=DX.AXsrc的商 DX=DX.AXsrc的余,无符号除法 IDIV r8/m8;AL=AXsrc的商,AH=AXsrc的余 IDIV r16/m16;AX=DX.AXsrc的商 ;DX=DX.A
37、Xsrc的余,有符号除法,乘除法指令对标志位的影响,乘法指令只影响OF和CF,对其它状态标志无定义。 对于无符号乘法,若乘积中AH=00H(8位乘法)或DX=0000H(16位乘法),OF=CF=0;否则均为1。 对于有符号乘法,若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。 除法指令对6个状态标志位均无定义。 但当除数为0或商溢出时将产生编号为0的内部中断,指示除法错误。,乘除法指令练习,计算(XY+125)Z。设X、Y、Z均为16位有符号的字变量,计算后将商存入X,余数存入Y。,逻辑运算指令,AND dest,src;dest=dest “与” src OR dest,s
38、rc;dest=dest “或” src XOR dest,src;dest=dest “异或” src TEST dest,src;dest “与” src NOT reg/mem ;reg/mem=reg/mem的“非”,逻辑运算指令注意事项,AND reg,imm/reg/memAND mem,imm/reg 目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数类型要一致。 双操作数逻辑运算指令均置OF=CF=0,按定义影响SF、ZF和PF,对AF无定义。NOT指令不影响状态标志位。,逻辑运算指令特点,和0相“与”,结果为0 ;和1相“与”,结果不变。 和1相“或”,结果为1
39、 ;和0相“或”,结果不变。 和1“异或”,结果取反;和0“异或”,结果不变。,逻辑运算指令练习,使AL最高位为“1”,其他位不变。 使AX清0,同时清CF为0。 使AL中的D7D4位不变,D3D0位取反。 将AL存放的09中的一个数变成对应的ASCII码。 将AL中的ASCII码小写字母变成对应的大写字母。 将AL中的ASCII码大写字母变成对应的小写字母。,移位指令,SHL reg/mem,1/CL;reg/mem左移1/CL位 SHR reg/mem,1/CL;reg/mem右移1/CL位 SAL reg/mem,1/CL;与SHL是同一指令 SAR reg/mem,1/CL;reg/m
40、em右移1/CL位 按照移入的位设置CF;按定义影响SF、ZF、PF;对AF无定义。 移位次数为1,若移位前后操作数最高位不同,OF=1;否则OF=0。移位次数大于1,OF无定义。,移位指令示意图,循环移位指令,ROL reg/mem,1/CL;不带进位循环左移 ROR reg/mem,1/CL;不带进位循环右移 RCL reg/mem,1/CL;带进位循环左移 RCR reg/mem,1/CL;带进位循环右移 按照移入的位设置CF;不影响SF、ZF、PF、AF。 移位次数为1,若移位前后操作数最高位不同,OF=1;否则OF=0。移位次数大于1,OF无定义。,循环移位指令示意图,移位指令练习,
41、用移位指令将AL中的无符号数乘10,结果存入AX中。 将ASCII码转换成BCD码。ASCII DB 38BCD DB ?,控制转移类指令,程序代码在代码段中,由CS:IP确定地址。 程序顺序执行,微处理器自动增量IP。 程序控制转移,IP随之改变。 程序转移到另外的代码段, IP和CS都将改变。 控制转移类指令:改变IP(有些也改变CS),即改变程序执行顺序(实现程序控制转移)的指令。,转移范围,段内转移:在当前代码段范围内的程序转移,不需更改CS,只要改变IP。近转移(Near) :转移范围为 32KB短转移(Short):转移范围为127128字节 段间转移:从当前代码段转移到另一代码段
42、,需要更改CS和IP。远转移(Far):转移范围为1MB,目标地址寻址方式,相对寻址方式:提供目标地址相对于当前指令指针IP的位移量。目标地址(转移后的IP)当前IP位移量。相对寻址都是段内转移,最常用、最灵活。 直接寻址方式:直接提供目标地址。目标地址(转移后的CS和IP)指令操作数。 间接寻址方式:目标地址来自寄存器或存储单元,间接获得。寄存器间接寻址:用寄存器保存目标地址;存储器间接寻址:用存储单元保存目标地址。,无条件转移指令JMP,JMP label ;IP=IP+位移量,段内相对转移 JMP r16/m16 ;IP=r16/m16, 段内间接转移 段间直接转移JMP far ptr
43、 label;IP=偏移地址,CS=段地址 段间间接转移JMP far ptr mem ;IP=mem,CS=mem+2 通常,汇编程序能根据label的位置自动生成短转移、近转移或远转移指令。,条件转移指令Jcc,根据指定的条件来确定程序是否发生转移 Jcc label;条件满足,发生转移 ;否则,顺序执行下一条指令 LABEL表示目标地址,采用段内相对短转移 条件转移指令不影响标志位,但要利用标志位 cc表示利用标志判断的条件,共16种,分两类 单个标志状态作为条件 两数大小关系作为条件,转移条件cc:单个标志状态,JZ/JE ZF=1Jump if Zero/Equal JNZ/JNE
44、ZF=0Jump if Not Zero/Not Equal JS SF=1Jump if Sign JNS SF=0Jump if Not Sign JP/JPE PF=1Jump if Parity/Parity Even JNP/JPO PF=0Jump if Not Parity/Parity Odd JO OF=1Jump if Overflow JNO OF=0Jump if Not Overflow JC CF=1Jump if Carry JNC CF=0Jump if Not Carry,转移条件cc:两数大小关系,JB/JNAE CF=1 (Below/Not Above
45、or Equal) JNB/JAE CF=0 (Not Below/Above or Equal) JBE/JNA CF=1或ZF=1 (Below or Equal/Not Above) JNBE/JA CF=0且ZF=0 (Not Below or Equal/Above) JL/JNGE SFOF (Less/Not Greater or Equal) JNL/JGE SF=OF (Not Less/Greater or Equal) JLE/JNG SFOF或ZF=1 (Less or Equal/Not Greater) JNLE/JG SF=OF且ZF=0(Not Less or
46、Equal/Greater),转移类指令练习,通过判断符号位实现CBW指令的功能。 通过判断正负实现CBW指令的功能。 取三个无符号字变量的最小值到AX。,循环指令,LOOP label ;CX=CX1,若CX0,转移 LOOPE label ;CX=CX1,若CX0且ZF=1,转移 LOOPNE label ;CX=CX1,若CX0且ZF=0,转移 JCXZ label ;若CX=0,转移;否则,顺序执行 循环指令是针对CX计数器的计数循环指令 指令中的操作数label只能采用相对短转移寻址方式,转移范围为段内128127个字节 循环指令不影响标志,用循环指令实现字节数组求和,已知字节数组A
47、RRAY,将其各元素之和存入变量SUM中(不考虑进位和溢出)。ARRAY DB 12H,34H,56H,SUM DB ?,子程序,子程序:与主程序分开的完成特定功能的一段程序 主程序(调用程序)执行调用指令CALL调用子程序 子程序(被调用程序)执行返回指令RET返回主程序,子程序调用指令CALL,CALL label ;相对寻址的段内调用 CALL r16/m16 ;间接寻址的段内调用 CALL far ptr label;直接寻址的段间调用 CALL far ptr mem ;间接寻址的段间调用 实际编程中,汇编程序会自动确定是段内还是段间调用。 CALL指令在改变CS和IP前,会将返回的
48、地址保存到堆栈中。,子程序返回指令RET,RET ;返回 RET i16;返回,调整指针SP=SP+i16 RET指令用在子程序中,实现调用的返回。 汇编程序会自动根据CALL指令来产生相应的返回操作。 RET指令执行时伴随着CS,IP,SP的调整。,子过程定义,过程名PROC NEAR/FAR;过程体 过程名ENDP 汇编程序利用过程定义伪指令获得子程序信息 过程名为符合语法的标识符 应安排在代码段的主程序之外 入栈和出栈操作要成对使用,保持堆栈平衡,中断调用,CPU因某个特殊事件将当前程序挂起(暂停),转去处理这个特殊事件的程序,处理结束后再返回被挂起的程序,此过程称为“中断”。当前程序被
49、挂起的位置成为“断点”,处理特殊事件的程序称为“中断服务程序”。 中断是一种特殊的改变程序执行顺序的方法。 8086/8088CPU支持256个中断。每个中断用一个中断编号(中断向量)来区别。相应的中断服务程序的起始地址按中断向量号顺序存放在00000H003FFH的内存单元中,形成“中断向量表”。,中断指令,INT i8;执行i8号中断 IRET ;中断返回指令 INTO ;溢出中断指令 ;若OF=1,产生4号中断。否则顺序执行,DOS系统功能调用,MS-DOS操作系统提供给程序员的“子程序” 系统功能调用步骤(类似高级语言调用函数) (1)在AH寄存器中设置系统功能调用号 (2)在指定寄存
50、器中设置入口参数 (3)中断调用指令“INT 21H”执行功能 (4)根据出口参数分析功能调用执行情况,01号子功能,子功能号:AH01H; 出口参数:AL=输入字符的ASCII码; 功能说明:等待从键盘输入一个字符,将其ASCII码送入AL,同时回显到屏幕。输入字符后,不需回车。 用法示例:MOV AH,01HINT 21H,02号子功能,子功能号:AH02H; 入口参数:DL=要显示字符的ASCII码; 功能说明:在当前光标位置显示DL中给定的字符,光标右移。此功能可自动识别并相应处理退格(08H)、回车(0DH)、换行(0AH)等字符。 用法示例:MOV AH,02HMOV DL,41H
51、INT 21H,09号子功能,子功能号:AH09H; 入口参数:DS:DX=要显示字符串的首地址; 功能说明:在当前光标位置显示由DS:DX所指的字符串。该字符串必须以“$”结束,“$”并不显示。 msg DB HELLO!,0DH,0AH,$MOV AH,09HMOV DX,OFFSET msgINT 21H,0AH号子功能,子功能号:AH0AH; 入口参数:DS:DX=输入缓冲区的首地址; 功能说明:从键盘读入一个字符串,以回车结束,存放在DS:DX所指的缓冲区。 缓冲区格式:buffer DB 255,0,255 DUP(0) MOV AH,0AHMOV DX,OFFSET buffer
52、INT 21H,0BH号子功能,子功能号:AH0BH; 出口参数:AL=0,无输入,AL= FFH,有输入; 功能说明:判定键盘是否有输入。 用法示例:MOV AH,0BHINT 21H,4CH号子功能,子功能号:AH=4CH; 入口参数:AL=DOS返回码; 功能说明:结束程序执行,返回DOS。 用法示例:MOV AH,4CHMOV AL,00HINT 21H,利用子程序显示DX中的内容,将DX中的4位16进制数显示出来。 利用子程序实现16进制数转换成ASCII码。,处理器控制类指令,NOP ;空操作 SEG: ;段超越前缀 LOCK: ;封锁前缀 HLT ;暂停 ESC 6位立即数,re
53、g/mem;交权 WAIT ;等待,汇编语言程序设计,汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数。 利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,容易创建代码序列短小、运行快速的可执行程序。 在有些应用领域,汇编语言的作用是不容置疑和无可替代的。,学习内容,汇编语言源程序格式 常量、变量和标号 汇编语言程序设计方法 顺序程序设计 分支程序设计 循环程序设计 子程序设计,汇编语言源程序格式,汇编语言源程序由语句序列构成。每条语句一般占一行。 汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间
54、的顺序可随意排列。 独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。 所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内。 通常,程序还需要一个堆栈段。,汇编语言的语句格式,执行性语句用于表达处理器指令(也称为硬指令),汇编后对应一条指令代码。由处理器指令组成的代码序列是程序设计的主体。标号: 硬指令助记符 操作数,操作数 ;注释 说明性语句说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程怎么设置等。名字 伪指令助记符 参数,参数,;注释,标号、名字与标识符,标号是反映硬指令位置(逻辑地址)和属性的标识符,后跟一个冒号分
55、隔。 名字是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有冒号。 标识符一般最多由31个字母、数字及规定的特殊符号(如 _、$、?、)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写。 一个源程序中,每个标识符的定义是唯一的,且不能是汇编系统所采用的保留字。,保留字,保留字是汇编程序已经利用的标识符(也称为关键字),主要有: 硬指令助记符例如:MOV、ADD 伪指令助记符例如:DB、DW 操作符例如:OFFSET、PTR 寄存器名字例如:AX、CS 预定义符号例如:data,操作数和参数,处理器指令中的操作数可以是立即数、寄存器和存储单元。 伪指令中的
56、参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔。,注释,语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性。 必要时,一个语句行也可以由分号开始作为阶段性注释。 汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理。,分隔符,语句的4个组成部分要用分隔符分开。 标号后用冒号,注释前用分号。 操作数之间和参数之间使用逗号分隔。 其他部分通常采用空格或制表符。 多个空格和制表符的作用与一个相同。 MASM支持续行符 “”。,完整段定义格式1,sseg segment stack ;定义堆栈段 DB 1024 dup(0) ;分配堆栈段的大小 sseg ends ;堆
57、栈段结束 dseg segment ;定义数据段 . ;数据定义 dseg ends ;数据段结束,完整段定义格式2,cseg segment CODE ;定义代码段 assume cs:cseg, ds:dseg, ss:sseg start: mov ax, dseg ;程序起点 mov ds, ax ;设置DS . ;程序代码 mov ax, 4c00h int 21h ;程序结束,返回DOS . ;子程序等的代码 cseg ends ;代码段结束 end start ;汇编结束并标识起点,完整段定义伪指令,段名 segment 定位 组合 类别 . ;语句序列段名 ends 完整段定义
58、由SEGMENT和ENDS这一对伪指令实现,前者定义一个逻辑段的开始,后者表示一个逻辑段的结束。 段定义指令后的关键字用于确定段的各种属性,如果不指定,则采用默认参数;但如果指定,注意要按照顺序书写。,段定位属性,指定逻辑段在主存储器中的边界,可为: BYTE从下一个可用的字节 地址开始段 WORD从下一个可用的偶数 地址开始段 DWORD 从下一个可用的模4 地址开始段 PARA从下一个可用的模16 地址开始段 PAGE从下一个可用的模256地址开始段 完整段定义伪指令的默认定位属性是PARA,所以默认情况下数据段的偏移地址从0开始。,段组合属性,指定多个逻辑段之间的关系,可为: PRIVA
59、TE:本段不与其他段合并,每段都有自己的段地址。这是默认的段组合方式。 PUBLIC:连接程序把本段与所有同名同类型的其他段相邻连接,然后为所有这些段指定一个共同的段地址。 STACK:本段是堆栈的一部分,连接程序将所有STACK段按照与PUBLIC段的同样方式进行合并。这是堆栈段必须具有的段组合。,段类别属性,当连接程序组织段时,将所有的同类别段相邻分配。 段类别可以是任意名称,但必须位于单引号中; 大多数MASM程序使用:CODE 、DATA、STACK 来分别指示代码段、数据段和堆栈段,以保持所有代码和数据的连续。,ASSUME伪指令,ASSUME 段寄存器:段名,段寄存器:段名, ASSUME伪指令建立逻辑段与段寄存器之间的对应关系,汇编程序会据此在需要时自动插入段超越前缀。 ASSUME并不为段寄存器设定初值。连接程序将正确设置CS:IP和SS:SP。若程序中使用数据段或附加段,必须明确地为DS和ES赋值。,常量、变量和属性,常量表示一个固定的数值。可用作硬指令的立即数操作数或伪指令的参数。 变量实质上是指内存单元的数据。主要用作存储器操作数。 名字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康成长远离欺凌小学主题班会课件
- 员工职业发展规划与激励系统指南
- 产品经理敏捷开发实践指南
- 产品质量监测考核表
- 培养责任感助力成长-小学主题班会课件
- 项目进度跟进加强任务执行透明度手册
- 2026年新产品设计竞赛结果公告(3篇范文)
- 小学主题班会课件:孝亲敬老传家风助人为乐暖人心
- 音乐欣赏课:领略音乐的魅力小学主题班会课件
- 远离毒品守护健康成长三年级主题班会课件
- 2025年大学《农药化肥-农药学基础》考试备考题库及答案解析
- 2025年中国茶壶数据监测报告
- Pilz安全PLC培训教程中文
- 篮球馆运营管理办法
- (2025年标准)软件 技术协议书
- 义齿佩戴清洗存放课件
- 小学英语-三年级升四年级英语阅读理解专项(附答案)
- 2025年四川广安爱众股份有限公司对外招聘考试笔试试题(含答案)
- 煤生字第665号关于颁发《煤矿矿井机电设备完好标准》的通知
- 滚针美容治疗技术解析
- 血液透析上下机操作流程
评论
0/150
提交评论