汇编语言课件第6章带符号数字符串和表_第1页
汇编语言课件第6章带符号数字符串和表_第2页
汇编语言课件第6章带符号数字符串和表_第3页
汇编语言课件第6章带符号数字符串和表_第4页
汇编语言课件第6章带符号数字符串和表_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

2022年12月13日12022年12月13日1

2022年12月13日1第6章带符号数、字符串和表*1DECHEXBIN

6600000110

汇编语言与接口技术2022年12月12日12022年12月12日12022年第6章带符号数、字符串和表学习本章后:1、会进行带符号数的运算程序设计

正数、负数、正负数2、会进行字符串的运算程序设计

数据串、字符串、字串、字节串3、会进行查表运算程序设计

例如:函数表Y=f(x),Y=x22022年12月13日2第6章带符号数、字符串和表学习本章后:2022年12月第6章带符号数、字符串和表本章的主要内容:6.1带符号数的运算

6.1.1带符号数的概念 6.1.2带符号数的补码表示

6.1.3带符号数的运算 6.1.4带符号数的加减运算的溢出问题6.1.5带符号数的乘除、移位、比较运算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日3第6章带符号数、字符串和表本章的主要内容:2022年16.1带符号数的算术运算6.1.1带符号数的概念

日常生活中使用的数字有正、有负(例如温度等),计算机就必须能够处理这样的数值。计算机处理数据主要包括:数据表示和数据运算。计算机只能存储0,1两种符号。

数据表示的目的是存储和显示数据,存储要解决将带符号数中的“符号”数字化后才能存储在计算机中。

数据运算是使用计算机语言提供的指令,取得运算的源操作数,将运算结果存储在计算机中,且须判断计算机运算结果的正确性。2022年12月13日46.1带符号数的算术运算6.1.1带符号数的概念20226.1带符号数的算术运算6.1.2带符号数的补码表示正数的补码表示:

将数的真值形式中的正号,用代码0来表示,数值部分用二进制数来表示。

负数的补码表示:将数的真值形式中的负号,用代码1来表示,将用二进制数表示的数值部分按位取反且在最低位加1形成。2022年12月13日56.1带符号数的算术运算6.1.2带符号数的补码表示206.1带符号数的算术运算字长:n位补码表示一个数时,最高位为符号位。符号数字化:

0---正数

1---负数数的补码表示:(1)符号位为0时,表示的数为正数,其后面的n-1位为数值部分。(2)符号位为1时,表示的数为负数,其后面的n-1位按位取反且最低位加1为数值部分。n位二进制补码表示范围:

-2n-1-

-

-

(2n-1-1)参看p154-p1556.1带符号数的算术运算字长:n位6.1带符号数的算术运算6.1.3带符号数的运算

运算:算术运算、逻辑运算

算术运算:加、减、乘、除、比较

逻辑运算:移位运算

本节中约定参加运算的数字长:8位,16位;对应数的表示范围。若字长确定则数的表示范围随之确定;若运算结果超出数的表示范围,则应进行溢出处理。2022年12月13日76.1带符号数的算术运算6.1.3带符号数的运算20226.1带符号数的算术运算6.1.3带符号数的运算(续)数的运算分类:

加法: 加法指令 ADD

减法: 减法指令 SUB

乘法: 乘法指令 IMUL

除法: 除法指令 IDIV

移位: 移位指令 SAR、SAL、SHL

比较: 比较指令 CMP简单举例说明运算结果可表示,结果溢出的情况(DEBUG下演示)6.1带符号数的算术运算6.1.3带符号数的运算(续)6.1带符号数的算术运算6.1.4带符号数的加减运算的溢出问题严重问题:带符号数的溢出问题。CPU报告溢出:产生溢出时,CPU将标志位OF置为1。程序员处理:程序检测,若OF=1则溢出,转向溢出处理。例如:如下例子产生溢出的情况(DEBUG下演示,注意加减运算对符号位的影响,特别是对OF标志的影响)P155例子6.496+70p156例子6.5(-128)+(-2)P157例子6.86.1带符号数的算术运算6.1.4带符号数的加减运算的溢6.1带符号数的算术运算6.1.4带符号数的加减运算的溢出问题(续)避免结果溢出的产生:扩大数据位数方法:CBW---把字节转换为字,把AL的D7复制到AH的所有位。CWD---把字转换为双字,把AX的D15复制到DX的所有位。参看P158程序6.16.1带符号数的算术运算6.1.4带符号数的加减运算的溢6.1带符号数的算术运算6.1.5带符号数的乘除、移位、比较运算

(1)乘法

指令格式:IMUL寄存器/内存 隐含操作数1:字节---AL,字---AX

(2)除法

指令格式:

IDIV 寄存器/内存

隐含操作数1:字节---AX,字---DX:AX2022年12月13日116.1带符号数的算术运算6.1.5带符号数的乘除、移位、6.1带符号数的算术运算(3)算术右移

指令格式:SAR目的,移位的次数

算术移位方法:目的操作数的各位右移1位,最低位进入进位位,空出的位用符号位填充。

(适用于带符号数,其余同第三章介绍的移位指令)

简单举例6.1带符号数的算术运算(3)算术右移6.1带符号数的算术运算(4)带符号数的比较

指令格式:

CMP目的操作数,源操作数带符号数比较后检查标志:OF、ZF、SF

用来检查上述条件的助记符如下:

JE JGJGEJLJLE参看P161例子6.122022年12月13日136.1带符号数的算术运算(4)带符号数的比较2022年122022年12月13日14第6章带符号数、字符串和表6.1带符号数的运算

6.1.1带符号数的概念 6.1.2带符号数的补码表示

6.1.3带符号数的运算 6.1.4带符号数的加减运算的溢出问题6.1.5带符号数的乘除、移位、比较运算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日142022年12月12日14第6章带符号数、字符串和表66.2字符串和表操作6.2.1字符串操作串处理指令处理存放在存储器里的数据串,串指令可以处理字节或字,386及后继机型还可以处理双字。

串处理指令包括:

MOVS串传送 CMPS串比较

SCAS串扫描 LODS从串取

STOS存入串

INS串输入(从I/O端口输入)

OUTS串输出(向I/O端口输出)2022年12月13日156.2字符串和表操作6.2.1字符串操作2022年12月6.2字符串和表操作6.2.1字符串操作

使用的寄存器: DS、SI、ES、DI、CX DS:SI---指向源操作数 ES:DI---指向目的操作数 CX:重复执行的次数

方向标志的使用: DF:指字符串指令自动使指针SI、DI递增或者递减 DF=0自动增量,DF=1自动减量 指令CLD;DF=0 指令STD;DF=16.2字符串和表操作6.2.1字符串操作6.2字符串和表操作6.2.1字符串操作串指令只能处理一个字符/字、双字。而串指令加上重复前缀即可方便的处理一个字符串。

串处理指令使用的重复前缀如下:

REP 重复 REPE/REPZ 相等/为零则重复 REPNE/REPNZ 不相等/不为零则重复6.2字符串和表操作6.2.1字符串操作6.2字符串和表操作1)与REP相配合工作

MOVS,STOS,LODS,INS和OUTS指令(1)格式:REP串指令

执行的操作①若(countreg)=0,则退出REP,否则继续执行。②(countreg)=(countreg)-1③执行其后的串指令④重复①-③其中计数长度为16位时,用CX作为countreg,计数长度为32位时,用ECX作为countreg。2022年12月13日186.2字符串和表操作1)与REP相配合工作2022年16.2字符串和表操作(2) MOVS串传送指令

MOVS DST,SRC MOVSB(字节) MOVSW(字)

MOVSD(双字)(386及后继机型可用)

功能:把源变址指向的寄存器数据段中的内容传送到目的变址寄存器指向的附加段中去。

执行该指令前的准备工作:①数据段中源串首地址②附加段中目的串首地址③数据串长度④方向标志:建立方向标志的指令CLDSTD

参看x86-P164-el.asm2022年12月13日196.2字符串和表操作(2) MOVS串传送指令2022年16.2字符串和表操作(3)STOS指令

STOSDSTSTOSB(字节)STOSW(字)

STOSD(双字)功能:把累加器中的内容存入由目的变址寄存器指向的附加段的单元中。

STOS指令在初始化某一缓冲区时很有用。参看x86-P165-el.asm2022年12月13日206.2字符串和表操作(3)STOS指令2022年12月16.2字符串和表操作(4)LODS指令

LODSSRCLODSB(字节)LODSW(字)

LODSD(双字)功能:把由源变址寄存器指向的数据段的单元中内容存入累加器中。

LODS指令用于将缓冲区中的一串字符逐次取出来测试。2022年12月13日216.2字符串和表操作(4)LODS指令2022年12月126.2字符串和表操作2)与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令

(1)REPE/REPZ重复串操作格式:REPE/REPZ串指令执行的操作:①若(countreg)=0或ZF=0时则退出,否则往下继续执行。②(countreg)=(countreg)-1③执行其后的串指令④重复①-③2022年12月13日226.2字符串和表操作2)与REPE/REPZ和REPNE6.2字符串和表操作(2)REPNE/REPNZ执行的操作格式:REPNE/REPNZ串指令执行的操作:①若(countreg)=0或ZF=1时则退出,否则往下继续执行。②(countreg)=(countreg)-1③执行其后的串指令④重复①-③6.2字符串和表操作(2)REPNE/REPNZ执行的操6.2字符串和表操作(3)CMPS指令

CMPSDST,SRC CMPSB(字节) CMPSW(字)

CMPSD(双字)(386及后继机型可用)

功能:把源变址指向的寄存器数据段中的内容与目的变址寄存器指向的附加段的内容相减,但不存结果,只根据条件置条件码。

用来比较两个数据串。6.2字符串和表操作(3)CMPS指令6.2字符串和表操作(4)SCAS指令

SCASDST SCASB(字节) SCASW(字)

SCASD(双字)(386及后继机型可用)

功能:把累加器中的内容与目的变址寄存器指向的附加段的内容进行比较,并不存结果,只根据条件置条件码。 从一个串中查找一个指定的字符。参看x86-P165-el.asm6.2字符串和表操作(4)SCAS指令6.2字符串和表操作6.2.2查表和XLAT指令1.查表在计算机中往往需要用表保存一些重要信息。例如:平方表、函数表等?如何用查表(1)已知表首址tab(2)已知待查数据x(表中的偏移地址)(3)

结果地址=tab+x(4)Y=(tab+x)0149…81tab+0表1.

Y=f(x)是一平方表tab+96.2字符串和表操作6.2.2查表和XLAT指令0149…6.2字符串和表操作2.XLAT(translate) 换码

指令格式:XLATOPR指令的功能:

16位指令:(AL)←((BX)+(AL))

32位指令:(AL)←((EBX)+(AL))

换码指令常用于把一种代码转换为另一种代码。6.2字符串和表操作2.XLAT(transla6.2字符串和表操作3.平方表查表实战举例(1)数据段定义平方表(2)编程序查表提示查表的主要指令段:

MOVBX,OFFSETTABMOVAL,XXLAT6.2字符串和表操作3.平方表查表实战举例本章实战练习

假设数据段中NUM开始的200字节单元中的带符号数,其他条件自设。完成如下工作:1.分别统计这串数中的正数个数和负数个数2.将原数据串中的前100个数据传送到附加段ENUM开始的单元中3.求出ENUM单元的100个数中的最大数

2022年12月13日29本章实战练习假设数据段中NUM开始的200字节单元中的2022年12月13日302022年12月13日302022年12月13日302022年12月13日302022年12月13日30复习题及作业题复习题1.各节后复习题自己独立完成2.对照章后复习答案作业题

编程题目

P1698、11、12要求:须上机调试,作业本上给出运行结果。

*302022年12月12日302022年12月12日3020222022年12月13日312022年12月13日31

2022年12月13日31第6章带符号数、字符串和表*31DECHEXBIN

6600000110

汇编语言与接口技术2022年12月12日12022年12月12日12022年第6章带符号数、字符串和表学习本章后:1、会进行带符号数的运算程序设计

正数、负数、正负数2、会进行字符串的运算程序设计

数据串、字符串、字串、字节串3、会进行查表运算程序设计

例如:函数表Y=f(x),Y=x22022年12月13日32第6章带符号数、字符串和表学习本章后:2022年12月第6章带符号数、字符串和表本章的主要内容:6.1带符号数的运算

6.1.1带符号数的概念 6.1.2带符号数的补码表示

6.1.3带符号数的运算 6.1.4带符号数的加减运算的溢出问题6.1.5带符号数的乘除、移位、比较运算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日33第6章带符号数、字符串和表本章的主要内容:2022年16.1带符号数的算术运算6.1.1带符号数的概念

日常生活中使用的数字有正、有负(例如温度等),计算机就必须能够处理这样的数值。计算机处理数据主要包括:数据表示和数据运算。计算机只能存储0,1两种符号。

数据表示的目的是存储和显示数据,存储要解决将带符号数中的“符号”数字化后才能存储在计算机中。

数据运算是使用计算机语言提供的指令,取得运算的源操作数,将运算结果存储在计算机中,且须判断计算机运算结果的正确性。2022年12月13日346.1带符号数的算术运算6.1.1带符号数的概念20226.1带符号数的算术运算6.1.2带符号数的补码表示正数的补码表示:

将数的真值形式中的正号,用代码0来表示,数值部分用二进制数来表示。

负数的补码表示:将数的真值形式中的负号,用代码1来表示,将用二进制数表示的数值部分按位取反且在最低位加1形成。2022年12月13日356.1带符号数的算术运算6.1.2带符号数的补码表示206.1带符号数的算术运算字长:n位补码表示一个数时,最高位为符号位。符号数字化:

0---正数

1---负数数的补码表示:(1)符号位为0时,表示的数为正数,其后面的n-1位为数值部分。(2)符号位为1时,表示的数为负数,其后面的n-1位按位取反且最低位加1为数值部分。n位二进制补码表示范围:

-2n-1-

-

-

(2n-1-1)参看p154-p1556.1带符号数的算术运算字长:n位6.1带符号数的算术运算6.1.3带符号数的运算

运算:算术运算、逻辑运算

算术运算:加、减、乘、除、比较

逻辑运算:移位运算

本节中约定参加运算的数字长:8位,16位;对应数的表示范围。若字长确定则数的表示范围随之确定;若运算结果超出数的表示范围,则应进行溢出处理。2022年12月13日376.1带符号数的算术运算6.1.3带符号数的运算20226.1带符号数的算术运算6.1.3带符号数的运算(续)数的运算分类:

加法: 加法指令 ADD

减法: 减法指令 SUB

乘法: 乘法指令 IMUL

除法: 除法指令 IDIV

移位: 移位指令 SAR、SAL、SHL

比较: 比较指令 CMP简单举例说明运算结果可表示,结果溢出的情况(DEBUG下演示)6.1带符号数的算术运算6.1.3带符号数的运算(续)6.1带符号数的算术运算6.1.4带符号数的加减运算的溢出问题严重问题:带符号数的溢出问题。CPU报告溢出:产生溢出时,CPU将标志位OF置为1。程序员处理:程序检测,若OF=1则溢出,转向溢出处理。例如:如下例子产生溢出的情况(DEBUG下演示,注意加减运算对符号位的影响,特别是对OF标志的影响)P155例子6.496+70p156例子6.5(-128)+(-2)P157例子6.86.1带符号数的算术运算6.1.4带符号数的加减运算的溢6.1带符号数的算术运算6.1.4带符号数的加减运算的溢出问题(续)避免结果溢出的产生:扩大数据位数方法:CBW---把字节转换为字,把AL的D7复制到AH的所有位。CWD---把字转换为双字,把AX的D15复制到DX的所有位。参看P158程序6.16.1带符号数的算术运算6.1.4带符号数的加减运算的溢6.1带符号数的算术运算6.1.5带符号数的乘除、移位、比较运算

(1)乘法

指令格式:IMUL寄存器/内存 隐含操作数1:字节---AL,字---AX

(2)除法

指令格式:

IDIV 寄存器/内存

隐含操作数1:字节---AX,字---DX:AX2022年12月13日416.1带符号数的算术运算6.1.5带符号数的乘除、移位、6.1带符号数的算术运算(3)算术右移

指令格式:SAR目的,移位的次数

算术移位方法:目的操作数的各位右移1位,最低位进入进位位,空出的位用符号位填充。

(适用于带符号数,其余同第三章介绍的移位指令)

简单举例6.1带符号数的算术运算(3)算术右移6.1带符号数的算术运算(4)带符号数的比较

指令格式:

CMP目的操作数,源操作数带符号数比较后检查标志:OF、ZF、SF

用来检查上述条件的助记符如下:

JE JGJGEJLJLE参看P161例子6.122022年12月13日436.1带符号数的算术运算(4)带符号数的比较2022年122022年12月13日44第6章带符号数、字符串和表6.1带符号数的运算

6.1.1带符号数的概念 6.1.2带符号数的补码表示

6.1.3带符号数的运算 6.1.4带符号数的加减运算的溢出问题6.1.5带符号数的乘除、移位、比较运算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日442022年12月12日14第6章带符号数、字符串和表66.2字符串和表操作6.2.1字符串操作串处理指令处理存放在存储器里的数据串,串指令可以处理字节或字,386及后继机型还可以处理双字。

串处理指令包括:

MOVS串传送 CMPS串比较

SCAS串扫描 LODS从串取

STOS存入串

INS串输入(从I/O端口输入)

OUTS串输出(向I/O端口输出)2022年12月13日456.2字符串和表操作6.2.1字符串操作2022年12月6.2字符串和表操作6.2.1字符串操作

使用的寄存器: DS、SI、ES、DI、CX DS:SI---指向源操作数 ES:DI---指向目的操作数 CX:重复执行的次数

方向标志的使用: DF:指字符串指令自动使指针SI、DI递增或者递减 DF=0自动增量,DF=1自动减量 指令CLD;DF=0 指令STD;DF=16.2字符串和表操作6.2.1字符串操作6.2字符串和表操作6.2.1字符串操作串指令只能处理一个字符/字、双字。而串指令加上重复前缀即可方便的处理一个字符串。

串处理指令使用的重复前缀如下:

REP 重复 REPE/REPZ 相等/为零则重复 REPNE/REPNZ 不相等/不为零则重复6.2字符串和表操作6.2.1字符串操作6.2字符串和表操作1)与REP相配合工作

MOVS,STOS,LODS,INS和OUTS指令(1)格式:REP串指令

执行的操作①若(countreg)=0,则退出REP,否则继续执行。②(countreg)=(countreg)-1③执行其后的串指令④重复①-③其中计数长度为16位时,用CX作为countreg,计数长度为32位时,用ECX作为countreg。2022年12月13日486.2字符串和表操作1)与REP相配合工作2022年16.2字符串和表操作(2) MOVS串传送指令

MOVS DST,SRC MOVSB(字节) MOVSW(字)

MOVSD(双字)(386及后继机型可用)

功能:把源变址指向的寄存器数据段中的内容传送到目的变址寄存器指向的附加段中去。

执行该指令前的准备工作:①数据段中源串首地址②附加段中目的串首地址③数据串长度④方向标志:建立方向标志的指令CLDSTD

参看x86-P164-el.asm2022年12月13日496.2字符串和表操作(2) MOVS串传送指令2022年16.2字符串和表操作(3)STOS指令

STOSDSTSTOSB(字节)STOSW(字)

STOSD(双字)功能:把累加器中的内容存入由目的变址寄存器指向的附加段的单元中。

STOS指令在初始化某一缓冲区时很有用。参看x86-P165-el.asm2022年12月13日506.2字符串和表操作(3)STOS指令2022年12月16.2字符串和表操作(4)LODS指令

LODSSRCLODSB(字节)LODSW(字)

LODSD(双字)功能:把由源变址寄存器指向的数据段的单元中内容存入累加器中。

LODS指令用于将缓冲区中的一串字符逐次取出来测试。2022年12月13日516.2字符串和表操作(4)LODS指令2022年12月126.2字符串和表操作2)与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令

(1)REPE/REPZ重复串操作格式:REPE/REPZ串指令执行的操作:①若(countreg)=0或ZF=0时则退出,否则往下继续执行。②(countreg)=(countreg)-1③执行其后的串指令④重复①-③2022年12月13日526.2字符串和表操作2)与REPE/REPZ和REPNE6.2字符串和表操作(2)REPNE/REPNZ执行的操作格式:REPNE/REPNZ串指令执行的操作:①若(countreg)=0或ZF=1时则退出,否则往下继续执行。②(countreg)=(countreg)-1③执行其后的串指令④重复①-③6.2字符串和表操作(2)REPNE/REPNZ执行的操6.2字符串和表操作(3)CMPS指令

CMPSDST,SR

温馨提示

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

评论

0/150

提交评论