汇编语言期末总结_第1页
汇编语言期末总结_第2页
汇编语言期末总结_第3页
汇编语言期末总结_第4页
汇编语言期末总结_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章 汇编语言基础知识1、 程序设计语言分哪三类? 答: (1)机器语言 (2)汇编语言 (3)高级语言 2、十进制数用D(Decimal)、二进制数用B(Binary)、八进制数用O(Octal)、十六进制数用H(Hexadecimal)来表示。由于英文字母O容易和零误会,所以也可以用Q来表示八进制数。任意进制数的通式: 其中 为整数部分, 为小数部分,r为基数。每一项的数字可用0r1数字中的一个数字来表示。、3、进制转化:(1)十进制数与二进制数之间的转换: 1) 十进制整数转换成二进制整数:除2取余法 【例1-1】 将十进制数97转换成二进制数。其过程如下: 最后结果为:(97)10

2、=(A6 A5 A4 A3 A2 A1 A0)2=(1100001)22) 十进制小数转换成二进制小数:乘2取整法。【例1-2】将十进制小数0.6875转换成二进制小数。其过程如下:最后结果为:(0.6875)10=(0.A1A2A3A4) 2 =(0.1011)23) 带小数的转化: (97)10=(1100001)2 (0.6875)10=(0.1011)2由此可得: (97.6875)10=(1100001.1011)24) 二进制数转换成十进制数:按位权展开后相加。【例1-3】 将二进制数111.11转换成十进制数。其过程如下:(111.11)2=1×22+1×21

3、+1×20+1×21+1×22 =4+2+1+0.5+0.25 =(7.75)10(2)十进制与八进制之间的转换:1) 十进制整数转换成八进制整数:除8取余法。【例1-4】 将十进制数97转换成八进制数。其过程如下: 最后结果为: (97)10 =(A2 A1 A0)8 =(141)82) 十进制小数转换成八进制小数:乘8取整法。 【例1-5】 将十进制小数0.6875转换成八进制小数。其过程如下: 0.6875 × 8 5.5000整数部分为5,即A1=5 0.5000余下的小数部分 × 8 4.0000整数部分为4,即A2=4 0.0000

4、余下的小数部分为0,结束最后结果为:(0.6875)10=(0.A1A2)8=(0.54)83) 八进制数转换成十进制数:按位权展开后相加【例1-6】 将八进制数141.54转换成十进制数。其过程如下:(141.54)8=1×82+4×81+1×80+5×81+4×82 =64+32+1+0.625+0.0625 =97.6875最后结果为: (141.54)8=(97.6875)10(3)十进制与十六进制之间的转换 1) 十进制整数转换成十六进制整数:除16取余法。 【例1-7】 将十进制数97转换成十六进制数。其过程如下: 最后结果为:(9

5、7)10 =(A2 A1 A0)16=(61)16 2) 十进制小数转换成十六进制小数:乘16取整法。【例1-8】 将十进制小数0.6875转换成十六进制小数。其过程如下: 3) 十六进制数转换成十进制数:按权位权展开后相加。【例1-9】 将十六进制数61.B转换成十进制数。其过程如下: (61.B)8=6×161+1×160+B×161 =96+1+11×161 =97+0.6875 =97.6875 最后结果为: (61.B)16=(97.6875)10表1-1十、二、八、十六进制数码的对应关系 (4)二进制与八进制、十六进制数之间的转换 1) 二进

6、制数转换成八进制数:将每三位二进制数转换成对应的一位八进制数【例1-10】 直接将二进制数11110.11转换成八进制数。其过程如下: 011110.110 36.6 所以:(11110.11)2=(36.6)8 2) 八进制数转换二进制数:将每一位八进制数分解成对应的三位二进制数 3) 二进制数转换成十六进制数:将每四位二进制数转换成对应的一位十六进制数 【例1-12】 直接将二进制11110.11转换成十六进制数。其过程如下: 0001 1110.1100 1 E. C 所以:(11110.11)2=(1E.C)16 4) 十六进制数转换二进制数:将每一位十六进制数转换成对应的四位二进制数

7、 【例1-13】 直接将十六进制数EF.C转换成二进制数。其过程如下: E F . C 1110 1111. 1100 所以:(EF.C)16=(11101111.11)2 由以上方法可以看出,(25)10=(11001)2=(19)16=(31)8,(0.5)10=(0.1)2=(0.8)16=(0.4)8。4、 二进制数的编码及运算:(1)原码:0 原=1 0000000,1原=1 0000001,127 原=1 1111111。结论:二进制正、负数的原码就是符号化的机器数真值本身。0的原码+0、-0(2)反码:例如,n=8时,+0反=0 0000000,+1反=0 0000001,+12

8、7反=0 1111111。当X0时,X 反=2n1+X (MOD 2n)。例如,n=8时,0 反=11111111, 1 反=1 1111110,127 反=1 0000000。 结论:二进制正数的反码就是其原码。二进制负数的反码就是机器数符号位保持不变,其余按位取反。若二进制数X=Xn1Xn2X1X0,则反码表示法的定义为:0的反码:+0、-0 (3) 二进制数补码编码方法: 例如,n=8时,+0补=0 0000000, +1补=0 0000001,+127补=0 1111111。当X0时,X补=2n|X| (MOD 2n)。例如,n=8时,0 补=0 0000000,1补=1 111111

9、1,127 补=1 0000001。 结论:二进制正数的补码就是其原码。二进制负数的补码就是机器数符号位保持不变,其余位取反码后末位加1。 注意: 在补码表示法中,0只有一种表示,即000000。 对于10000000这个补码编码,其真值被定义为128。补码的表示范围为:-128-+127【例1-14】 机器字长n=8位,X=+48D,求X补。 首先将+48D转换为二进制数:+110000B。 因为机器字长是8位,其中符号占了1位,所以数值只占7位。将+110000B写成 +0110000B,+48补 = 0 0110000B,写成十六进制数为30H,即+48补 =30H。 【例1-15】 机

10、器字长n=8位,X= - 48D,求X补。 首先将48D转换为二进制数:110000B。 因为机器字长是8位,其中符号占了1位,所以数值只占7位。将110000B写成 - 10110000B。再将数值位0110000B按位求反后为1001111B,末位加1后为1010000B。 所以,48补 = 1 1010000B,写成十六进制数为0D0H,即48补 =0D0H。 例如:若X补 = 0 1111111,则X =(+1111111)2 =(+127)10。 若X补 = 1 1111111,则X =(0000001)2 =(1)10。(4)二进制数补码的运算 补码的运算规则是: X+Y补 = X

11、补 + Y补 XY补 = X补 + Y补 注:采用补码运算后,结果也是补码,欲得运算结果的真值,还需进行转换。5、在计算机中BCD码有两种格式: (1) 非压缩BCD码:1字节(8位二进制)中仅表示一位BCD数,例如:(00000110)BCD=6。 (2) 压缩BCD码:1字节中仅表示两位BCD数,例如:(01100110)BCD=66。6、 计算机显示、打印字符的编码一般采用什么码 。 【 ASC码 】7、 原码、反码、补码的表示范围(机器字长8位)(1) 原码、反码:-127- +127(2) 补码:-128 - +127 习题:1.2 把下列十进制数转换成二进制数、八进制数、十六进制数

12、。 6.25 5.75 0.875 254 第2章 微型计算机系统1、8086微处理器的功能结构两大部件: (1)总线接口单元BIU:BIU负责与存储器接口负责对全部引脚的操作(存储器和I/O设备) (2)执行单元EU:EU部分负责指令的执行。2、8086 CPU内部结构如图所示: 3、 总线接口单元BIU由20位地址加法器、4个段寄存器、16位指针 IP、指令队列缓冲器和总线控制逻辑电路等组成。4、 执行单元EU:包含一个16位运算器ALU、8个16位的寄存器、1个16位标志寄存器、一个数据暂存寄存器和执行单元的控制电路。5、8086的通用寄存器(14个):(1) 数据寄存器:既可以作8位又

13、可作16位 AX:作为累加器使用,在乘除等指令中指定用来存放操作数。 BX:通用寄存器使用,在计算存储地址时,常用作基址寄存器。 CX:通用,此外常用来保存计数值。隐含计数器 DX:通用,对于某些I/O操作,DX可用来存放I/O端口地址(2) 指针和变址寄存器: SP:称为堆栈指针寄存器,用来指示段顶的偏移地址 BP:称为基址指针寄存器,可以与堆栈寄存器SS联用来确定堆栈中某一存储单元地址 SI:源变址寄存器 DI:目的变址寄存器 一般与数据段寄存器DS联用,确定数据中某一单元的地址。(3)专用寄存器:(1) IP(Inetruction Pointer)为指针寄存器,它用来存放代码中的偏移地

14、址。(2) FLAGS(FR)为标志寄存器,又称状态寄存器(Program Status Word,PSW),这是一个 存放条件码标志、控制标志和系统标志的寄存器,16位7、 条件码标志(状态标志位):用来记录程序中运行结果的状态信息:由CPU自行设置(1)辅助进位标志AF: 这个标志用于十进制算术运算指令中。(2) 进位标志CF: 这个标志主要用于多字节数的加、减法运算。(3)溢出标志OF: 多用于算术运算中。 (4) 符号标志SF: 它的值与运算结果的最高位相同。 (5)奇偶标志PF: 这个标志可用于检查在数据传ZHESHI送过程中是否发生错误。(6) 零标志ZF: 若运算的结果为0,则Z

15、F=1,否则ZF=0。8、控制标志位:(1)方向标志DF:若用指令置DF=1,则引起串操作指令为自动减量指令,也就是从高地址到低地址处理字符串;若使DF=0,则串操作指令就为自动增量指令,也就是从低地址到高地址处理字符串。(2)中断允许标志IF :若指令中置IF=1,则允许CPU去接收外部的可屏蔽中断请求;若使IF=0,则屏蔽上述的中断请求,对内部产生的中断不起作用。(3)追踪标志TF :置TF标志,使处理进入单步方式,以便于调试。在这个方式中,CPU在每条指令执行以后,产生一个内部中断,允许程序在每条指令执行以后进行检查。 8、段寄存器(4个):(1)代码段寄存器CS(2)数据段寄存器DS(

16、3)堆栈段寄存器SS(4)附加段寄存器ES 9、微机的总线按功能分: (1) 地址总线AB(2) 数据总线DB(3) 控制总线CB 10、地址(1)物理地址:是指CPU和存储器进行数据交换时实际所使用的20位地址物理地址包括2个部分:段基址(段起始地址高16位)和偏移地址(2) 逻辑地址:是程序使用段内16位的地址。逻辑地址分为段基址和偏移量(3) 物理地址计算:当CPU寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址 物理地址=16*段基址(相当于段基址后+0)+偏移量(逻辑地址) 习 题 2 2.3 简述8086 CPU的寄存器组织p2

17、52.4 试述8086 CPU标志寄存器各位的含义与作用p272.5 8086中,存储器为什么采用分段管理? (1)内辅16位地址 外辅20位地址,方便管理 (2)模块化体现第3章 指令系统和寻址方式1、 指令格式: (1)操作码字段:用来说明该指令所要完成的操作。(2)地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。2、汇编语言指令中寻址方式(能正确识别每种寻址方式)p38 重点掌握立即、寄存器、直接、寄存器间接、基址、变址、基址加变址、带位移基址变址(相对)寻址方式。 (1)立即寻址:源操作数是

18、立即数 寻找的操作数紧跟在指令操作码之后。这种寻址方式在汇编语言格式中表示为: 操作码 数字表达式其中,这个数字表达式的值可以是一个8位整数,也可以是一个16位整数。【例3-1】MOV AX,267 MOV AL,10010011B AND 0FEH MOV AL,PORT1 MOV AX,DATA1汇编立即寻址方式时,汇编程序首先计算出数字表达式的值,然后将其写入指令的地址码字段,这称为立即数 (2)寄存器寻址:操作数放在寄存器中 ;汇编语言格式中表示为 操作码 寄存器名 比如AL,BX,CX,DS、IP等等。 【例3-4】MOV AX,BX MOV AL,BL其中,AX,BX是16位寄存器

19、寻址方式;AL,BL是8位寄存器寻址方式。 (3)直接寻址:是指寻找的操作数的地址在指令中直接给出。 这种寻址方式在汇编格式中表示为 操作码 地址表达式 (或地址表达式) 操作码 数字表达式【例3-5】 假设TABLE是在数据段定义的一个字节数组的首地址标号(变量名),其偏移地址为1000H,则指令MOV AL,TABLE 或 MOV AL,TABLE+2或MOV AL,TABLE 或 MOV AL,TABLE+2或MOV AL,1000H 或 MOV AL,1000H+2是等效的。其中TABLE、TABLE、1000H、TABLE+2、TABLE+2和1000H+2都是直接寻址方式。 (4)

20、寄存器间接寻址:操作数在存储器中,但操作数地址的偏移量在寄存器中 在汇编格式中表示为: 基址寄存器名或变址寄存器名 【例3-8】MOVAX,BX MOVAX,SI 其中,BX、SI都是寄存器间接寻址方式注:(1)在计算机中通常将BX,BP称为基址寄存器 (2)SI,DI称为变址寄存器,寻址时操作数的地址放在寄存器中。 (5)基址寻址:由指定的基址寄存器内容,加上指令中给定的位移量作为操作数的有效地址。 EA基址寄存器位移量 【例3-13】 MOVAX,BX SI 或写为 MOVAX,BX+SI 其中, BXSI、BX+SI都是基址变址寻址方式。 (6)变址寻址:由变址SI、DI寄存器内容,加上

21、指令中给定的位移量作为操作数的有效地址。 EA变址寄存器位移量 (7)基址加变址寻址:由指令中的基址寄存器内容和变址寄存器内容相加得到操作数的有效地址。EA基址寄存器变址寄存器 (8)带位移的基址加变址寻址:操作数在内存中, 由变址寄存器、基址寄存器和位移量相加得到内存有效地址。EA基址寄存器变址寄存器位移量3、数据传送指令: (1) 通用传送指令: 1)最基本的传送指令MOV:可实现寄存器之间、寄存器和存储器之间传送数据, 还可实现将立即数送至寄存器或存储单元的操作。 汇编格式:MOV 目的操作数,源操作数 执行的操作:(目的操作数)源操作数 功能:将源操作数存入目的操作数的寄存器或存储单元

22、中去。 注意: 目的操作数不能是立即寻址方式。 源操作数与目的操作数不能同时为存储器寻址方式,即两个内存单元之间不能直 接传送数据。 立即数不能直接送段寄存器,即段寄存器只能通过寄存器或存储单元传送数据。 两个段寄存器之间不允许直接传送数据。 不允许给CS、IP、PSW三个寄存器传送数据,即这3个寄存器的值用户无权改变。 源操作数和目的操作数必须字长相等。 MOV指令不影响标志位。 MOV指令有九种形式: 从寄存器到寄存器; 从寄存器到段寄存器; 从寄存器到存储器; 从段寄存器到寄存器; 从存储器到寄存器; 从段寄存器到存储器; 从存储器到段寄存器; 从立即数到寄存器; 从立即数到存储器。 图

23、3.7 MOV指令的九种形式说明:寄存器寻址有直接、寄存器间接、寄存器相对、基址变址和相对基址变址五种存储器寻址方式。 2)进栈指令PUSH及出栈指令POP: PUSH指令 汇编格式:PUSH源操作数 执行的操作:(SP)(SP)2 先修改指针 (SP)+1,(SP)操作数 功能:将16位寄存器、段寄存器、16位存储单元数据压入堆栈。 POP指令 汇编格式:POP目的操作数 执行操作:(操作数)(SP)+1,(SP) (SP)(SP)+2 后修改指针 功能:将堆栈中的16位数据送入16位寄存器、段寄存器、16位存储单元中。 说明: 在8086/8088中,PUSH、POP指令的操作数不能使用立

24、即寻址方式。POP指令的 操作数还不能使用CS寄存器。 堆栈中数据的压入、弹出必须以字为单位,所以PUSH和POP指令只能作字操作。 这两条堆栈指令不影响标志位。 【例3-18】 MOVAX,1234H PUSHAX 设执行前(SS)=2000H, (SP)=00FEH,执行后(SS)=2000H, (SP)=00FCH。 3) PUSHF指令: 汇编格式:PUSHF 执行的操作:(SP)(SP)2 (SP)+1,(SP)PSW 功能:将标志寄存器内容压入堆栈。 4) POPF指令 汇编格式:POPF 执行的操作:(PSW)(SP)+1,(SP) (SP)(SP)+2 功能:将16位堆栈数据弹

25、出送入标志寄存器中。 5) XCHG指令:互换指令XCHG可以实现字互换或字节互换。互换可以在寄存器之间进行, 也可以在寄存器和存储单元之间进行。 汇编格式:XCHG 目的操作数,源操作数 执行的操作:互换源、目的两个操作数的存放位置。 (2)累加器专用传送指令:这类指令都仅限于I/O端口或存储单元与累加器AL(AX)之间传 送数据。具体包括IN输入指令、OUT输出指令和XLAT换码指令。 1) IN输入指令 汇编格式:IN AL,I/O口地址表达式 或 IN AX,I/O口地址表达式 执行的操作: AL(I/O口地址表达式) 或AX(I/O口地址表达式+1),(I/O口地址表达式) 说明:

26、该指令的目的操作数仅限于累加器,即8位操作采用AL,16位操作采用AX,不能 由其他任何寄存器代替。 如果I/O寻址的口地址号在8位以内,可以用直接寻址方式,地址表达式则由一个 8位立即数表示;如果I/O寻址的口地址号在16位以内,可以用寄存器间接寻址方 式,所寻址的地址口号则装入DX,间接寻址仅可以使用DX。 2) OUT输出指令 汇编格式:OUT 地址表达式,AL 或OUT 地址表达式,AX 执行的操作: I/O口地址(AL) 或 (I/O口地址+1),(I/O口地址)(AX) 说明:同1)。 3) XLAT换码指令 汇编格式:XLAT或XLAT 地址标号 执行的操作:(AL)(BX)+(

27、AL) 说明: XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换,例如, 把字符的扫描码转换成ASCII码或者把十六进制数0F转换成七段数码管显示代码。使用 此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移 量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址, 段地址取(DS),据此读出代码送入AL寄存器。 该指令有两种格式,第二种格式中的地址标号是指代码表的表首地址。它只是为提高程 序可读性而设置的,指令执行时只使用预先存入BX中的代码表首地址,而并不用汇编格 式中指定的地址标号。 (AL)是一个8位无

28、符号数,所以表格中最多只能存放256个代码。 此指令的执行结果不影响标志位。 【例3-21】 一个七段LED显示代码转换表存于TABLE开始的存储区,则 MOVAL,4 MOVBX,OFFSETTABLE XLAT 完成了将四个BCD码转换成七段LED显示代码的工作。(3) 地址传送指令:这组指令都是将地址送到指定的寄存器中 1) LEA偏移地址送寄存器指令 汇编格式:LEA REG(16位寄存器名),SRC(存储器寻址方式) 执行的操作:(16位寄存器)源操作数的偏移地址 功能:把源操作数的偏移地址送到指定的寄存器 2) LDS指针送指定寄存器和DS寄存器指令 汇编格式:LDS REG,SR

29、C 执行的操作:(REG)<(SRC) (DS)<(SRC+2) 功能:将源操作数寻址到的存储单元的第一个源操作数(字)送16位寄存器,第 二个源操作数(字)送DS寄存器 3) LES指针送指定寄存器和ES寄存器指令 汇编格式:LES16位寄存器名,存储器寻址方式 执行的操作:(REG)<(SRC) (ES)<(SRC+2) 功能:将寻址到的存储单元的第一个源操作数(字)送16位寄存器,第二个源操作 数(字)送ES寄存器。使用以上3条指令时,应注意以下几点: 源操作数为存储器寻址方式 目的操作室为16位寄存器,但不包括段寄存器。 这条指令不影响标志位。(4)标志传送指令

30、:这组指令包括LAHF标志送AH和SAHF AH送标志寄存器。 1) LAHF标志送AH指令 汇编格式:LAHF 执行的操作:(AH)(PSW的低8位) 说明:此指令具体操作如图3.9所示。 2) SAHF AH送标志寄存器指令 汇编格式:SAHF 执行的操作:(PSW的低8位)(AH) 表3-4标志传送指令操作码LAHFSAHF指令功能AH<(FR的低8位)FR的低8位<(AH)4、 算数运算指令:包括二进制数的运算及十进制数的运算指令 表3-5算数运算指令操作码指令功能操作码指令功能ADD ,ADC, INC加法指令DIV, IDIV除法指令SUB,SBB,DEG,NEG,CM

31、P减法指令CBW,CWD符号位扩展MUL,IMUL乘法指令DAA,DAS,AAA,AAS,AAM,AAD十进制调整(1)加法指令: 1) ADD加法指令: 汇编格式:ADDDST,SRC 执行的操作:(DST)(SRC)+(DST) 功能:完成源操作数和目的操作数的加法运算,将结果保存在目的 操作数中 2) ADC带进位加法指令: 汇编格式:ADC目的操作数,源操作数 执行的操作:(目的操作数)源操作数+目的操作数+CF 功能:完成带进位的源操作数和目的操作数加法运算,将加过保存到目的操作数中 3) INC增量指令: 汇编格式:INC操作数 执行的操作:(操作数)操作数+1 功能:完成目的操作

32、数的自家1运算(2) 减法指令:减法指令包括五条指令,如表3-4所示。表3-4减法指令操作码SUBSBBDECNEGCMP操作功能减法带借位减法减1求补比较 1) SUB减法指令: 汇编格式:SUB目的操作数,源操作数 执行的操作:(目的操作数)目的操作数源操作数 功能:完成源操作数和目的操作数的减法运算,结果保存到目的操作数中 2) SBB带借位减法指令: 汇编格式:SBB目的操作数,源操作数 执行的操作:(目的操作数)目的操作数源操作数CF 功能:完成带借位的源操作数与目的操作数的减法运算,结果保存在目的操作数 3) DEC减量指令: 汇编格式:DEC操作数 执行的操作:(操作数)操作数1

33、 功能:完成操作数的自减1运算 4) NEG求补指令: 汇编格式:NEG操作数 执行的操作:(操作数)0操作数 说明: 0操作数 = 操作数,在微型计算机中,带符号的二进制数值数据都采用补码编 码,因此,此处的操作数是补码,所以求负的操作数实质上是求补操作。 只有当操作数为0时求补运算的结果使CF=0,其他情况则均为1;只有当操作数为 128或32 768时使OF=1,其他情况则均为0。 5) CMP比较指令: 汇编格式:CMP目的操作数,源操作数 执行的操作:目的操作数源操作数。 功能:完成目的操作数的源操作数的减法运算,不保留结果。 注意: 以上5条指令都可做字或字节运算 除DEC指令不影

34、响CF标志位外,其他标志位都受指令操作结果的影响 【例3-25】 完成双字长相减操作,被减数存放在DX与AX中,减数存放在BX与CX中,差放在DX和AX中。程序段如下: SUBAX,CX SBBDX,BX(3)乘法指令:乘法指令可对字节、字进行操作,且可对有符号数整数或无符号数整数进 行操作。两个8位数相乘,结果为16位数;两个16位数相乘,结果为32 位数。乘法指令有两条。 1) MUL无符号数乘法指令: 汇编格式:MUL源操作数 执行的操作:若为字节操作 (AX)(AL)×源操作数 若为字操作 (DX), (AX)(AX)×源操作数 2) IMUL有符号数乘法指令: 汇

35、编格式:IMUL源操作数 执行的操作:与MUL相同,只是处理的数据是有符号数,而MUL处理的数据是无 符号数。 说明: 在乘法指令中,被乘数(即目的操作数)隐含在AX(字运算)或AL(字节运算)中,乘数(即源操作数)由指令寻址,其寻址方式可以是除立即寻址方式之外的任何数据寻址方式,它同时也决定了乘法是字运算还是字节运算。两个8位数相乘其积是16位,存放在AX中;两个16位数相乘其积是32位,存放在DX、AX中,DX存放高位字,AX存放低位字。 乘法指令对除CF和OF以外的标志位无定义(即这些标志位的状态是不定的)。对于MUL指令,如果乘积的高一半为0,则CF和OF均为0;否则CF和OF均为1。

36、对IMUL指令,如果乘积的高一半是低一半的符号扩展,则CF和OF均为0;否则均为1。测试这两个标志位,可知道乘积的高位字节或高位字是否是有效数字。 【例3-26】 MULCL IMUL DL MULBYTEPTRBX IMUL NUMR ;NUMR是变量名(4)除法指令:与乘法指令一样,除法指令也可对字节、字数据进行操作,而且这些数可以是有符号数整数或无符号数整数。除法指令要求被除数的长度必须是除数的两倍,也就是说,字节除法是用16位数除以8位数;字除法是用32位数除以16位数。除法指令也有两条。 1) DIV无符号数除法指令 汇编格式:DIV源操作数 执行的操作:若为字节操作:(AL)(AX

37、)/源操作数的商 (AH)(AX)/源操作数的余数 若为字操作: (AX)(DX、AX)/源操作数的商 (DX)(DX、AX)/源操作数的余数商和余数均为无符号数。 2) IDIV有符号数除法指令 汇编格式:IDIV源操作数 执行的操作:与DIV相同,只是操作数是有符号数,商和余数均为有符号数,余数 符号同被除数符号。说明: 在除法中,被除数(即目的操作数)隐含在AX(字节运算)或DX,AX(字运算)中,除数(即源操作数)由指令寻址,其寻址方式可以是除立即寻址方式之外的任何数据寻址方式,寻址方式同时也决定了除法是字节运算还是字运算。16位数除以8位数,商是8位,存放在AL中,余数是8位,存放在

38、AH中;32位数除以16位数,商是16位,存放在AX中,余数是16位,存放在DX中。 一条除法指令可能导致两类错误:一类是除数为零;另一类是除法溢出。当被除数的绝对值大于除数的绝对值时,商就会产生溢出。如,(AX)=2000被2除,由于8位除法的商将存于AL中,而结果1000无法存入AL中,导致除法溢出。当产生这两类除法错误时,微处理器就会产生除法错中断警告。 除法指令对所有标志位无定义。【例3-27】 DIVCL;AX的内容除以CL的内容,无符号商存于AL,余数存于AH IDIVDL;AX的内容除以DL的内容,带符号商存于AL,余数存于AH DIVBYTE PTRBP;AX的内容除以堆栈段中

39、由BP寻址的字节存储单元的内容, 无符号的商存于AL中,余数存于AH中 IDIVWORD PTRAX ;DX,AX的内容除以数据段 中由AX寻址的字存储单 元的内容,带符号的商存于AX中,余数存于DX中5、 逻辑运算和移位指令:(1)逻辑运算指令:逻辑运算指令可对8位数或16位数进行逻辑运算。是按位操作的 1) AND逻辑与指令 汇编格式:AND目的操作数,源操作数 执行的操作:(寻址到的目的地址)目的操作数源操作数 说明: 符号“”表示逻辑与操作。 本条指令通常用于使某个操作数中的若干位维持不变,而使另外若干位为0的 操作,也称屏蔽某些位。要维持不变的位必须和“1”相“与”,而要置为0的 位

40、必须和“0”相“与”。 【例3-29】 屏蔽(AL)中的高4位。 ANDAL,00001111B 【例3-30】AND AL,AL 此指令执行前后,(AL)无变化,但执行后使标志位发生了变化,即CF=0,OF=0。 2) OR逻辑或指令 汇编格式:OR目的操作数,源操作数 执行的操作:(寻址到的目的地址)目的操作数源操作数 说明: 符号“”表示逻辑或操作。 本条指令通常用于使某个操作数中的若干位维持不变,而使另外若干位置1的 场合。要维持不变的位必须和“0”相“或”,而要置为1的位必须和“1”相“或”。 【例3-31】 OR AL,10000000B 若执行前(AL)=0FH,则执行后(AL)

41、=8FH。 【例3-32】 OR AL,AL 指令执行前后,(AL)不变,但执行后标志位发生了变化,即CF=0,OF=0。 3) XOR逻辑异或指令 汇编格式:XOR目的操作数,源操作数 执行的操作:(寻址到的目的地址)目的操作数源操作数 说明: 符号表示异或操作。 本条指令通常用于使某个操作数清为零,同时使CF=0;或常用于判断两个数是 否相等;也可用于使操作数中的若干位维持不变,而使另外若干位取反的操作。 维持不变的这些位与“0”相“异或”,而要取反的那些位与“1”相“异或”。 【例3-33】 XORAL,AL 指令执行后,(AL)=0,CF=0,OF=0。 【例3-34】 测试(AL)是

42、否等于33H。 XORAL,33H JZMATCH 这种方法常用于检测数值是否匹配。 4) TEST测试指令: 汇编格式:TEST目的操作数,源操作数 执行的操作:目的操作数源操作数 说明: 本条指令中两操作数相与的结果不保存。 本条指令通常用于在不改变原有操作数的情况下,用来检测某一位或某几位的 条件是否满足,用于条件转移指令的先行指令。不检测的那些位与“0”相“与”, 即将不检测的位屏蔽掉;检测的那些位与“1”相“与”,保持不变。 【例3-36】 检测(AL)的最高位是否为1,若为1则转移,否则顺序执行。 TESTAL,10000000B JNZAA AA: 5) NOT逻辑非指令 汇编格

43、式:NOT目的操作数 执行的操作:(寻址到的地址)(操作数) 说明: 寻址方式不允许为立即寻址方式及段寄存器。 本条指令不影响标志位。 6) 逻辑运算指令对标志位的影响:由于逻辑运算操作是按位进行的,所以对标志位的影 响不同于算术运算操作,对标志位的具体影响见表3-6 表3-6 逻辑运算指令对标志位的影响指令OFCFSFPFZFAFAND=0=00或10或10或1无定义OR=0=00或10或10或1无定义XOR=0=00或10或10或1无定义TEST=0=00或10或10或1无定义NOT不影响不影响不影响不影响不影响不影响 注意:AND和TEST的区别: (1)AND:在执行时调用 例如:AND AX,7 (2)TEST:在编译时调用(2) 移位指令:这组指令可以对8位或16位操作数进行操作,按移位方式分为三种。 表3-10 移位指令操作码指令功能操作码指令功能SHL将操作数逻辑左移指定次数ROL将操作不带进位循环左移指定次数SHR将操作数逻辑右移指定次数ROR将操作不带进位循环右移指定次数SAL将操作数算数左移指定次数RCL将操作带进位循环左移指定次数SAR将操作数算数右移指定次数RCR将操作带进位循环右移指定次数6、控制转移指令: 无条件转移和条件转移指令JMP; JMP 直接 段内 子程序调用和返回指令CALL; CALL 间接

温馨提示

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

评论

0/150

提交评论