1、2022年5月24日12022年5月24日1 2022年5月24日1第第6 6章章 带符号数、字符串和表带符号数、字符串和表23:371DEC HEX BIN6 6 00000110 汇编语言与接口技术汇编语言与接口技术第第6 6章章 带符号数、字符串和表带符号数、字符串和表学习本章后:学习本章后:1 1、会进行带符号数的运算程序设计、会进行带符号数的运算程序设计 正数、负数、正负数正数、负数、正负数2 2、会进行字符串的运算程序设计、会进行字符串的运算程序设计 数据串、字符串、字串、字节串数据串、字符串、字串、字节串3 3、会进行查表运算程序设计、会进行查表运算程序设计 例如:函数表例如:函
2、数表 Y=fY=f(x)x),Y=xY=x2 22022年5月24日2第第6 6章章 带符号数、字符串和表带符号数、字符串和表本章的主要内容:本章的主要内容:6.1 6.1 带符号数的运算带符号数的运算 6.1.1 6.1.1 带符号数的概念带符号数的概念 6.1.2 6.1.2 带符号数的补码表示带符号数的补码表示 6.1.3 6.1.3 带符号数的运算带符号数的运算 6.1.4 6.1.4 带符号数的加减运算的溢出问题带符号数的加减运算的溢出问题 6.1.5 6.1.5 带符号数的乘除、移位、比较运算带符号数的乘除、移位、比较运算6.2 6.2 字符串和表操作字符串和表操作 6.2.1 6
3、.2.1 字符串操作字符串操作 6.2.2 XLAT6.2.2 XLAT指令和查表指令和查表2022年5月24日36.1 6.1 带符号数的算术运算带符号数的算术运算6.1.1 6.1.1 带符号数的概念带符号数的概念 日常生活中使用的数字有正、有负(例如温度等),日常生活中使用的数字有正、有负(例如温度等),计算机就必须能够处理这样的数值。计算机就必须能够处理这样的数值。 计算机处理数据主要包括:数据表示和数据运算。计算机处理数据主要包括:数据表示和数据运算。 计算机只能存储计算机只能存储0 0,1 1两种符号。两种符号。 数据表示数据表示的目的是存储和显示数据,存储要解决将带的目的是存储和
4、显示数据,存储要解决将带符号数中的符号数中的“符号符号”数字化后数字化后才能存储在计算机中。才能存储在计算机中。 数据运算数据运算是使用计算机语言提供的指令,取得运算的是使用计算机语言提供的指令,取得运算的源操作数,源操作数,将运算结果存储在计算机中将运算结果存储在计算机中,且须判断计算机,且须判断计算机运算结果的正确性运算结果的正确性。 2022年5月24日46.1 6.1 带符号数的算术运算带符号数的算术运算6.1.2 6.1.2 带符号数的补码表示带符号数的补码表示正数的补码表示:正数的补码表示: 将数的真值形式中的将数的真值形式中的正正号,用代码号,用代码0 0来表示,数值部来表示,数
5、值部分用二进制数来表示。分用二进制数来表示。 负数的补码表示:负数的补码表示: 将数的真值形式中的将数的真值形式中的负负号,用代码号,用代码1 1来表示,将用二来表示,将用二进制数表示的数值部分按位取反且在最低位加进制数表示的数值部分按位取反且在最低位加1 1形成。形成。2022年5月24日56.1 6.1 带符号数的算术运算带符号数的算术运算字长:字长: n n位位补码表示一个数时,最高位为符号位。补码表示一个数时,最高位为符号位。符号数字化:符号数字化:0-0-正数正数 1-1-负数负数数的补码表示:数的补码表示: (1 1)符号位为)符号位为0 0时,表示的数为时,表示的数为正正数数,其
6、后面的其后面的n-1n-1位位为数值部分。为数值部分。 (2 2)符号位为)符号位为1 1时,表示的数为时,表示的数为负负数,其后面的数,其后面的n-1n-1位位按位取反且最低位加按位取反且最低位加1 1为数值部分。为数值部分。n n位位二进制补码表示范围:二进制补码表示范围: - 2- 2n-1n-1- - - - - - (2(2n-1n-1-1) -1) 参看参看p154-p155p154-p1556.1 6.1 带符号数的算术运算带符号数的算术运算6.1.3 6.1.3 带符号数的运算带符号数的运算 运运 算算:算术运算、逻辑运算算术运算、逻辑运算 算术运算算术运算:加、减、乘、除、比
7、较加、减、乘、除、比较 逻辑运算逻辑运算:移位运算移位运算 本节中约定参加运算的数本节中约定参加运算的数字长:字长:8 8位,位,1616位;对应数的位;对应数的表示范围。表示范围。 若字长确定则数的表示范围随之确定;若运算结果若字长确定则数的表示范围随之确定;若运算结果超出数的表示范围,则应进行溢出处理。超出数的表示范围,则应进行溢出处理。2022年5月24日76.1 6.1 带符号数的算术运算带符号数的算术运算6.1.3 6.1.3 带符号数的运算(续)带符号数的运算(续)数的数的运算分类运算分类: 加法:加法:加法指令加法指令 ADDADD 减法:减法:减法指令减法指令 SUBSUB 乘
8、法:乘法:乘法指令乘法指令 IMULIMUL 除法:除法:除法指令除法指令 IDIVIDIV 移位移位: : 移位指令移位指令 SARSAR、SALSAL、SHLSHL 比较:比较:比较指令比较指令 CMPCMP简单举例说明运算结果可表示,结果溢出的情况(简单举例说明运算结果可表示,结果溢出的情况(DEBUGDEBUG下演示)下演示)6.1 6.1 带符号数的算术运算带符号数的算术运算6.1.4 6.1.4 带符号数的加减运算的溢出问题带符号数的加减运算的溢出问题严重问题:严重问题:带符号数的溢出问题。带符号数的溢出问题。CPUCPU报告溢出:报告溢出:产生溢出时,产生溢出时,CPUCPU将标
9、志位将标志位OFOF置为置为1 1。程序员处理:程序员处理:程序检测,若程序检测,若OF=1OF=1则溢出,转向溢出处理。则溢出,转向溢出处理。例如例如: :如下例子产生溢出的情况如下例子产生溢出的情况(DEBUGDEBUG下演示,注意加减运算对符号位的影响,特别是下演示,注意加减运算对符号位的影响,特别是对对OFOF标志的影响)标志的影响)P155 P155 例子例子6.4 6.4 96+7096+70p156 p156 例子例子6.5 6.5 (-128-128)+(-2)+(-2)P157 P157 例子例子6.86.86.1 6.1 带符号数的算术运算带符号数的算术运算6.1.4 6.
10、1.4 带符号数的加减运算的溢出问题带符号数的加减运算的溢出问题(续)(续)避免结果溢出的产生:避免结果溢出的产生:扩大数据位数扩大数据位数方法:方法:CBW-CBW-把字节转换为字,把把字节转换为字,把ALAL的的D7D7复制到复制到AHAH的所有位。的所有位。CWD-CWD-把字转换为双字,把把字转换为双字,把AXAX的的D15D15复制到复制到DXDX的所有位。的所有位。参看参看P158 P158 程序程序6.16.16.1 6.1 带符号数的算术运算带符号数的算术运算6.1.5 6.1.5 带符号数的乘除、移位、比较运算带符号数的乘除、移位、比较运算 (1 1)乘法)乘法 指令格式:指
11、令格式:IMUL IMUL 寄存器寄存器/ /内存内存 隐含操作数隐含操作数1 1:字节:字节-AL,-AL,字字-AX-AX (2 2)除法)除法 指令格式:指令格式: IDIVIDIV寄存器寄存器/ /内存内存 隐含操作数隐含操作数1 1:字节:字节-AX,-AX,字字-DX:AX-DX:AX2022年5月24日116.1 6.1 带符号数的算术运算带符号数的算术运算(3 3)算术右移)算术右移 指令格式:指令格式:SAR SAR 目的,移位的次数目的,移位的次数 算术移位方法算术移位方法:目的操作数的各位右移目的操作数的各位右移1 1位,最低位位,最低位进入进位位,空出的位用符号位填充。
12、进入进位位,空出的位用符号位填充。 (适用于带符号数,其余同第三章介绍的移位指令)(适用于带符号数,其余同第三章介绍的移位指令) 简单举例6.1 6.1 带符号数的算术运算带符号数的算术运算(4)(4)带符号数的比较带符号数的比较 指令格式:指令格式: CMP CMP 目的操作数,源操作数目的操作数,源操作数 带符号数比较后检查标志:带符号数比较后检查标志:OFOF、ZFZF、SFSF 用来检查上述条件的助记符如下:用来检查上述条件的助记符如下: JEJE JG JGE JG JGE JL JLE JL JLE 参看参看P161 P161 例子例子6.126.122022年5月24日13202
13、2年5月24日14第第6 6章章 带符号数、字符串和表带符号数、字符串和表6.1 6.1 带符号数的运算带符号数的运算 6.1.1 6.1.1 带符号数的概念带符号数的概念 6.1.2 6.1.2 带符号数的补码表示带符号数的补码表示 6.1.3 6.1.3 带符号数的运算带符号数的运算 6.1.4 6.1.4 带符号数的加减运算的溢出问题带符号数的加减运算的溢出问题 6.1.5 6.1.5 带符号数的乘除、移位、比较运算带符号数的乘除、移位、比较运算6.2 6.2 字符串和表操作字符串和表操作 6.2.1 6.2.1 字符串操作字符串操作 6.2.2 XLAT6.2.2 XLAT指令和查表指
14、令和查表2022年5月24日146.2 6.2 字符串和表操作字符串和表操作6.2.1 6.2.1 字符串操作字符串操作 串处理指令处理存放在存储器里的数据串,串指令可串处理指令处理存放在存储器里的数据串,串指令可以处理字节或字,以处理字节或字,386386及后继机型还可以处理双字。及后继机型还可以处理双字。串处理指令包括:串处理指令包括:MOVSMOVS串传送串传送 CMPSCMPS串比较串比较 SCAS SCAS 串扫描串扫描LODS LODS 从串取从串取STOSSTOS存入串存入串 INS INS 串输入(从串输入(从I/OI/O端口输入)端口输入)OUTSOUTS串输出(向串输出(向
15、I/OI/O端口输出)端口输出)2022年5月24日156.2 6.2 字符串和表操作字符串和表操作6.2.1 6.2.1 字符串操作字符串操作使用的寄存器:使用的寄存器:DSDS、SISI、ESES、DIDI、CXCXDS:SI-DS:SI-指向源操作数指向源操作数ES:DI-ES:DI-指向目的操作数指向目的操作数CX:CX:重复执行的次数重复执行的次数方向标志的使用:方向标志的使用:DFDF:指字符串指令自动使指针:指字符串指令自动使指针SISI、DIDI递增或者递减递增或者递减DF=0 DF=0 自动增量,自动增量,DF=1DF=1自动减量自动减量指令指令CLD ;DF=0CLD ;D
16、F=0指令指令STD ;DF=1STD ;DF=16.2 6.2 字符串和表操作字符串和表操作6.2.1 6.2.1 字符串操作字符串操作 串指令只能处理一个字符串指令只能处理一个字符/ /字、双字。而串指令加上字、双字。而串指令加上重复前缀即可方便的处理一个字符串。重复前缀即可方便的处理一个字符串。串处理指令使用的重复前缀如下:串处理指令使用的重复前缀如下:REPREP重复重复REPE/REPZREPE/REPZ相等相等/ /为零则重复为零则重复REPNE/REPNZREPNE/REPNZ不相等不相等/ /不为零则重复不为零则重复6.2 6.2 字符串和表操作字符串和表操作1 1) 与与RE
17、PREP相配合工作相配合工作MOVS,STOSMOVS,STOS,LODSLODS,INSINS和和OUTSOUTS指令指令(1)(1)格式:格式:REP REP 串指令串指令 执行的操作执行的操作 若(若(count regcount reg)0 0,则退出,则退出REPREP,否则继续执行。,否则继续执行。 (count regcount reg) (count regcount reg)-1-1 执行其后的串指令执行其后的串指令 重复重复 其中计数长度为其中计数长度为1616位时,用位时,用CXCX作为作为count regcount reg,计数长,计数长度为度为3232位时,用位时,
18、用ECXECX作为作为count regcount reg。2022年5月24日186.2 6.2 字符串和表操作字符串和表操作(2)(2)MOVSMOVS串传送指令串传送指令 MOVSMOVSDST,SRCDST,SRCMOVSB(MOVSB(字节字节) )MOVSWMOVSW(字)(字)MOVSDMOVSD(双字)(双字)(386386及后继机型可用)及后继机型可用) 功能:功能:把源变址指向的寄存器数据段中的内容传送到目的把源变址指向的寄存器数据段中的内容传送到目的变址寄存器指向的附加段中去。变址寄存器指向的附加段中去。 执行该指令前的准备工作:执行该指令前的准备工作: 数据段中源串首地
19、址数据段中源串首地址 附加段中目的串首地址附加段中目的串首地址 数据串长度数据串长度 方向标志:方向标志:建立方向标志的指令建立方向标志的指令 CLD STDCLD STD 参看参看x86-P164-el.asmx86-P164-el.asm2022年5月24日196.2 6.2 字符串和表操作字符串和表操作(3)STOS(3)STOS指令指令 STOS DSTSTOS DST STOSB( STOSB(字节字节) ) STOSW STOSW(字)(字) STOSDSTOSD(双字)(双字) 功能:把累加器中的内容存入由目的变址寄存器指向的附加功能:把累加器中的内容存入由目的变址寄存器指向的附
20、加段的单元中。段的单元中。 STOSSTOS指令在初始化某一缓冲区时很有用。指令在初始化某一缓冲区时很有用。参看参看x86-P165-el.asmx86-P165-el.asm2022年5月24日206.2 6.2 字符串和表操作字符串和表操作(4)LODS(4)LODS指令指令 LODS SRCLODS SRC LODSB( LODSB(字节字节) ) LODSW LODSW(字)(字) LODSDLODSD(双字)(双字) 功能:把由源变址寄存器指向的数据段的单元中内容功能:把由源变址寄存器指向的数据段的单元中内容存入累加器中。存入累加器中。 LODSLODS指令用于将缓冲区中的一串字符逐
21、次取出来测试。指令用于将缓冲区中的一串字符逐次取出来测试。2022年5月24日216.2 6.2 字符串和表操作字符串和表操作2) 2) 与与REPE/REPZREPE/REPZ和和REPNE/REPNZREPNE/REPNZ联合工作的联合工作的CMPSCMPS和和 SCASSCAS指令指令 (1) REPE/REPZ (1) REPE/REPZ重复串操作重复串操作格式:格式:REPE/REPZ REPE/REPZ 串指令串指令执行的操作:执行的操作: 若(若(count regcount reg)0 0或或ZF=0ZF=0时时则退出,否则往下继续执行。则退出,否则往下继续执行。 (count
22、 regcount reg) (count regcount reg)-1-1 执行其后的串指令执行其后的串指令 重复重复 2022年5月24日226.2 6.2 字符串和表操作字符串和表操作(2) REPNE/REPNZ(2) REPNE/REPNZ执行的操作执行的操作格式:格式:REPNE/REPNZ REPNE/REPNZ 串指令串指令执行的操作:执行的操作: 若(若(count regcount reg)0 0或或ZF=1ZF=1时时则退出,否则往下继续执行。则退出,否则往下继续执行。 (count regcount reg) (count regcount reg)-1-1 执行其后
23、的串指令执行其后的串指令 重复重复 6.2 6.2 字符串和表操作字符串和表操作(3) CMPS(3) CMPS指令指令CMPS DST,SRCCMPS DST,SRCCMPSB(CMPSB(字节字节) )CMPSWCMPSW(字)(字)CMPSDCMPSD(双字)(双字)(386386及后继机型可用)及后继机型可用) 功能:功能:把源变址指向的寄存器数据段中的内容与目的变把源变址指向的寄存器数据段中的内容与目的变址寄存器指向的附加段的内容相减,但不存结果,只根据条件址寄存器指向的附加段的内容相减,但不存结果,只根据条件置条件码。置条件码。 用来比较两个数据串。用来比较两个数据串。6.2 6.
24、2 字符串和表操作字符串和表操作(4) SCAS(4) SCAS指令指令 SCAS DSTSCAS DSTSCASB(SCASB(字节字节) )SCASWSCASW(字)(字)SCASDSCASD(双字)(双字)(386386及后继机型可用)及后继机型可用) 功能:功能:把累加器中的内容与目的变址寄存器指向的附加把累加器中的内容与目的变址寄存器指向的附加段的内容进行比较,并不存结果,只根据条件置条件码。段的内容进行比较,并不存结果,只根据条件置条件码。 从一个串中查找一个指定的字符。从一个串中查找一个指定的字符。 参看参看x86-P165-el.asmx86-P165-el.asm6.2 6.
25、2 字符串和表操作字符串和表操作6.2.26.2.2查表和查表和XLATXLAT指令指令1.1.查表查表 在计算机中往往需要用表保存在计算机中往往需要用表保存一些重要信息。例如:平方表一些重要信息。例如:平方表、函数表等、函数表等?如何用查表?如何用查表(1 1)已知表首址)已知表首址tabtab(2 2)已知待查数据)已知待查数据x(x(表中的偏移表中的偏移地址)地址)(3 3) 结果地址结果地址=tab+x=tab+x(4 4)Y=(tab+x)Y=(tab+x)014981tab+0表表1. Y=f(x)是一平方表)是一平方表tab+96.2 6.2 字符串和表操作字符串和表操作2.XL
26、AT (translate)2.XLAT (translate)换码换码 指令格式指令格式:XLAT OPRXLAT OPR 指令的功能:指令的功能: 1616位指令位指令: :(AL) (AL) (BX)+(AL)(BX)+(AL) 3232位指令位指令: :(AL) (AL) (EBX)+(AL) (EBX)+(AL) 换码指令常用于把一种代码转换为另一种代码。换码指令常用于把一种代码转换为另一种代码。6.2 6.2 字符串和表操作字符串和表操作3.3.平方表查表实战举例平方表查表实战举例 (1 1)数据段定义平方表)数据段定义平方表 (2 2)编程序查表)编程序查表提示提示 查表的主要指
27、令段:查表的主要指令段: MOV BX,OFFSET TABMOV BX,OFFSET TAB MOV AL,X MOV AL,X XLAT XLAT本章实战练习本章实战练习 假设数据段中NUM开始的200字节单元中的带符号数,其他条件自设。完成如下工作: 1.分别统计这串数中的正数个数和负数个数 2.将原数据串中的前100个数据传送到附加段ENUM开始的单元中 3.求出ENUM单元的100个数中的最大数 2022年5月24日292022年5月24日302022年5月24日302022年5月24日302022年5月24日302022年5月24日30复习题及作业题复习题及作业题复习题复习题1.各节后复习题自己独立完成2.对照章后复习答案作业题作业题 编程题目 P P169 8、 11、 12 要求:须上机调试,作业本上给出运行结果。23:3730