汇编语言程序设计32(教室版).ppt_第1页
汇编语言程序设计32(教室版).ppt_第2页
汇编语言程序设计32(教室版).ppt_第3页
汇编语言程序设计32(教室版).ppt_第4页
汇编语言程序设计32(教室版).ppt_第5页
已阅读5页,还剩224页未读 继续免费阅读

下载本文档

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

文档简介

1、苏州科技学院电子学院赵梅制作,汇编语言程序设计,主讲:赵 梅,课程简介,引用,概述,汇编语言是计算机提供给用户的最快最有效的语言,也是利用计算机所有硬件特性并能直接控制硬件的唯一语言。,因而在对于程序的空间和时间要求很高的场合, 汇编语言是必不可少的。,很多需要直接控制硬件的应用场合, 更是非用汇编语言不可。,特点,汇编语言是介于计算机能直接理解的机器语言与使用者容易理解的高级语言之间的一种语言。它除有与代码指令一一对应的符号指令外,还增加了专用于定义变量、常量、符号、过程、分配存贮空间、定位程序起始地址等一系列称之为伪指令的符号指令。,同高级语言比较,它更接近机器语言,更能全面地反映计算机硬

2、件的功能特点。同机器语言比较,它易于阅读,编写和修改程序。因此, 使用汇编语言可编写出运行速度快、占存储空间少、能充分利用硬件资源、发挥计算机效能并能进行精确控制的程序。,应用,高级语言编译程序的编制;编辑、调试,链接装配、磁盘驱动和磁盘读写等实用程序的编制;控制、指挥和监测等实时处理程序的编制;计算机系统的开发。,汇编语言是面向机器的语言,故它将因计算机机型的不同而异。但用汇编语言进行程序设计的基本概念、基本技巧和基本方法是普遍适用的。我们选择目前国内最广泛使用的 IBM PC 作为基础讲授。其它机型同学们定可触类旁通。,学习,汇编语言程序设计,第1章 汇编语言基础知识 第2章 8086的指

3、令系统 第3章 汇编语言程序格式 第4章 基本汇编语言程序设计,第1章 汇编语言基础知识,1.1 计算机系统概述 1.2 数据表示 1.3 Intel80 x86系列微处理器 1.4 微型计算机系统 1.5 8086微处理器 1.6 8086的寻址方式,1.1 计算机系统概述,计算机系统,中央处理器 CPU,总线控制 逻辑,存储器,接口,接口,大容量 存储器,I/O 设备,系统总线,I/O 子 系 统,计算机结构,1.1 计算机系统概述,计算机程序设计语言,机器语言 汇编语言 高级语言,0或1组成的代码 使用指令集编写程序的规则,B8 64 00 05 00 01,一种符号语言 用助记符表示操

4、作码,MOV AX,100 ADD AX,256,接近于人类自然语言的语法 习惯及数学表达形式,1.2 数制表示,数制的基数与权,基数:数制所使用的数码个数,例:十进制数使用09十个数,所以它的基数是10,权:数制每一位置所具有的值,二进制数使用 0、1两个数, 它的“基”?各 位的“权”又是 多少呢?,由0、1二个数码构成,基数为2,第i位的权为2i, 运算规则:逢二进一、借一作二,二进制数(Binary ),101011B=125+024+123+022+121+120=43D,一个二进制数按权展开求和就转换成了对应的十进制数,十六进制数(Hexadecimal),14AFH=1163+4

5、162+10161+15160=5295D,十六进制数是汇编语言的书写工具,数制转换(1),1. 非十进制数转换成十进制数,按权展开求和,2. 十进制数转换成非十进制数,整数部分与小数部分 分别转换,数制转换(2),例2:十进制数转换成非十进制数(小数部分),0.625D=0.101B=0.AH,0.625*2=1.251 0.25*2= 0.50 0.5*2= 11,0.625*16=10A,乘基数取整数,57.625D=111001.101B=39.AH,高,低,数制转换(3),3. 二、十六进制数之间的转换,二进制数 十六进制数 四位一组,分组时如位数不够,整数部分在最左边补零,小数部分

6、在最右边补零,十六进制二进制,一位对应换成二进制数四位,1100100.11011B=,.,0100,0110,1101,1000,=64. D8H,4,6,D,8,编码,ASC码: 美国信息交换标准码,一般用7bit 二进制编码 来表示数字 、英文字母、符号等,ASCII值小于20H的是不可显示字符,BCD码:1位十进制数用4位二进制编码表示,有符号数的表示法,机器数: 连同一个符号位在一起作为一个数叫机器数,连符号一起数字化了的数,机器数,反码:对于二进制正数,反码等于该数原码 对于二进制负数,符号位为1,其余各位取反,有符号数的表示法,补码:对于二进制正数,补码等于该数原码 对于二进制负

7、数,符号位为1,其余各位取反,末位加1,例:设机器字长为8位,二进制数+1100101和-1010001 其补码为:01100101,10101111,有符号数的表示法,1.3 Intel 80X86微处理器,型号,8086,8088,80286,80386,发布 年份,1978,1979,1982,1986,字长 (位),16,16,32,16,晶体管数 (万个),2.9,2.9,13.4,27.5,主频 (MHz),4.77,4.77,620,12.533,数据 总线 宽度 (位),16,16,16,32,外部 总线 宽度 (位),地址 总线 宽度 (位),寻址 空间,高速 缓存,16,8

8、,16,32,20,20,24,32,1M,1M,16M,4G,无,无,无,有,型号,80486,Pentium (586),发布 年份,1989,1993,1995,1997,字长 (位),32,32,32,32,晶体 管数 (万个),120 160,310 330,550,750,主频 (MHz),25 100,60 166,150 200,233 333,数据 总线 宽度 (位),32,64,64,64,外部 总线 宽度 (位),地址 总线 宽度 (位),寻址 空间,高速 缓存,32,64,64,64,32,32,36,36,4G,4G,64G,64G,8KB,8KB数 据8KB 指令,

9、Pentium Pro(P6),Pentium II,8KB数 据8KB 指令 256KB 二级高 速缓存,32KB 512KB二级高速缓存,有独立封装和独立总线,1.4 微型计算机(PC)系统,1981年,IBM公司,8088CPU,IBM PC个人计算机,扩展型PC/XT,增强型IBM/AT(80286),各种32位PC采用32位Intel 80 x86CPU,现在人们谈论的PC机是以80 x86CPU 构成的微型计算机系统,主 存 空 间 的 分 配,复制ROM,HMA(64KB),系统ROM 128KB,系统RAM 640KB,显示RAM 128KB,扩展ROM 128KB,FFFFF

10、FFF,00100000,000E0000,000C0000,000A0000,00000000,系统RAM 640KB,显示RAM 128KB,扩展ROM 128KB,系统ROM 128KB,实方式主存,高端主存区,复制BIOS,只能在保护方式使用,PC软件,汇编语言的运行环境,DOS操作系统,Windows 的MS-DOS环境,汇编语言程序设计主要利用的一些软件:,编辑软件:EDIT;记事本;Turbo C编辑器等 汇编程序:MASM 5.X; MASM 6.X; Turbo ASM 等 连接程序:LINK.EXE 调试程序:DEBUG、 Turbo Debugger等,1.5 8086微

11、处理器,SP,BP,SI,DI,CS,DS,SS,ES,IP,内部暂存寄存器,暂存寄存器,FR,EU控制系统,总线控制逻辑,数据总线16,通用寄存器,8088,指令队列,8088/8086 外部总线,数据总线,地址总线20位,执行部件EU,总线接口部件,BIU,16位,控制总线,AX BX CX DX,SP,BP,8086的寄存器,AX BX CX DX,15 0,累加器 基地址寄存器 计数器 数据寄存器,8086/8088,堆栈指针 基址指针 源变址 目的变址,DI,SI,通用寄存器,专用寄存器,IP,指令指针寄存器 标志寄存器,用来存放代码段的偏移地址,总是指向下一条指令的首地址,FLAG

12、S,15 0,存储器组织与段寄存器,1,0,12H 40H 35H 18H,(0002H)=40H (0000H)=18H,字:2个字节组成一个字(16位),注意: 机器内部访问存储器字单元 时是以偶地址开始的,如果 以奇地址访问字单元,需要 访问两次存储器,同一个地址既可看作字节单元的地址,又可看作 字单元、双字单元或4字单元的地址,存储器的分段管理,指令指针寄存器IP16位 和地址有关的寄存 器SP、BP、SI、DI16位 算术逻辑单元ALU16位,分段,每一段可以从1M空间的任 一个能被16除尽的地址开始。 段内地址是16位的,物理地址的形成,四个专门存放段地址的寄存器 CS:代码段寄存

13、器 DS:数据段寄存器 SS:堆栈段寄存器 ES:附加段寄存器,每一个段寄存器可以确定一个段的起始地址,存放当前正在运行程序的段首地址 存放当前程序所用数据的段首地址 存放堆栈区域的段首地址 辅助数据区域的段首地址,物理地址=段地址16+偏移地址,地址加法器,加法器,1.6 8086的寻址方式,寻址方式:寻找操作数的方式,指令系统:编制计算机程序的指令集合,程序:就是根据需要用指令编排出的操作顺序,机器指令 8B D9 8A 04 BF 00 20,汇编语言指令格式,例: MOV AL,80H,立即数可以是8位、16位 、32位(386以后)数值 立即数通常用来给寄存器赋值,2. 寄存器寻址,

14、操作数在8位、16位(或32位)寄存器中,INC CX ;将CX的内容加1 ROL AH,1 ;将AH中的内容循环左移一位 MOV AX,BX MOV AX,1090H,寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP AH、AL、BH、BL、CH、CL、DH、DL,在一条指令中,可以对源操作数采用寄存器寻址,也可以对目 标操作数采用寄存器寻址,还可以两者都采用寄存器寻址方式,例:,3. 存储器寻址,操作数在存储器中,其有效地址(EA)包含在指令中的寻址方式,注意:立即数寻址和直接寻址的书写格式, 直接寻址的地址要放在方括号中,ES:,(1)直接寻址,假设DS=5000H,地址 为5

15、1070H字存储单元 的内容是6789H。,执行 MOV AX, 1070H,例: MOV AX, VALUE 或 MOV AX,VALUE,符号地址,(2) 寄存器间接寻址,操作数在存储器中,操作数的有效地址是 寄存器的内容。,BX、BP SI、DI 之一,注:如果没有特殊说明,用寄存器BP寻址时, 段寄存器是SS,其余为数据段寄存器DS 。,例1:假设(DS)=5000H,(SI)=1234H, 51234H字单元的内容是6789H,执行指令 MOV AX,SI,例2:假设(SS)=4000H,(BP)=1234H, (CX)=6789H,执行该条指令 MOV BP,CX,存储器,堆 栈

16、段,40000H,41234H,.,00000H,41235H,(3) 寄存器相对寻址,带位移量的寄存器间接寻址,有效地址=,BX BP SI DI,+,8位位移量 16位位移量,执行该指令后,(AX)=55AAH,例: 假设(DS)=5000H,(DI)=3678H 548ACH字存储单元的内容是55AAH,50000H 3678H 1234H 548ACH,+,带位移量的寄存器间接寻址寄存器相对寻址,MOV AX,1234H DI ,执行 MOV AX, DI+1234H ,寄存器间接寻址的物理地址单元是548ACH,(4) 基址变址寻址,操作数的有效地址是一个基址寄存器的内容加上 一个变

17、址寄存器的内容,有效地址EA=,+,BX BP,SI DI,语句执行后(17000H)和(17001H)AX,例: MOV AX,BX+SI,假设(DS)=1000H,(BX)=5000H,(SI)=2000H 则:有效地址为:(BX)+(SI)= 7000H 物理地址为:10000H+7000H=17000H,MOV AX, BX SI ,(5) 相对基址变址寻址,有效地址EA=,+,带位移量的基址变址寻址,+,BX BP,SI DI,8位位移量 16位位移量,语句执行后(17002H)和(17003H)AX,例: MOV AX,BX+SI+2,假设(DS)=1000H,(BX)=5000H

18、,(SI)=2000H 则:有效地址为:(BX)+(SI)+2 =7002H 物理地址为:10000H+7002H=17002H,MOV AX,2BXSI,综合练习,假设:BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H 指令没有使用前缀。, 直接寻址:有效地址= 物理地址=,1B57H 21000H+1B57H=22B57H, 寄存器间接寻址(寄存器为BX): 有效地址= 物理地址=,0158H 21000H+0158H=21158H, BX寄存器相对间接寻址: 有效地址= 物理地址=,0158H+1B57H=1CAFH 21000H+1CAFH=22CAFH,综合练

19、习,假设:BX=0158H,DI=10A5H,位移量=1B57H, DS=2100H 指令没有使用前缀。, 变址寻址(寄存器为DI) :,10A5H 21000H+10A5H=220A5H,10A5H+1B57H=2BFCH 21000H+2BFCH=23BFCH,有效地址= 物理地址=,综合练习, 基址变址寻址(BX为基址寄存器,DI为变址寄存器) 有效地址= 物理地址=,0158H+10A5H=11FDH 21000H+11FDH=221FDH, 相对的基址变址寻址(BX为基址寄存器,DI为变址寄存器) 有效地址= 物理地址=,0158H+10A5H+1B57H=2D54H 21000H+

20、2D54H=23D54H,假设:BX=0158H,DI=10A5H,位移量=1B57H, DS=2100H 指令没有使用前缀。,寻址方式总结,操作数寻址,作业:1.11 1.15 1.17 1.19 1.20 1.22 1.24,第2章 8086的指令系统,2.1 数据传送类指令 2.2 算术运算类指令 2.3 位操作类指令 2.4 控制转移类指令 2.5 串操作类指令 2.6 处理机控制类指令,2.1 数据传送类指令,指令系统,数据传送指令 算术指令 逻辑指令 串处理指令 控制转移指令 处理机控制指令,1. 传送指令,功能:把一个字节或一个字从源操作数SCR送至 目的操作数DST,源操作数不

21、改变。,注意:源和目的操作数的类型要一致,即同时为字节或同时为字,段寄存器 CS、 DS、ES、SS,立即数,存储器,8位获16位通用寄存器 AX、BX、CX、DX BP、SP、SI、DI,IP,MOV指令不影 响标志位,2.1 .1 通用数据传送指令,例:,MOV AX,1000H,MOV AL,E,MOV AX,2BPSI,;立即数送到AX,;立即数送到AL,E的ASCII码,如果BP换成BX?,判断对错,MOV 5,AL MOV BX,SI MOV DS,1000H MOV CS,AX MOV AX,DX MOV SI,SI MOV SI,AX, ,判断对错,MOV BX,AL MOV

22、AX,DI+SI MOV DS,ES MOV AL,AH MOV DS,AX MOV SI,DI MOV 2SI,AX, ,学习DEBUG,2. 交换指令XCHG,格式:XCHG OPRD1,OPRD2 功能:操作数OPRD1的内容与操作数OPRD2的 内容交换,OPRD1和OPRD2可以是通用寄存器和存储单元 (两个操作数不能同时为存储单元)可以采用 各种存储器寻址方式 注意:不允许使用段寄存器、立即数,例:XCHG AL,AH XCHG SI,BX XCHG SI+3,AL XCHG DX,DI+BX+3,格式:XLAT 功能:完成一个字节的查表转换。 把累加器AL中的值,转换成以BX 为

23、表基址的表中值,3. 换码指令XLAT,注意:表的长度不能超过 256个字节,AL=,XX,换码指令的功能,TABLE,.,XX,例:用查表法查求 3 的平方,假设数据表已经存放在2000H开始的内存中。,2000H,2009H,MOV BX,2000H,XLAT,09H,主程序,子程序1,子程序2,CS:IP,CS:IP,2.1 .2 堆栈操作指令,00000H,50000H,52000H,堆栈段,假设:SS=5000H,SP=2000H,SP自动减2 将源操作数的内容传送到 SP指向的单元,8A,9B,1. 进栈指令PUSH,00000H,50000H,52000H,堆栈段,假设:SS=5

24、000H,SP=1FFEH,2. 出栈指令POP,将SP指向单元的内容传送到 目的操作数 SP自动加2,8A,9B,9B,8A,执行后 BX=,H,可以是通用寄存器、段寄存器(CS除外)和字存储单元,PUSH reg POP reg PUSH mem POP mem PUSH segreg POP segreg PUSH data,除CS的所有段寄存器,8086以后,1. 标志寄存器传送,(1) 标志送AH指令LAHF,格式: LAHF 功能:标志寄存器的低8位对应的传送到寄存器AH,15,0,7,0,2.1 .3 标志传送指令,格式:SAHF 功能:寄存器AH的内容对应的送至标志寄存 器的低

25、8位,(2) AH送标志指令SAHF,7,0,(3) 标志进栈指令PUSHF,格式:PUSHF 功能: SP-2 ,把标志寄存器的内容(16位)压入堆栈,2. 标志位操作,1. 有效地址送指令LEA,格式:LEA REG,SRC,16位通用寄存器,功能:把源操作数的有效地址传送到目的操 作数REG寄存器中,例:LEA AX,2728H ;将2728单元的有效地址送AX, 执行后,AX=2728H LEA BX,BP+SI ;指令执行后,BX的内容为 BP+SI的值,注意:LEA 和 MOV 的区别,2.1 .4 地址传送指令,格式: LDS REG,SRC,功能:源操作数 SRC所指向的存储单

26、元的内容 送到目的寄存器REG中接下来存储单元 的内容送到数据段寄存器DS。,2. 指针送指令,LDS、LES,例:LDS DI ,2130H,2130H,2133H,执行后 DS= DI=,LES对应的段寄存为ES,存储器,78,56,34,12,H,H,输入指令IN,格式:IN 累加器,端口地址 功能:从一个端口读取一个字节或一个字,传 送到AL或AX,端口地址可以直接给出或由DX寄存器间接给出,注意:外部设备最多可有65536个I/O端口 (0000FFFFH), 只有前256个端口地址可 在指令中直接给出(00FFH),2.1 .5 输入输出指令,例: IN AL,50H ;从50H端

27、口读入8位数据到AL IN AX,70H ;从70H端口读入16位数据到AX,直接寻址或长格式,2. 输出指令OUT,格式: OUT 端口地址,累加器 功能:将AL中的一个字节或AX中的一个字输出 到指定端口,例: OUT 5,AL ;将AL寄存器的内容输出到端口5 OUT DX,AL ;将AL的内容输出到DX所指向的端口 OUT DX,AX ;将AX的内容输出到DX所指向的端口,判断对错:,OUT 258,AL OUT DX,BL IN AL,1234H IN AL,BH OUT 120,AL OUT DX,AL IN AL,80H IN AL,DX,判断对错:,PUSH AL POP CS

28、 XCHG DS,BX XCHG BX,SI POP BH XCHG AX,1234H,2.2 算数运算类指令,1. 加法指令ADD,格式: ADD DST,SRC 功能:两个操作数相加,结果送至目的操作数 DST,源操作数不变,操作数可以是字节、字,例:,ADD AL,50H,;AL的内容和50H相加,结果AL中,加法指令对标志位的影响, ZF 零标志 结果为零ZF=1,否则ZF=0 SF 符号标志 结果为负SF=1,否则SF=0 CF 进位标志 结果最高有效位有进位 CF=1,否则CF=0 AF 半进位标志 低4位向高4位有进位AF=1,否则AF=0 PF 奇偶标志 低8位1的个数为偶数P

29、F=1,否则PF=0,对OF SF ZF AF PF CF 六个标志产生影响,1 0 0 1 1 1 0 0 + 1 0 0 0 1 0 1 0,0 0 1 0 0 1 1 0,CF= SF= AF=,例:9CH+8AH=26H,1,0,1,ZF=0 PF=0, 溢出标志OF,溢出:超出数据位能表示的范围,8位二进制数 0255(0 28) -128+127(-27+27-1) 16位二进制数 065535( 0 216) -32768+32767(-215215-1),若两个操作数的符号相同,而结果的 符号与之相反时,OF=1,否则OF=0,OF标志是根据操作数的符号变化来设置的,如果两个同

30、符号数相加,结果符号位发生了 变化,则表示溢出,0 0 1 0 0 0 1 0,OF=1,符号位变化了,表示结果超出了8位二进制数表示的数据范围,0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0,1 0 0 0 0 1 0 1,OF=1,符号位变化了,例2:,0 0 0 0 1 1 0 1,符号位没变,OF=0,OF=?,2. 带进位加法指令ADC,格式: ADC DST,SRC 功能:两个操作数相加再加上进位标志CF,结果 送至目的操作数DST,源操作数不变,操作数可以是字节、字,AX=,MOV SI,2000H MOV AX,SI MOV DI,3000H ADD AX,

31、DI MOV SI ,AX MOV AX, SI+2 ADC AX, DI+2 MOV SI+2 ,AX,例:编写两个四字节的无符号数相加的程序段,两个数分别 放在2000H、3000H开始的单元,要求结果放在2000H 开始的单元,56,34,12,F0,DE,BC,9A,78,2000H,3000H,MOV AX,SI,H,ADD AX,DI,MOV DI,3000H,MOV SI,2000H,56,78,3568H,CF=1,AX=,MOV SI,2000H MOV AX,SI MOV DI,3000H ADD AX,DI MOV SI ,AX MOV AX, SI+2 ADC AX,

32、DI+2 MOV SI+2 ,AX,例:编写两个四字节的无符号数相加的程序段,两个数分别 放在2000H、3000H开始的单元,要求结果放在2000H 开始的单元,56,34,12,F0,DE,BC,9A,78,2000H,3000H,MOV AX,SI,ADD AX,DI,MOV DI,3000H,MOV SI,2000H,MOV SI ,AX,56,78,3568H,CF=1,35,68,AX=,MOV SI,2000H MOV AX,SI MOV DI,3000H ADD AX,DI MOV SI ,AX MOV AX, SI+2 ADC AX, DI+2 MOV SI+2 ,AX,例:

33、编写两个四字节的无符号数相加的程序段,两个数分别 放在2000H、3000H开始的单元,要求结果放在2000H 开始的单元,56,34,12,F0,DE,BC,9A,78,2000H,3000H,MOV AX,SI,12,34,H,ADD AX,DI,MOV DI,3000H,MOV SI,2000H,MOV SI ,AX,MOV AX, SI+2 ,35,68,ADC AX, DI+2 ,CF=1,ACF1H,78,56,AX=,MOV SI,2000H MOV AX,SI MOV DI,3000H ADD AX,DI MOV SI ,AX MOV AX, SI+2 ADC AX, DI+2

34、 MOV SI+2 ,AX,例:编写两个四字节的无符号数相加的程序段,两个数分别 放在2000H、3000H开始的单元,要求结果放在2000H 开始的单元,56,34,12,F0,DE,BC,9A,78,2000H,3000H,MOV AX,SI,12,34,H,ADD AX,DI,MOV DI,3000H,MOV SI,2000H,MOV SI ,AX,MOV AX, SI+2 ,ADC AX, DI+2 ,CF=1,ACF1H,MOV SI+2 ,AX,F1,AC,CF=0,3. 增量指令 INC,格式: INC OPR 功能:操作数OPR的内容加1,结果送回OPR,这条指令执行的结果不影

35、响进位标志CF, 但影响其它的五个状态标志,例: INC AL ;AL的内容加1 INC CX ;CX的内容加1,操作数可以是字节、字,1. 减法指令SUB,格式: SUB DST,SRC 功能: DST的内容减去SRC的内容,结果送到目 的操作数DST中,源操作数不变。,执行结果和加法指 令一样影响标志位,2.2.2 减法指令,3. 减量 指令DEC,格式:DEC OPR 功能:操作数OPR的内容减1,并把结果送回OPR,执行结果不影响CF,但影响其它五个状态标志,执行结果影响状态标志,5. 比较指令CMP,格式: CMP OPR1,OPR2 功能: 操作数OPR1的内容减去OPR2的内容,

36、运 算结果不送到OPR1,但影响状态标志,注意:执行CMP OPR1,OPR2 后,OPR1和OPR2 两个操作数本身没有任何变化,只影响了 标志,例:a、b、c均为双精度数,它们分别放在地址为 X、Y、Z、的存储单元中, 存放时高位字在高地址,低位字在低地址中, 编程实现 a+b+24-c,结果在W单元中。,MOV AX,X MOV DX,X+2 ADD AX,Y ADC DX,Y+2 ADD AX,24 ADC DX,0 SUB AX,Z SBB DX,Z+2 MOV W,AX MOV W+2,DX,格式: MUL IMUL SRC 功能:如果SRC是字节操作数,则AL的内容与 SRC相乘

37、16位结果送到AX中。如果SRC 是字操作数,则AX的内容与SRC相乘32 位的结果送到DX和AX中,DX中是高16位, AX中是低16位,有符号数乘法指令,源操作数,是除立即数以外的任意寻址方式,2.2 .3 乘法指令,如果乘积结果的高半部分(字节相乘时为AH,字相 乘时为DX)不等于零,则标志CF=1,OF=1;否则 CF=0,OF=0。有符号数积的高一半是低一半的符 号扩展,CF=OF=0,否则CF=OF=1,对其它标志, 该指令无定义,所以,如果CF=0,OF=0,表示AH或DX中 的结果数无效。,例: 假设(AL)=0B4H,(BL)=11H 求执行MUL BL的乘积值 求执行IMU

38、L BL的乘积值, 无符号数: (AL)=0B4H=180D ( BL)=11H=17D,执行 MUL BL 后 (AX)=0BF4H AH0 CF=OF=1,有符号数: (AL)=0B4H= -76D (BL)=11H=17D,执行 IMUL BL 后 (AX)=0FAF4H (AH)不是符号扩展 CF=OF=1,0B4H=10110100B 取补码=4CH = - 76D,格式: DIV/ IDIV SRC 功能:如果SRC是字节操作数,则AX的内容除以 SRC ,8位的商送到AL中;8位余数送到AH 中。如果SRC是字操作数,则DX(高16位) 和AX(低16位)中的内容除以SRC的内容

39、, 16位的商送到 AX中;16位的余数送到DX中。,有符号数除法指令,源操作数,是除立即数以外的任意寻址方式,2.2 .4 除法指令,有符号数除法指令,余数的符号和被除数的 符号相同。除法指令对标志位的影响无定义,注意: 如果除数为0,或者8位数除时商超过8位, 或者16位除时商超过16位,则引起0号中断,(1) CBW 字节转换为字命令,格式:CBW 功能:寄存器AL中的符号扩展到寄存器AH。 若AL的最高有效位为0,则AH=0,否则 AH=0FFH,2.2 .5 符号扩展指令, MOV AX,X IMUL Y ;计算X*Y (结果在DX,AX中) MOV CX,AX MOV BX,DX

40、;积保存到BX:CX中 MOV AX,Z CWD ;把AX扩展为32位(扩展到DX) ADD AX,CX ADC DX,BX SUB AX,1024 ;计算差 SBB DX,0 ;减借位 MOV CX,75 IDIV CX ;计算商和余数 ,例:计算表达式的值 (a*b+c1024)/ 75,假设其中的a、b、c均为16位带符号数,分别放在名 为X、Y、Z的变量单元中。,结果商保存在AX中, 余数保存在DX中,a*b的值,DX:AX是Z值,十进制调整,压缩BCD码加法调整指令DAA 压缩BCD码减法调整指令DAS 非压缩BCD码加法调整指令AAA 非压缩BCD码减法调整指令AAS 非压缩BCD

41、码乘法调整指令AAM 非压缩BCD码除法调整指令AAD,用4位二进制数表示1位十进制数。一个字节含有两个十进制数位的二进制数,以8位为一组表示一个十进制数位,8位中的低4位表示8421的BCD码,高4位没有意义,2.2 .6 十进制调整指令,1. 压缩BCD码加法调整指令 DAA,格式:DAA 功能:如果AF=1,或AL的低4位是十六进制的AF 则AL内容加06H,且AF=1 如果CF=1,或AL的高4位是十六进制的AF 则AL内容加60H,且CF=1,执行完加法指令ADD或ADC,加的结果在AL寄存器中,DAA指令对OF标志无定义,但影响其它标志位,2. 压缩BCD码减法调整指令 DAS,格

42、式:DAS 功能:如果AF=1,或AL的低4位是十六进制的AF 则AL内容减去06H,且AF=1 如果CF=1,或AL的高4位是十六进制的AF 则AL内容减去60H,且CF=1,执行完减法指令SUB或SBB,减的结果在AL寄存器中,DAS指令对OF标志无定义,但影响其它标志位,3.非压缩BCD码加法调整指令AAA,格式:AAA 功能:如果AL低4位在09之间,且AF=0,则清AL 的高4位,CF=0 如果AL的低4位在十六进制数AF之间,或AF=1 则AL内容加6H,清AL高4位,AH内容加1,AF=CF=1,执行完加法指令ADD或ADC,加的结果在AL寄存器中,AAA指令只影响AF和CF,其

43、余标志位无定义。,4. 非压缩BCD码减法调整指令AAS,格式:AAS 功能:如果AL低4位在09之间,且AF=0,则清AL 的高4位,CF=0 如果AL的低4位在十六进制数AF之间,或AF=1 则AL内容加6H,清AL高4位,AH内容减1,AF=CF=1,执行完减法指令SUB或SBB,减的结果在AL寄存器中,AAS指令只影响AF和CF,其余标志位无定义。,5. 乘法的ASII调整指令AAM,格式:AAM 方法:把AL内容除以0AH,商放在AH中,余数在 AL中。,执行完乘法指令MUL,结果在AL寄存器中,AAM指令根据AL的内容影响SF、ZF和PF,其余无定义。,6. 除法的ASCII调整指

44、令AAD,格式: AAD 操作: 10*(AH)+(AL),(AH)0,2.3 位操作类指令,2.3.1 逻辑运算指令,1. 逻辑与指令AND,格式: AND DST,SRC 功能:两个操作数进行按位的逻辑“与”运算,结果送到 目的操作数DST,CF=0,OF=0,逻辑运算是按位操作的,2. 逻辑或指令OR,格式: OR DST,SRC 功能:两个操作数进行按位的逻辑“或”运算,结果送到 目的操作数DST,CF=0,OF=0,4. 逻辑非指令NOT,格式: NOT OPR 功能:操作数OPR取反,然后送回OPR,对标志没有影响,1、检查AL中的D6位或D2位是否有一位为1,例:逻辑指令练习,2

45、、要求屏蔽AL寄存器中的D6位和D4位,AND AL,0AFH 10101111B,3、要求AL寄存器中的D0位和D1位变反,XOR AL,03H 00000011B,格式:SAL OPR,CNT ;算术左移指令 SHL OPR,CNT ;逻辑左移指令,功能:操作数左移m位,Shift Arithmetic Left,SHift logic Left,对于8086机型CNT为1或为CL 当要移多位时,移位位数 需存放在CL寄存器中。,2.3.2 移位指令,SAR OPR,CNT ;算术右移指令,Shift Arithmetic Left,移位指令根据移位后的结果影响SF、ZF、PF; 当移位位

46、数为1时,移位后最高有效位发生变化 OF置1否则OF=0。当移位次数大于1时OF无定义,CF,高 低,操作数,2.3.3 循环移位指令,ROL OPR,CNT ;左循环移位指令 ROR OPR,CNT ;右循环移位指令,格式:,功能:操作数左(或右)循环 移CNT位,CNT是移位 位数,为1或为CL,当 要移多位时,移位位数 需存放在CL寄存器中。,只影响标志CF和OF,Rotate lift ( Right ),RCL OPR,CNT ;带进位左循环移位指令 RCR OPR,CNT ;带进位右循环移位指令,带进位循环移位指令,格式:,例:编程,不用乘法指令将AL中的数乘以10,SAL AL

47、,1 ;AL中的数左移1位(2) MOV BL ,AL MOV CL ,2 SAL AL ,CL ;AL中的数左移2位(8) ADD AL ,BL ;AL中的数10,2.4 控制转移类指令,2.4.1 无条件转移指令,JMP,程序的位置由 代码段寄存器CS和程序 指针寄存器 IP确定,(1)段内直接短转移,格式:JMP SHORT 标号,规定了转移范围 -128+127,符号地址,功能:控制程序无条件转移到标号地址,执行的操作:,(IP)(IP)+8位位移量,当前IP值与标号地址的距离,相对,例:程序段如下, JMP SHORT HELLO MOV AL,3 ,HELLO:,执行的操作:,(I

48、P)(IP)+8位位移量,E8 06,B0 03,0101H 0102H 0103H 0109H 010AH,8位位移量,JMP,MOV指令,代码段,(2)段内直接近转移,格式:JMP NEAR PTR 标号,符号地址,功能:控制程序无条件转移到标号地址,执行的操作:,(IP)(IP)+16位位移量,当前IP值与标号地址的距离,可以转移到段内的 任一位置,(3)段内间接近转移,格式:JMP WORD PTR OPR,功能:无条件转移到由OPR确定的有效地址,执行的操作:,(IP)(EA),除立即数以外的 任何一种寻址方式,寄存器或存储单元的内容,例: JMP WORD PTR BP+TABLE

49、 JMP BX JMP WORD PTR BXSI,(4)段间直接远转移,格式: JMP FAR 标号,功能:控制程序无条件转移到标号地址,执行的操作: (IP) 标号所在位置的段内偏移地址 (CS)标号所在段的段地址,JMP 指令不影响标志位,2.4.2 条件转移指令,1. 判断单个标志位状态,例:编一个程序。从外设71H取一个数M,判断其值是否在10和 20之间,即10M20。如果M20,则送0FFH给外设73H; 如果M10,则送00H给外设73H;如果10M20, 则送88H给外设73H。,MOV AL,BL OUT 73,AL,(2)比较两个无符号数,并根据比较的结果转移,指令格式

50、转移条件 转移说明,JB/JNAE/JC 标号 CF=1 jump if below,or not above or equal,or carry JNB/JAE/JNC 标号 CF=0 jump if not below,or above or equal,or not carry JBE/JNA 标号 CFZF=1 jump if below or equal , or not above JNBE/JA 标号 CFZF=0 jump if not below or equal , or above,JL / JNGE JNL / JGE JLE / JNG JNLE / JG,Jump

51、if less, or not greater or equal Jump if not less, or greater or equal Jump if less or equal, or not greater Jump if not less or equal, or greater,(3) 比较两个带符号数,并根据比较结果转移,指令格式 转移条件 转移说明,格式:LOOP 标号 功能:使寄存器CX的值减1,如果结果不等于0,则循环 至标号,否则顺序执行。,DEC CX JNZ 标号,2.4.3 循环指令,循环指令不影响标志位,例: 有一个首地址为 ARRAY的M字数 组,试编写一程

52、序,求出该数组 的内容之和(不 考虑溢出),把 结果存入TOTAL 中。,例:在存储器有一个首地址为ARRAY的N字数组,要求 测试其中的正数、0及负数的个数,正数的个数放在 DI中,0的个数放在SI中,并根据N-(DI)-(SI)求 得负数的个数放在AX中。,2.4.4 子程序指令,后移,3.1 汇编语言程序的开发 3.2 参数、变量和标号 3.3 程序段的定义和属性,第3章 汇编语言程序格式,3.1 汇编语言程序的开发,编辑程序,源程序文件 .asm,汇编语言程序的开发过程,1、检查源程序 2、测出源程序中的语法错误,并给出错误信息。 3、产生目标程序,也可给出列表程序和交叉索引程序 4、

53、展开宏指令,汇编程序的功能: 汇编程序对源程序进行两遍扫描,3.2 参数、变量和标号,伪指令语句格式,完成处理器选择、定义程序模块、定 义数据、分配存储区、指示程序结束等,1. 常数 没有任何属性的纯数值。在程序运行中不发生变化。,如:10010011B、0A5H、”ZHIFUCHUAN”,变 量:表示存储单元,单元中的数在程序运行期间随时 可以修改。 变量名:存放数据单元的符号地址,标 号:表示存储单元,单元中存放的是机器指令代码,段属性(SEG):变量或标号对应存储单元所在段的段值 偏移量属性(OFFSET):变量或标号对应存储单元的起 始地址的段内偏移 类型属性(TYPE):变量类型主要

54、是字节(BYTE)、 字(WORD)、双字(DWORD) 标号类型主要是近(NEAR)和远(FAR),2. 数值表达式,数值表达式:由操作数或运算符组成的式子,算术运算符: +、-、*、/、MOD(除法取余)、SHL(左移)、 SHR(右移),例: MOV AX,100*4+5 ;AX=405,1. 符号定义伪指令(赋值语句),格式: EQU 功能:用符号来代表表达式的内容, 等价语句EQU,表达式可以是常数、数值表达式、字符串、存储器符号等,例:COUNT EQU 100 ;符号COUNT代表常数100 BUFF EQU 4*COUNT ;BUFF代表400 HELLO EQU “How a

55、re you! ” ;HELLO代表How are you VARW EQU THIS WORD ;变量VARW的类型是字,注意:等价语句的符号名不能被重新赋值, 等号语句=,格式: = 功能:用符号来代表表达式的数值,数值表达式,3.2.2 变量定义伪指令,1. 定义字节单元伪指令,格式:名字 DB 功能:表达式值或项表中的每一项是一个字节数, 它们从符号名地址开始按字节连续存放。,例:COUNT DB 100 DB 0DH,0AH, VARW DB ?,6,?,2*3,可以使用重复操作符DUP如: BUFFER DB 8 DUP(0),2. 定义字单元伪指令,格式:名字 DW 功能:表达式

56、值或项表中的每一项是一个字数, 它们从符号名地址开始按字连续存放。,例:FLAG DW 2FCDH,24H DW ?,3. 定义双字单元伪指令,格式:名字 DD 功能:表达式值或项表中的每一项是四个字节数,它们 从符号名地址开始按四字节从低地址连续存放。,DT定义10字节伪指令指令,例:,DAT DB 10,10H WORDD DW 100H,? ARRAY DB 2 DUP(2,3) ABC DD 0FFFDH,DUP可以嵌套如: ARRAY DB 100 DUP(0,2 DUP(1,2),3),汇编后的内存分配情况 ,格式:ORG 功能:把以下语句定义的内存数据或程序,从表达式 指定的起点开始连续存放。,5. 定位伪指令,(1) ORG伪指令,(2) 地址计数器 $,汇编语言用符号“$”表示地址计数器的当前值,例2:“$”在伪指令中的应用,DAT SEGMENT DATA1 DB 1,2,3,4,5 CNT1 EQU $-DATA1 DATA2 DW 1,2,3,4,5 CNT2 EQU ($-DATA2)/2 DAT ENDS,CNT1、CNT2的值分别为DATA1、DATA2中数据元素的个数,(3) EVEN对准伪指令,格式:EVEN 功能:

温馨提示

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

评论

0/150

提交评论