版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言的特点:Ø 面向机器的低级语言,通常是为特定的计算机或计算机系列专门设计的。Ø 保持了机器语言的优点,具有直接和简捷的特点。Ø 可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。Ø 目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。第一章 基础知识教学目的和要求:Ø 熟练掌握进位计数制和各种进位计数制之间的数制转换Ø 掌握计算机中数和字符的表示方法教学重点:Ø 二进制数和十六进制数运算教学难点:Ø 十六进制数的运算1.1 进位计数制与不同基数的数之间的转换1.1.1 二
2、进制数转换为十进制数方法:按权展开例如:1010110.1011B=26+24+21+2-1+2-3+2-41.1.2 十进制转换为二进制数方法:整数部分:除基取余,自底向上小数部分:乘基取整,自顶向下例如:N=130D,求其对应的二进制数130D=10000010B1.1.3 十六进制数及其与二进制、十进制之间的转换1十六进制数二进制数例如:3B2H=10110110010B1001001101B=24DH2十六进制数十进制数3B2H=3×162+11×161+2×16023D=17H1.2 二进制数和十六进制数的运算1.2.1 二进制数运算逢二进一 借一为二加
3、法规则 乘法规则 0 + 0 = 0 0 ´ 0 = 0 0 + 1 = 1 0 ´ 1 = 0 1 + 0 = 1 1 ´ 0 = 0 1 + 1 = 0 (进位1) 1 ´ 1 = 11.2.2 十六进制数运算1加法和减法逢十六进一 借一为十六2乘法化为十进制数,求得结果后再化为十六进制数1.3 计算机中数和字符的表示1.3.1 数的补码表示规则:正数的补码等于原码负数的补码等于其绝对值的原码各位取反然后末位加一如:36D,机器字长为16位,求其补码36的原码为0000000000100100按位取反:1111111111011011末位加一:111
4、11111110111001.3.2 补码的加法和减法加法规则:X+Y补码 = X补码 + Y补码减法规则:X-Y补码 = X补码 + -Y补码例如:机器字长为8,求3217补,326补3217补: 001000001110111100001111326补:001000000000011000100110注:Ø 补码减法可转换为补码加法Ø 进位和溢出进位: 由于运算结果超出了位数,最高有效位向前的进位,这一位自然丢失,一般不表示结果的对错。溢出:表示结果超出了字长允许表示的范围,一般会造成结果出错。1.3.3 无符号数1.3.4 字符表示法ASCII码:用一个字节来表示一个
5、字符,低7位为字符的ASCII值,最高位一般用作校验位。1.4 几种基本的逻辑运算第二章 80x86计算机组织教学目的和要求:Ø 熟练掌握中央处理器的组成,以及存储器的寻址方式等。教学重点:Ø CPU的组成、8086寄存器组、以及实模式存储器寻址教学难点:Ø 8086寄存器组、实模式存储器寻址2.1 80x86微处理器由80386微处理器芯片构成的微机称为386微机,由80486微处理器芯片构成的微机称为486微机,P15 表2.1反映出从8086PentiumII的一些主要技术参数,大家可通过它了解一下CPU的发展历程。2.2 基于微处理器的计算机系统构成2.2
6、.1 硬件CPU运算器控制器存储器由系统总线连接I/O设备大容量存储器数据线地址线控制线输入输出系统运算器:所有算术与逻辑运算控制器:全机控制工作,从存储器中取出指令,经译码分析后向全机发出取数、执行、存数等控制指令。存储器:计算机的记忆部件I/O设备:负责与外界通信的输入、输出设备,如显示器、键盘等大容量存储器:可存储大量信息的外部存储器,如磁盘、光盘等数据线:传送信息地址线:指出信息来源和目的地控制线:规定总线的动作注:系统总线的工作由总线控制逻辑指挥2.2.2 软件软件系统包括:系统软件和应用软件。2.3 中央处理机2.3.1 中央处理器CPU的组成算术逻辑部件控制逻辑工作寄存器386后
7、出现了高速缓冲存储器2.3.2 80x86寄存器组寄存器是运算器中的存储单元。分为:程序可见的寄存器(在汇编语言程序设计中用到的寄存器)程序不可见的寄存器(程序设计不可用,由系统调用的)程序可见的寄存器包括:通用寄存器,专用寄存器,段寄存器1、通用寄存器(1)数据寄存器(AX、BX、CX、DX)用来暂时存放计算过程中所用到的操作数、结果或其它信息,可以以字(16位)也可以以字节(8位)的形式访问。以AX为例:(2)指针(或变址)寄存器(SP、BP、SI、DI)运算过程中存放操作数,只能以字(16位)为单位使用;存储器寻址时,提供偏移地址。Ø SP(堆栈指针寄存器)用来指示段顶的偏移地
8、址;Ø BP(基址指针寄存器)可作为堆栈区中的某一个基地址,与堆栈段寄存器SS联用来确定堆栈段中的某一存储单元的地址;Ø SI(源变址寄存器)和DI(目的变址寄存器)一般用来确定数据段中某一存储单元的地址。2、专用寄存器(IP、SP、FLAGS)Ø IP(指令指针寄存器)存放代码段CS中的偏移地址。在程序运行的过程中,始终指向下一条指令的首地址,与代码段CS联用来确定下一条指令的物理地址。Ø SP(堆栈指针寄存器)与堆栈段寄存器SS联用来确定堆栈段中栈顶的地址,即存放栈顶的偏移地址。Ø FLAGS(标志寄存器/程序状态寄存器PSW)包括条件码标
9、志、控制标志、系统标志,可按位操作。图2.4 80X86的标志寄存器(1)条件码标志位记录程序中运行结果的状态信息,根据有关指令的运行结果由CPU自动设置,用作后续条件转移指令的转移控制条件。溢出标志(OF)在运算过程中,如操作数超出了机器能表示的范围称为溢出。此时OF置1,否则置0。符号标志(SF)记录运算结果的符号,负时置1,否则置0。零标志(ZF)运算结果为0时置1,否则置0。进位标志(CF)最高有效位有进位时置1,否则置0。辅助进位标志(AF)记录运算时第3位产生的进位值,有进位时置1,否则置0。奇偶标志(PF)用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1
10、的个数为偶数时置1,否则置0。(2)控制标志位方向标志(DF)在串处理指令中控制处理信息的方向。当DF为1时,每次操作后使变址寄存器SI和DI减小,串处理从高地址向低地址方向处理。当DF为0时,每次操作后使变址寄存器SI和DI增大,串处理从低地址向高地址方向处理。(3)系统标志位用于I/O、中断屏蔽、程序调试、任务切换和系统工作方式等的控制。一般应用程序不必关心这些位,只有系统程序员或需要编制低层I/O设备控制等程序时才需要。陷阱标志(TF)用于调试时的单步方式操作。TF为1时,每条指令执行完后产生陷阱,由系统控制计算机;TF为0时,CPU正常工作,不产生陷阱。中断标志(IF)当IF为1时,允
11、许CPU响应可屏蔽中断请求,否则关闭中断。(第八章)I/O特权级(IOPL)在保护模式下,用于控制对I/O地址空间的访问。 (第八章)(4)标志位的符号表示 表2-1 标志位的符号表示标 志 名标志为1标志为0OF 溢出(是否)DF 方向(减量增量IF 中断(允许关闭)SF 符号(负正)ZF 零(是否)AF 辅助进位(是否)PF 奇偶(偶奇)CF 进位(是否)OVDNEINGZRACPECYNVUPDIPLNZNAPONC3. 段寄存器(放在2.4.2中讲解)段寄存器:用于存放段地址的寄存器。8086/8088,80286中的段寄存器包括:代码段寄存器:CS数据段寄存器:DS堆栈段寄存器:SS
12、附加段寄存器:ES80386以后增加了FS,GS,它们也是附加段寄存器。2.4 存储器2.4.1 存储单元的地址和内容1. 存储单元的地址物理地址:在存储器里以字节为单位存储信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址。说明:Ø 地址从0开始编号,顺序地每次加1。Ø 在机器里,地址用无符号的二进制数表示,当常以无符号十六进制数做为书写格式。思考:地址总线分别为20位、24位、32位、36位时,可访问的单元地址范围。2. 存储单元的内容Ø 存储单元的内容:一个存储单元中存放的信息,书写格式为:(地址)=内容例如:(0004)=34HØ 字数据
13、存储时,低位字节存入低地址,高位字节存入高地址,这样两个字节单元构成一个字单元,字单元地址以它的低地址表示。同理,双字数据存放在连续的4个存储单元内。例如:(0023H)=1234HØ 同一地址既可以看作字节单元地址,也可以看作字单元地址或双字单元、四字单元地址。Ø 访问存储器时以字为单位进行,即机器以偶地址访问存储器,对于奇地址字单元需访问两次存储器。Ø 设X为某存储单元地址,则(X)表示该单元的内容,如果X的内容仍然为一个地址Y,则Y的内容表示为(X)。例如:(0004H)=1234H,(1234H)=231EH,则(0004H)= 231EH。2.4.2 实
14、模式存储器寻址1. 存储器地址的分段为何要进行分段?分段的目的:解决16位字长的机器无法直接表示20位地址的问题。机器规定:从0地址开始,每16个字节为一小段。如下:00000,00001,00002,0000F;00010,00011,00012,0001F; ;FFFF0,FFFF1,FFFF2,FFFFF分段方法:对存储器分段时,段可以起始于任意小段的首地址,而不是任意地址,段的大小可以是1B64KB的任意个字节。物理地址:在1M的存储器里,每个存储单元都有一个唯一的20位地址,称为该单元的物理地址。段地址:每一段的起始地址,由于该地址的最低4位为0,故只取高16位。偏移地址:段内相对于
15、段起始地址的偏移量。例如:设段地址为1200H,则下图中内存单元内容为56H的存储单元偏移地址为0003H。物理地址的计算方法:物理地址=段地址×16+偏移地址例如:段地址为1234H,偏移地址为0002H,求其物理地址。1234H×16+0002H=12342H注:每个存储单元都有唯一的物理地址,但可由不同的段地址和不同的偏移地址构成。例如:下列地址对应同一物理地址。段地址为2000H,偏移地址为003DH段地址为2003H,偏移地址为000DH2. 段寄存器段寄存器:专门存放段地址的寄存器。包括:(1)代码段CS:存放当前正在运行的程序;(2)数据段DS:数据段存放当前
16、运行程序所用的数据,如果程序中使用了串处理指令,则其源操作数也存放在数据段中;(3)堆栈段SS:堆栈段定义了堆栈的所在区域;(4)附加段ES:附加段是附加的数据段,它是一个辅助的数据区,也是串处理指令的目的操作数存放区;在80386及其后继的80X86中新增段寄存器(1)FS(2)GS 2.4.3 保护模式存储器寻址(略)2.5 外部设备外部设备与主机(CPU和存储器)的通信通过外设接口进行,每个外设接口包括一组寄存器,一般有三种不同的用途: 数据寄存器:存放在外设和主机间传送的数据,起缓冲器的作用。 状态寄存器:保存外部设备或接口的状态信息,以便CPU了解和测试外设的工作情况。 命令寄存器:
17、CPU给外设或接口的控制命令。注:Ø 各种外部设备都有以上三种类型的寄存器,只是每个接口所配备的寄存器数量不同。Ø 外设中的每个寄存器都有一个端口(port)地址(端口号),组成了独立于内存的I/O地址空间。第三章 80x86的指令系统和寻址方式教学目的和要求:Ø 熟练掌握8086的寻址方式Ø 熟练掌握8086的指令系统教学重点:Ø 8086的指令系统和寻址方式教学难点:Ø 寻址方式的理解,各指令的用法指令系统的一般格式:操作码 操作数,操作数,操作数一地址指令:只有一个操作数二地址指令:有二个操作数,常见格式为:操作码 目的操作数,
18、原操作数三地址指令:有三个操作数3.1 80x86的寻址方式操作数可存放的位置:Ø 立即数Ø 寄存器中Ø 存储器中3.1.1 与数据有关的寻址方式1、立即寻址方式操作数直接存放在指令中。如:MOV AX,10A7H ;源操作数的寻址方式为立即寻址MOV AL,87H注:常用来表示常数,只能用于源操作数,不能用于目的操作数。2、寄存器寻址方式操作数存放在CPU内部的寄存器中,指令指定寄存器号。如:MOV AX,BX INC CX ADD BL,7 ;目的操作数的寻址方式为寄存器寻址方式注:16位
19、操作数,可用AX,BX,CX,DX,SP,BP,SI,DI 8位操作数,可用AL,AH,BL,BH,CL,CH,DL,DH(除了上述两种寻址方式外,其他的寻址方式中操作数均保存在存储器中,介绍之前先学习几个定义)有效地址(EA:Effective Address):即偏移地址可由以下四部分组成:位移量:存放在指令中的一个8位,16位或32位的数或符号地址。基址:存放在基址寄存器中的内容。(常用于指向数据段中数组或字符串的首地址)变址:存放在变址寄存器中的内容。(常用于访问数据段中数组的某个元素或字符串的某个字符)比例因子:用于386及以后机型,可以是1,2,
20、4,8,常用于访问数组。808680286有效地址的组成部分:位移量8,16位基址寄存器BX,BP变址寄存器SI,DI比例因子无有效地址的计算公式:EA=基址+变址+位移量386以后:EA=基址+变址×比例因子+位移量3、直接寻址方式数据在存储器中,有效地址由指令直接给出。EA=位移量注:有效地址就是偏移地址。如:MOV AX,1008H则:执行完后:(AX)=1234H注:1 可用符号地址(类似于变量名)代替数值地址。如MOV AX,VALUE 或者 MOV AX,VALUE2 有效地址直接给出,段地址默认为数据段。若访问其他段的数据,需加段跨越前缀。MOV AX,ES:1008H
21、3. 字数据存放在存储器中时,高地址存放在高字节,低地址存放在低字节。4、寄存器间接寻址基址寄存器:BX,BP变址寄存器:SI,DI操作数在存储器中,有效地址为基址寄存器或变址寄存器的内容。即:EA=基址/变址如:MOV AX,BX设(DS)=3000H,(BX)=2000H,(32000H)=12H,(32001H)=34H则:EA=(BX)=2000H物理地址=32000H执行后:(AX)=3412H注:当基址寄存器用BP时,默认段为SS,否则为DS。该规则在以后的几种寻址方式中同样适用。如:MOV AX,BP(DS)=3000H,(SS)=2000H,(BP)=2000H则:物理地址=2
22、2000H5、寄存器相对寻址EA=基址/变址+位移量如:(1) MOV AX,BP+1000H(2) MOV AX,COUNTBX或MOV AX,BX+COUNTCOUNT为位移量。如果(DS)=3000H,(SS)=2000H,(BP)=2000H,(BX)=3120H,COUNT=0040H则:(1)物理地址=23000H (2)物理地址=33160h6、基址变址寻址方式EA=基址+变址如:MOV AX,BXSI 或 MOV AX,BX+SI7、相对基址变址寻址方式EA=基址+变址+位移量如:MOV AX,COUNTBXDI或MOV AX,BX+DI+COUNT(注意:教材43-44,8-
23、10的寻址方式为386以后机型增加的寻址方式,在此不再介绍。)3.1.2与转移地址有关的寻址方式(略)3.2 程序占用的空间和执行的时间(略)补充:汇编语言的编写及调试运行过程1、汇编语言源程序的基本格式注:Ø 程序必须有代码段,而数据段、附加段、堆栈段只有必要时才有。Ø 用ASSUME将我们定义的各段与段寄存器相对应。Ø 在程序开始时,应将除代码段以外的其余各段的段地址赋给相应的段寄存器。Ø 程序结束时要有返回DOS的语句。2、程序调试过程1、编辑.ASM汇编语言源程序。(在DOS下可用EDIT编写) EDIT A.
24、ASM2、用MASM对源程序汇编,产生.OBJ的目标文件。 MASM A.ASM 或 MASM A;注:如果提示有语法错误,则不产生.OBJ文件,此时我们要返回第1步修改源程序。3、用LINK对.OBJ文件进行连接,产生.EXE的可执行文件。 LINK A.OBJ 或 LINK A;4、执行.EXE可执行文件,或者用DEBUG对.EXE文件进行调试。 执行:A 调试:DEBUG A.EXE3、DEBUG常用指令简介1、U (反汇编)命令
25、160; 格式:U 或 U 地址 或 U 地址1 地址2 功能:从代码段中指定地址进行反汇编 常用方式: U 从上次结束的位置进行反汇编 U 地址 从指定地址开始进行反汇编2、G(执行)命令 格式:G=地址1地址2 &
26、#160; 功能:从地址1开始执行到地址2,或执行到程序结束。 常用方法: G 从当前位置执行到程序结束 G 地址 从当前位置执行到指定地址3、T(跟踪)命令 格式:T=地址1数值N 功能:从地址1起执行N条指令后停止。
27、0; 常用方法: T 仅执行当前一条指令4、D(显示)命令 格式:D地址或D地址1 地址2 功能:显示指定内存单元的内容 常用方法: D 地址 从指定地址开始显示内存单元的内容 注:如果地址仅仅是偏移地址,则系统默认为数据段。5
28、、R(寄存器)命令 格式:R寄存器名 功能:显示指定寄存器的值 常用方法: R 显示所有寄存器的值6、Q(退出)命令 格式:Q3.3 80x86的指令系统学习汇编语言指令应该把握以下几点: 汇编指令的共性 ·双操作数指令中,两个操作数不能同为存储单元,也不能同为段寄
29、存器,目的操作数不能为立即数。 ·单操作数指令中,操作数可以是除立即数以外的任何寻址方式 指令对标志寄存器的影响 各指令的格式、使用方法和注意事项1、传送指令1)通用传送指令包括:MOV、PUSH、POP、XCHG MOV 最基本的传送指令格式:MOV DST,SRC执行的操作:(DST)(SRC)说明:Ø 目的操作数不能为CS和IPØ 传送的数据可以是8位或16位,取决于操作数的形式Ø 源操作数的长度应该小于或等于目的操作数的长度
30、216; 所有通用传送指令都不改变标志位例如:MOV AX,BX MOV AX,BX MOV AX,0000H×MOV VALUE,24H MOV CS,1243H × PUSH、POP 堆栈操作指令·PUSH 进栈指令格式:PUSH SRC执行的操作: (SP)(SP)-2 (
31、(SP)+1,(SP))(SRC)·POP出栈指令格式:POP DST执行的操作: (DST)((SP)+1,(SP)) (SP)(SP)+2说明:Ø PUSH和POP是字操作Ø 操作数为除立即数以外的任何形式Ø POP指令不能用CSØ 常用于对寄存器值的保存和恢复 交换指令XCHG格式:XCHG OPR1,OPR2操作:(OPR1)(OPR2)说明:Ø OPR表示操作数Ø 两操作数中至少有一个为寄存器,但不能为段寄存器或IPØ 允许
32、字/字节操作如: XCHG AX,BX XCHG AX,0011H XCHG BX,1 × XCHG BX,CS ×2)累加器专用传送指令包括:IN OUT XLAT 这组指令只限于使用AX或AL传送信息
33、。用于与外设直接的数据传递。 IN输入指令长格式: IN AL,PORT(字节) IN AX,PORT(字)执行的操作: (AL)(PORT)(字节) (AX)(PORT+1,PORT)(字)短格式: IN AL,DX(字节) IN AX,DX(字)执行的操作: (AL)(DX)(字节) (AX)(DX)+1,
34、(DX)(字) OUT输入指令长格式: OUT PORT,AL(字节) OUT PORT,AX(字)执行的操作: (PORT)(AL)(字节) (PORT+1,PORT)(AX)(字)短格式: OUT DX,AL(字节) OUT DX,AX(字)执行的操作: (DX)(AL)(字节)(DX)+1,(DX)(AX)(字)说明:Ø IN指令
35、:I/OAL或AXØ OUT指令:AL或AX I/OØ I/O设备中前256个端口(0-FFH)端口号可使用长格式直接在指令中指定。Ø 端口号>FFH时,只能用短格式。例如:写出下列指令:把端口34H的字数据送到存储单元str中。IN AX,34HMOV STR,AX或者:MOV DX,34HIN AX,DXMOV STR,AX把端口2AFH的字节数据送到存储单元str1中。MOV DX,2AFHIN AL,DXMOV STR1,AL把存储单元STR中的字数据送到端口28H中。MOV AX,STROUT 28H, AX 或:MOV AX,STRMOV DX,
36、28HOUT DX,AX把存储单元STR1中的字节数据送到端口37AH中。MOV AL,STR1MOV DX,37AHOUT DX,AL换码指令XLAT(略)3)地址传送指令包括:LEA、LDS、LES、LSS LEA取有效地址指令 格式:LEA REG,SRC操作:(REG)SRC的有效地址注:REG为寄存器例如:设(BX)=1200H,(SI)=1000H,(DS)=3000H,(32224H)=12H,(32225H)=34H,试比较以下两条指令的执行结果: LEA BX,BX+SI+0024H
37、; MOV BX,BX+SI+0024H LDS地址送DS和寄存器指令 格式:LDS REG,SRC操作: (REG)(SRC) (DS)(SRC+2)如: LES地址送DS和寄存器指令 格式:LES REG,SRC操作: (REG)(SRC) (ES)(SRC+2) LSS地址送DS和寄存器指令 格式:LSS REG,SRC操作: (REG)(
38、SRC) (SS)(SRC+2)说明:·该组指令的操作数可以使用16位寄存器,但是不能使用段寄存器·源操作数可以是除立即数和寄存器以外的任何一种存储器寻址方式·不影响标志位4)标志传送指令包括:LAHF、SAHF、PUSHF、POPF LAHF读取标志指令(load ah with flags)格式:LAHF操作:(AH)(标志寄存器FLAGS的低字节) SAHF设置标志指令(store ah into flags)格式:SAHF操作:(FLAGS的低字节)(AH) 对标志寄存器的入栈和出栈的指令格式:PUSHF操作:
39、; (SP)(SP)-2 ((SP)+1,(SP))(FLAG)格式:POPF操作: (FLAG)((SP)+1,(SP)) (SP)(SP)+25)类型转换指令CBW(convert byte to word) 字节转换为字命令格式:CBW操作:AL的内容符号扩展到AH,形成AX中的字。说明:若AL的符号位为0,则(AH)=0;若AL的符号位为1,则(AH)=0FFH。例如:(AL)=01H,则CBW执行后,(AX)=0001H(AL)=0F1H,则C
40、BW执行后,(AX)=0FFF1HCWD(convert word to double word) 字转换为双字命令格式:CWD操作:AX的内容符号括号到DX,形成DX:AX中的双字。2、算术运算指令1)加法指令包括:ADD、ADC、INC ADD不带进位位的加法指令格式:ADD DST,SRC操作:(DST)(DST)+(SRC) ADC带进位位的加法指令格式:ADC DST,SRC操作:(DST)(DST)+(SRC)+CF INC增量指令格式:INC OPR操作:(OPR)(OPR)+1说明: 均可为字/字节操作 均影响标志位,但INC不影响CF标志位 对标志位的影响·结果为负
41、,则SF=1,否则SF=0·结果为0,则ZF=1,否则ZF=0·最高有效位有进位时CF=1,否则CF=0·当两个操作数的符号相同,而结果的符号与之相反,则OF=1,否则OF=0 CF=1表示无符号加法溢出,OF=1表示带符号加法溢出(P60 例(1)(4)2)减法指令包括:SUB、SBB、DEC、NEG、CMP SUB不考虑借位的减法指令格式:SUB DST,SRC操作:(DST)(DST)-(SRC) SBB考虑借位的减法指令格式:SBB DST,SRC操作:(DST)(DST)-(SRC)-CF DEC减量指令格式:DEC OPR操作:(OPR)(OPR)-1
42、 NEG求补指令格式:NEG OPR操作:(OPR)0FFFFH-(OPR)-1 (字) (OPR)0FFH-(OPR)-1 (字节) 即各位取反加1如:NEG AX设(AX)=1234H,则结果(AX)=0EDCCH CMP比较指令格式:CMP OPR1,OPR2操作:(OPR1)-(OPR2),结果不保存,只根据结果设置标志位说明:1、均可为字/字节操作2、均影响标志位,但DEC不影响CF3、对标志位的影响Ø :CF:反映无符号数运算的借位情况,若减数>被减数,此时有借位,则CF=1,否则CF=0Ø :OF:若两个操作数的符号相反,而结果与减数的相同,
43、则OF=1Ø :CF:OPR为0,则CF=0,否则CF=1 OF:字节运算时OPR为-128或字运算时OPR为-32768时,OF=1,否则为0(求补即为求其相反数的补码,实际还是超出了机器的表示范围)例如:P63 例3.48,例3.49加减运算综合举例,例如:P63 例3.50data segment x dd 01234000h y dd 0000ea30h z dd 00000010h w dd ?data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov ax,x mov dx,x+
44、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 mov ah,4ch int 21hcode ends end start3)乘法指令包括:MUL 无符号相乘、IMUL带符号数相乘格式:MUL SRC 或 IMUL SRC操作: 字节:(AX)(AL)*(SRC) 字:(DX,AX)(AX)*(SRC)说明: 由SRC决定是字操作还是字节操作 SRC不可用立即寻址 对标志位的影响对除C
45、F和OF以外的条件码无定义。(无定义即运算后条件码的状态不定)对CF和OF的影响:MUL:若乘积的高一半为0,则CF和OF位均为0,否则为1。IMUL:若乘积的高一半为低一半的符号扩展,则CF和OF位均为0,否则为1。注意:可通过CF,OF判断乘积是否扩展到了高一半。例如:P65 例3.524)除法指令包括:DIV 无符号数除法、IDIV带符号数的除法格式:DIV SRC 或 IDIV SRC操作: 字节: (AL)(AX)/(SRC)的商
46、 (AH)(AX)/(SRC)的余数 字: (AX)(DX,AX)/(SRC)的商 (DX)(DX,AX)/(SRC)的余数说明: SRC不允许为立即寻址方式 除法指令对各标志位无定义 8086中规定余数符号和被除数的符号相同 例如:-30/8
47、0; 商 余数 -4 2 × -3 -6 若被除数与除数的位数相同,需要对被除数进行扩展例如:-8/2程序为:MOV AL,-8MOV BL,2CBWIDIV BLMOV AX, -8MOV BL,2IDI
48、V BL结果:商al=0fcH,余数ah=0再例:P67 例3.55 3.565)十进制调整指令(略)3、逻辑运算和移位指令1) 逻辑运算指令包括AND、OR、NOT、XOR、TEST AND 逻辑与指今格式:AND DST,SRC操作:(DST)(DST) (SRC)注:常用于屏蔽某些位例如:屏蔽AL的第0,1,4位。MOV AL,0BFHAND AL,0ECH OR 逻辑或指令格式:OR DST,SRC操作:(DST)(DST) (SRC)注:常用于对某些位置1。例如:置BL的第1,5位为1MOV BL,87HOR BL,22H NOT 逻辑非指令格式:NOT OPR操作:(OPR)()
49、XOR 异或指令格式:XOR DST,SRC操作:(DST)(DST)(SRC)注:常用于对某些位取反。例如:将ax的第0,4,7,12,14位取反。MOV AX,4A3BHXOR AX,5091H TEST 测试指令格式:TEST OPRl,OPR2操作:(OPRl) (OPR2) (不保存结果,根据结果设置标志位)注:常用于测试某些位是否为0。例如:测试al的第0,1,2,3,5,7位是否为0.MOV AL,40HTEST AL,0AFHZF=1:结果为0.说明:1. 可以为字/字节操作2. 对标志位的影响: NOT不影响标志位 其余的指令使CF,OF为0,AF无定义,SF,ZF,PF根据
50、结果设置。2) 移位指令包括:SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR 逻辑左移指令格式:SHL OPR,CNT注:CNT=1时,可以直接写1,如:SHL OPR,1 CNT>1时 必须把CNT放在CL中,然后在指令中指定CL。如:要将AX逻辑左移5位MOV CL,5SHL AX,CL操作: 算术左移指令格式:SAL OPR,CNT操作:与SHL相同 逻辑右移指令格式:SHR OPR,CNT操作: 算术右移指令格式:SAR OPR,CNT操作: 循环左移指令格式:ROL OPR,CNT操作: 循环右移指令格式:ROR OPR,CN
51、T操作: 带进位循环左移指令格式:RCL OPR,CNT操作: 带进位循环右移指令格式:RCR OPR,CNT操作:说明:1. 可以为字/字节操作2. 对条件码的影响(CF)3. OPR可以是除立即数以外的任何寻址方式4、串操作指令包括: MOVS,CMPS,SCAS ,LODS,STOS与上述指令配合使用的前缀有:REP 重复REPE/REPZ 当相等/为零时重复REPNE/REPNZ 当不相等/不为零时重复1)重复指令 REP重复串操作格式:REP 串指令操作:1. CX=0时,退出REP,否则继续执行2. CX=CX-13. 执行REP后面的串指令4. 重复1.3. REPE/REPZ
52、当相等/为零时重复串操作格式:REPE(或REPZ) 串指令操作: 1. CX=0或ZF=0时退出,否则继续执行2. CX=CX-13. 执行REPE/REPZ后面的串指令4. 重复1.3. REPNE/REPNZ 当不相等/不为零时重复串操作当CX=0或ZF=1时退出,其余的操作与REPE/REPZ相同2)串处理指令 MOVS 串传送指令格式:MOVSB 字节操作,MOVSW字操作操作:1. (DI)(SI)2. 修改SI,DI字节:(SI)(SI)±1 ,(DI)(DI)±1字: (SI)(SI)±2 ,(DI)(DI)±2注:DF=0时,用+,DF
53、=1时,用-功能:把SI指向的数据段中的一个字/字节传送到由DI指向的附加段的一个字/字节单元中。附:设置DF的指令: 设置DF=0,CLD 设置DF=1,STD例如:将数组STR1的内容传送到数组STR2中。设 STR1 DB HELLO ;(在数据段中) STR2 DB 5 DUP(?) ;(在附加段中)程序LEA SI,STR1 LEA DI,STR2 MOV CX,5CLDREP MOVSB由此可知,要想传送整个字符串,需做以下工作:1. 设置SI,DI2. 将字符串
54、长度送CX寄存器3. 设置DF4. 执行REP MOVSB CMPS 字符串比较指令格式:CMPSB 字节操作,CMPSW字操作操作:·(SI)(DI)·修改SI,DI 字节:(SI)(SI)±1 ,(DI)(DI)±1 字:(SI)(SI)±2 ,(DI)(DI)±2功能:将SI指向的数据段中的一个字/字节单元的内容与DI指向的附加段中的一个字/字节单元的相减,但不保存结果,根据结果设置标志位。例如:比较字符串STR1与字符串STR2是否相等。设 STR1 DB HELLO ;(在数据段中) STR2 DB
55、HELOO ;(在附加段中)程序如下:LEA SI,STR1LEA DI,STR2MOV CX,5CLDREPE CMPSBJE MATCHJNE NOMATCHMATCH:NOMATCH: SCAS 字符串检索指令格式:SCASB 字节操作,SCASW字操作操作:· 字节:(AL)(DI),(DI)(DI)±1· 字: (AX)(DI),(DI)(DI)±2功能:常用于查找某字符是否在某字符串中。例如:在附加段中定义如下字符串STR,查找空格是否在该字符串中。STR DB WHAT IS THIS程序如下:MOV AL,20HLEA DI,STRMOV
56、 CX,12CLDREPNE SCASBJNZ NOFOUNDJZ FOUNDFOUND:NOFOUND: LODS 取字符串指令格式:LODSB 字节操作,LODSW字操作操作:· 字节:(AL)(SI),(SI)(SI)±1· 字: (AX)(SI),(SI)(SI)±2功能:把由SI指向的数据段中的一个字/字节单元的内容传送到AL/AX中。 STOS 存字符串指令格式:STOSB 字节操作,STOSW字操作操作:· 字节:(DI)(AL),(DI)(DI)±1· 字: (DI)(AX),( DI)(DI)±2
57、功能:把AL/AX中的内容传送到由DI指向的附加段中的一个字/字节单元中。5、控制转移指令1)无条件转移指令格式:JMP OPR功能:转移到指定的地方继续执行2)条件转移指令JE/JZ OPR相等,则转移JNE/JNZ OPR 不相等,则转移·带符号数的比较(大于:Greater 小于:Less 等于:Equal)JG/JNLE OPR 大于,则转移JNG/JLE OPR 不大于,则转移JL/JNGE OPR 小于,则转移JNL/JGE OPR 不小于,则转移·无符号数的比较(高于:Above 低于:Below 等于:Equal)JB/JNAE OPR 低于,则转移JNB/
58、JAE OPR 不低于,则转移JA/JNBE OPR 高于,则转移JNA/JBE OPR 不高于,则转移·根据某个标志位的值JZ OPR ZF为1,则转移JNZ OPR ZF为0,则转移JS OPR SF为1,则转移JNS OPRSF为0,则转移JO OPR OF为1,则转移JNO OPR OF为0,则转移JP OPR PF为1,则转移JNP OPRPF为0,则转移JC OPR CF为1,则转移JNC OPR CF为0,则转移·测试CX之为零则转移指令JCXZ OPR ;CX的值为0,则转移例如:比较AX和BX中两个带符号数的大小,如果(AX)(BX),则令CX=0;否则令CX=0FFFFH(条件设置指令 略)3)循环指令 LOOP 循环指令格式:LOOP OPR 循环条件:(CX)0 LOOPZ/LOOPE 当相等或为零时循环指令格式:LOOPZ/LOOPE OPR 循环条件:ZF=1且(CX)0 LOOPNZ/LOOPNE 当不相等或不为零时循环指令格式:LOOPNZ/LOOPNE OPR 循环条件:ZF=0且(CX)0以上三条指令执行的步骤:1. (CX)=(CX)-12. 判断测试条件,满足条件则进行循环,否则退出循环。例如:设在数据段中有如下数组:ARRAY DW 1,2,3,4,5求该数组各元素的和,并将结果保存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 积木拼装手工外包合同
- 高端青年公寓外包合同
- 护理信息化技术与应用
- 手术室护理工作压力与应对策略
- 物业管家服务外包合同
- 扬州市销售团队外包合同
- 宿迁医院食堂外包合同
- 劳动合同到期签外包合同
- 银行车贷专员外包合同
- 公司人力服务外包合同
- 2026年杭州市融资担保集团有限公司政策性担保业务试题及答案
- 四川省成都市成华区2026年九年级二诊数学试卷
- 2026广东中山人才和数字集团有限公司下属中山人才科创投资有限公司招聘笔试参考题库及答案解析
- 2026年时事政治知识点梳理(高考)
- 初中地理会考复习知识点
- 2026年四川省成都市网格员招聘考试参考题库及答案解析
- 网络安全舆情监测与处置手册
- 招投标管理办法
- (新教材)2026年部编人教版三年级下册语文 第六单元《口语交际:应该怎样安排座位》教学课件
- 公务车辆租赁管理办法
- 电子设备装接工职业技能资格知识考试题与答案
评论
0/150
提交评论