NE555产生方波的方波在21.2v以上,如何在高电平不变的条件下,把低电平降为零!

Epidermal growth factor receptor, but not c-erbB-2, activation prevents lactogenic hormone... - Abstract - Europe PMC
Europe PMC requires Javascript to function effectively.
Either your web browser doesn't support Javascript or it is currently turned off. In the latter case, please
turn on Javascript support in your web browser and reload this page.
https://orcid.org
Search worldwide, life-sciences literature
(PMID:2196443 PMCID:PMC360913)
Harwerth IM
Ciardiello F
Salomon DS
Yamamoto T
[01 Aug ):]
research-article, Journal Article
The HC11 cell line was isolated from mammary gland cells of pregnant mice. The cells displayed a normal phenotype and retained some characteristics of mammary epithelial cell differentiation. After treatment with the lactogenic hormones prolactin and glucocorticoids, the HC11 cells expressed the milk protein beta-casein. Various oncogenes were transfected and expressed in HC11 cells. The oncogenes were tested for their transformation ability and for their effects upon the differentiation of the HC11 cells. All of the oncogenes tested, including activated human Ha-ras, human transforming growth factor-alpha, activated rat neuT, and human c-erbB-2 activated by a point mutation in the transmembrane domain, caused transformation of the HC11 cells, as shown by tumor formation in nude mice. HC11 cells expressing the neuT and activated c-erbB-2 genes synthesized beta-casein in response to lactogenic hormones, whereas those expressing the Ha-ras or transforming growth factor-alpha oncogenes were no longer able to respond to the lactogenic hormones. This inhibition of beta-casein production occurs at the transcriptional level and in the transforming growth factor-alpha-transformed cells is due to an autocrine mechanism involving the activation of the epidermal growth factor receptor. This suggests that, although the c-erbB-2 and epidermal growth factor receptors are structurally quite similar, their activation has different effects upon mammary epithelial cell differentiation.
)- subscription required
Show all items
Show all items
Show all items
Show all items
CitePeer Related Articles
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items
Show all items逻辑运算和数据传送等数据加工处理的能力
时间: 20:39:43
&&&&&&&&&&&&&&&&《微机原理与接口技术》&&&&课程导述&&&&&&&&&&&&1.为什么要学习这门课程??&&&&&&&&微型计算机现已应用于国民经济的各个领域,它的普及与应用使人们传统的工作、学习、生活乃至思维方式发生了巨大变化。微型计算机现已应用于国民经济的各个领域,它的普及与应用使人们传统的工作、学习、生活乃至思维方式发生了巨大变化。微机原理与接口技术几乎是所有理工科大专院校学生的一门必修课。&&&&&&&&&&&&2.要求学什么?&&&&&&&&要求掌握微型计算机的硬件组成及使用;学会运用指令系统和汇编语言进行程序设计;熟悉各种类型的接口及其应用,树立起微型计算机体系结构的基本概念;培养利用硬件与软件相结合的方法分析解决本专业领域问题的思维方式和初步能力。为以后跟踪计算机技术的新发展,进一步学习和应用相关方面的新知识、新技术打下必要基础。&&&&&&&&&&&&3.怎么学???&&&&&&&&课程以PC系列微机作为主要背景机,包括微机硬件组成及工作原理,微机接口技术,微机应用技术三大部分内容。主要包括微机系统概述、典型微处理器、指令系统、汇编语言程序设计、存储器系统、微机总线与输入/输出技术、中断系统、典型接口芯片及其应用等内容。强调与工业实际应用相结合,加强汇编语言程序设计和接口电路设计等部分的理论教学及实际操作,提高系统软硬件的设计能力。&&&&&&&&&&&&第一章&&&&微机原理基础知识&&&&&&&&&&&&本章提要&&&&&&&&微机概述计算机中的数和编码微处理器的典型结构&&&&&&&&&&&&概述——微机原理课程的内容、学习目的微机原理课程学习内容&&&&?是一门研究微型计算机的基本工作原理以及微型计算机接口技术(如中断控制接口、定时/计数控制接口、DMA控制接口、并行/串行通信接口、模拟接口等)的课程。&&&&&&&&冯·诺依曼体系结构1.能把需要的程序和数据送至计算机中。(输入)2.必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。(存储)3.能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。(运算)4.能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。(控制)5.能够按照要求将处理结果输出给用户。(输出)简单地讲,微型计算机系统的工作过程是取指令(代码)→分析指令(译码)→执行指令的不断循环的过程。&&&&&&&&7&&&&&&&&&&&&日世界第一台电子计算机问世1946年世界上第一台电子计算机由美国宾夕法尼亚大&&&&学研制成功。尽管它重达30吨,占地170平方米,耗电140千瓦,用了18800多个电子管,每秒钟仅能做5000次加法.这台计算机有五个基本部件:输入器、输出器、运算器、存储器和控制器,奠定了当代电子数字计算机体系结构的基础。&&&&&&&&&&&&概述——微型计算机的发展概况计算机的发展&&&&?电子管计算机?晶体管计算机?集成电路计算机?大规模集成电路计算机?人工智能计算机(尚在研制)&&&&1946年第一代电子计算机(ENIAC)在美国研制成功。使用了18800个电子管,重30吨,占地150平方米,耗电150千瓦,每秒完成5000次加法运算。&&&&&&&&9&&&&&&&&&&&&概述——微型计算机的发展概况计算机的发展&&&&1958年第二代晶体管计算机推出,用晶体管代替了电子管,大大降低了计算机的成本和体积,运算速度成百倍提高。&&&&&&&&10&&&&&&&&&&&&概述——微型计算机的发展概况计算机的发展&&&&1965年中小规模集成电路为主体的计算机问世,使计算机的体积进一步缩小,配上各类操作系统,计算机性能极大提高。&&&&&&&&11&&&&&&&&&&&&概述——微型计算机的发展概况计算机的发展&&&&1970年大规模集成电路(LSI)研制成功,计算机发展到第四代,微型计算机是第四代计算机的典型代表。1971年在美国硅谷第一块通用微处理器Intel4004诞生,从而开创了微型计算机的新时代。&&&&&&&&12&&&&&&&&&&&&代别&&&&&&&&起迄年份&&&&&&&&代表机器ENIACADVACUNIVAC-1IBM-704&&&&&&&&硬件&&&&逻辑元件主存储器水银延迟线、磁鼓、磁芯其他输入输出主要采用穿孔卡片软件应用领域&&&&&&&&第一代&&&&&&&&&&&&&&&&电子管&&&&&&&&机器语言、汇编语言&&&&&&&&科学计算&&&&&&&&第二代&&&&&&&&&&&&&&&&IBM7090ATLASIBM-360CDC6000PDP-11NOVA&&&&IBM4300VAX-11IBM-PC&&&&&&&&晶体管&&&&&&&&普遍采用磁芯&&&&&&&&外存开始采用磁带、磁盘&&&&&&&&高级语言、管理程序、监控程序、简单的操作系统&&&&多种功能较强的操作系统、会话式语言可视化操作系统、数据库、多媒体、网络软件&&&&&&&&科学计算、数据处理、事务管理&&&&&&&&第三代&&&&&&&&&&&&&&&&集电路&&&&&&&&成&&&&&&&&磁芯、半导体&&&&&&&&外存普遍采用磁带、磁盘各种专用外设,大容量磁盘、光盘等普遍使用&&&&&&&&实现标准化系列化,应用于各个领域&&&&&&&&第四代&&&&&&&&1970至今&&&&&&&&超大规模集成电路&&&&&&&&半导体&&&&&&&&广泛应用于所有领域&&&&&&&&&&&&微型计算机的发展&&&&&&&&第1代:4位和低档8位微机→8008第2代:中高档8位微机Z80、I8085、M6800,Apple-II微机第3代:16位微机→80286,IBMPC系列机第4代:32位微机8→Pentium→PentiumII/III/432位PC机、Macintosh机、PS/2机第5代:64位微机Itanium、64位RISC微处理器芯片微机服务器、工程工作站、图形工作站&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&微型计算机系统的构成&&&&&&&&显示器(输出设备)&&&&&&&&主机箱键盘(输入设备)鼠标(输入设备)&&&&&&&&20&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&&&&&微型计算机系统的构成——主机箱&&&&电源CPU内存扩展卡主板硬盘光驱&&&&&&&&21&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&&&&&微处理器及其组成&&&&微处理器(微处理机):由一片或几片大规模集成电路组成的中央处理器,一般也称CPU(CenterProcessUnit)。其内部通常包括算术逻辑部件,累加器和通用寄存器组,程序计数器,时序和控制逻辑部件,内部总线等等。&&&&&&&&22&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&&&&&各种CPU&&&&&&&&23&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能微型计算机及其组成&&&&微型计算机:是指由CPU、存储器、输入输出接口电路和系统总线构成的裸机。&&&&&&&&内部存贮器,按照读写方式的不同,分为ROM和RAM两种类型;输入/输出接口电路是外围设备与微型计算机之间的连接电路,在两者之间进行信息交换的过程中,起暂存、缓冲、类型变换及时序匹配的作用;总线是CPU与其它各功能部件之间进行信息传输的通道,按所传送信息的不同类型,总线可以分为数据总线DB、地址总线AB和控制总线CB三种类型。&&&&24&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&各种存储设备&&&&&&&&25&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&各种接口卡&&&&&&&&26&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&主板&&&&&&&&27&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&&&&&主板&&&&主板是机箱中最大的一块集成电路板,在它上面集成有CPU插座、内存插座、扩展卡插座、输入输出系统、总线系统、电源接口等。主板是一个母体,其他的部件或直接插接在主板上,或通过电缆电线连接在主机板上。总线:是连接多个功能部件或多个装置的一组公共信号线,接在系统中的不同位置。按所传送信息的不同类型,总线可以分为数据总线DB(DataBus)、地址总线AB(AddressBus)和控制总线CB(ControlBus)三种类型,通常称微型计算机采用三总线结构。地址总线(AB):是用来传送地址信息的信号线。地址总线的位数决定了CPU可以直接寻址的内存空间的大小。地址总是从CPU发出的,所以地址总线是单向的三态总线。单向指信息只能沿一个方向传送,三态指除了输出高、低电平状态外,还可以处于高阻抗状态(浮空状态)。数据总线(DB):数据总线是CPU用来传送数据信息的信号线。数据总线是双向三态总线,即数据既可以从CPU送到其它部件,也可以从其它部件传送给CPU,数据总线的位数和处理器的位数相对应。控制总线(CB):控制总线是用来传送控制信号的一组总线。这组信号线比较复杂,由它来实现CPU对外部功能部件(包括存储器和I/O接口)的控制及接收外部传送给CPU的状态信号,不同的微处理器采用不同的控制信号。控制总线有的为单向,有的为双向或三态,有的为非三态,取决于具体的信号线。&&&&&&&&29&&&&&&&&&&&&概述——微型计算机系统的基本组成和各部件功能&&&&&&&&微型计算机系统及其组成&&&&微型计算机系统:是指以微型计算机为主体,再配以相应的外围设备、电源、辅助电路和所需要的软件而构成的计算机系统。常用的外围设备有显示器、打印机、键盘等;系统软件一般包括操作系统、编译、编辑、汇编软件等。&&&&&&&&微处理器、微型计算机和微型计算机系统三者关系&&&&&&&&30&&&&&&&&&&&&微型计算机的特点&&&&&&&&?体积小、重量轻、耗电省?可靠性高?系统设计灵活、使用方便?价格低廉?维护方便&&&&&&&&&&&&微型计算机的分类&&&&&&&&?按微处理器的字长:可分为4位、8位、16位、32位、64位微处理器?按微型计算机的组装形式:可分为单片、单板、多板微型计算机等?按应用领域:可分为控制用、数据处理用微型计算机等?按微处理器的制造工艺:可分为MOS型器件和双极型器件两大类&&&&&&&&&&&&计算机的五大基本组成部件&&&&?运算器、控制器、存储器、输入/输出设备(接口)&&&&&&&&微机原理课程学习目的&&&&?通过该课程的学习,应能掌握微型计算机系统的硬件基本知识,具有一定的微机应用系统的系统分析能力,并且也为后继课程的学习,打下微型机系统硬件方面的基础知识。&&&&&&&&33&&&&&&&&&&&&微型计算机的组成系统总线BUS&&&&&&&&处理器子系统&&&&&&&&系统总线形成&&&&&&&&地址总线AB&&&&数据总线DB控制总线CB&&&&&&&&存储器&&&&&&&&I/O接口&&&&&&&&I/O设备&&&&图1.1微型计算机的系统组成&&&&&&&&1.微处理器2.存储器3.I/O设备和I/O接口4.系统总线&&&&&&&&&&&&各主要功能部件介绍1.中央处理单元&&&&&&&&中央处理单元CPU(ControlProcessingUnit)是微型计算机的核心部件,是包含有运算器、控制器、寄存器组以及总线接口等部件的一块大规模集成电路芯片,俗称微处理器。&&&&&&&&&&&&2.主存储器主存储器是微型计算机中存储程序、原始数据、中间结果和最终结果等各种信息的部件。按其功能和性能,可以分为:随机存储器RAM(RandomAccessMemory)只读存储器ROM(ReadOnlyMemory)&&&&&&&&&&&&3.系统总线系统总线是CPU与其他部件之间传送数据、地址和控制信息的公共通道。根据传送内容可分成以下3种:?数据总线DB(DataBus):用于CPU与主存储器、CPU与I/O接口之间传送数据。?地址总线AB(AddressBus):用于CPU访问主存储器和外部设备时,传送相关的地址。?控制总线CB(ControlBus):用于传送CPU对主存储器和外部设备的控制信号。&&&&&&&&&&&&4.输入输出接口电路输入/输出接口电路也称为I/O(Input/Output)电路,即通常所说的适配器、适配卡或接口卡。它是微型计算机外部设备交换信息的桥梁。5.主机板&&&&&&&&主机板也称为系统主板或简称主板。主机板上有CPU芯片、内存槽、扩展槽、各种跳线和一些辅助电路。&&&&&&&&&&&&6.外存储器分为软磁盘、硬磁盘、光盘存储器。&&&&&&&&磁盘存储器由磁盘、磁盘驱动器和驱动器接口电路组成,统称为磁盘机。&&&&光盘存储器是由光盘、光盘驱动器和接口电路组成。7.输入/输入设备计算机最常用的输入设备是键盘和鼠标。计算机最常用的输出设备是显示器和打印机。&&&&&&&&&&&&微型计算机的应用&&&&微型计算机按其复杂程度的不同,可适用于各种行业,&&&&&&&&(1)办公自动化:简称为OA(OfficeAutomation)。它是计算机、通信与自动化技术相结合的产物,也是当前最为广泛的一类应用。(2)生产自动化:包括计算机辅助设计、计算机辅助制造和计算机集成制造系统等,它们是计算机在现代生产领域特别是制造业中的典型应用,不仅提高了自动化水平,而且使传统的生产技术发生了革命性的变化。&&&&&&&&&&&&(3)数据库应用:数据库是在计算机存储设备中按照某种关联方式存放的一批数据。借助数据库管理系统DBMS,可对其中的数据实施控制、管理和使用。(4)网络应用:计算机网络就是利用通信设备和线路等与不同的计算机系统互连起来,并在网络软件支持下实现资源共享和传递信息。通常有局域网(LAN)、广域网(WAN)、城市网(CAN)和因特网(Internet)。&&&&&&&&&&&&(5)人工智能:人工智能研究方向中最具有代表性的两个领域是专家系统和机器人。(6)计算机仿真:计算机仿真是使用仿真软件在计算机上进行必要的模拟试验,从而大大减少投资、避免风险。&&&&&&&&(7)远程教育:远程教育是建立在互联网上的一种教学环境。它以现代化的信息技术为手段,以适合远程传输和交互式学习的教学资源为教材构成开放式教育网络。&&&&&&&&&&&&1.2计算机中数制和编码&&&&&&&&熟悉数制的基本概念和计算机中常用进位计数制掌握二、八、十、十六进制的表达和相互转换&&&&&&&&理解机器数和带符号数的原码、反码、补码表示&&&&掌握美国信息交换标准代码(ASCII码)和二—&&&&&&&&十进制编码——BCD码的表达及应用。&&&&熟悉微型计算机常用的汉字编码及其应用&&&&&&&&&&&&通常,计算机中的数据分为两类:?数:用来直接表示量的多少,有大小之分,能够进行加减等运算。?码:通常指代码或编码,在计算机中用来描述某种信息。&&&&&&&&&&&&数制的基本概念&&&&?1.数的表示?任何一种数制表示的数都可以写成按位权展开的多项式之和。?N=dn-1bn-1+dn-2bn-2+dn-3bn-3+……d-mb-m?式中:n——整数的总位数。?m——小数的总位数。?d下标——表示该位的数码。?b——表示进位制的基数。?b上标——表示该位的位权。&&&&&&&&&&&&2.计算机中常用的进位计数制&&&&计数制&&&&二进制&&&&八进制十进制十六进制&&&&&&&&基数&&&&2&&&&81016&&&&&&&&数&&&&&&&&码&&&&0、1&&&&&&&&进位关系&&&&逢二进一&&&&逢八进一逢十进一逢十六进一&&&&&&&&0、1、2、3、4、5、6、70、1、2、3、4、5、6、7、8、90、1、2、3、4、5、6、7、8、9A、B、C、D、E、F&&&&&&&&&&&&3.计数制的书写规则&&&&&&&&(1)在数字后面加写相应的英文字母作为标识。&&&&如:二进制数的100可写成100B十六进制数100可写成100H(2)在括号外面加数字下标。&&&&&&&&如:(1011)2表示二进制数的1011&&&&(2DF2)16表示十六进制数的2DF2&&&&&&&&&&&&2.1.2数制之间的转换&&&&(1)十进制整数转换为二进制整数采用基数2连续去除该十进制整数,直至商等于“0”为止,然后逆&&&&&&&&序排列余数。&&&&(2)十进制小数转化为二进制小数连续用基数2去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。(3)十进制整数转换为八进制整数或十六进制整数采用基数8或基数16连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。&&&&&&&&(4)十进制小数转换为八进制小数或十六进制小数&&&&连续用基数8或基数16去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。&&&&&&&&&&&&(5)二、八、十六进制数转换为十进制数&&&&用其各位所对应的系数,按“位权展开求和”的方法就可以得到。其基数分别为2、8、16。(6)二进制数转换为八进制数从小数点开始分别向左或向右,将每3位二进制数分成1组,不足3位数的补0,然后将每组用1位八进制数表示即可。(7)八进制数转换为二进制数&&&&&&&&将每位八进制数用3位二进制数表示即可。&&&&(8)二进制数转换为十六进制数从小数点开始分别向左或向右,将每4位二进制数分成1组,不足4位的补0,然后将每组用一位十六进制数表示即可。(9)十六进制数转换为二进制数将每位十六进制数用4位二进制数表示即可。&&&&&&&&&&&&【例2.1】将十进制整数(105)10转换为二进制整数,采用“除2倒取余”的方法,过程如下:&&&&&&&&2||262|132|62|32|10&&&&&&&&余数为1余数为0余数为0余数为1余数为0余数为1余数为1&&&&&&&&所以,(105)10=(&&&&&&&&&&&&【例2.2】将十进制小数(0.8125)10转换为二进制小数,采用“乘2顺取整”的方法,过程如下:0..=1.250.25×2=0.5取整数位1取整数位1取整数位0&&&&&&&&0.5×2=1.0&&&&&&&&取整数位1&&&&&&&&所以,(0.8125)10=(0.1101)2如果出现乘积的小数部分一直不为“0”,则可以根据精度的要求截取一定的位数即可。&&&&&&&&&&&&【例2.3】将十进制整数(2347)10转换为十六进制整数,采用“除16倒取余”的方法,过程如下:16|616|9余数为11(十六进制数为B)余数为2&&&&&&&&0&&&&&&&&余数为9&&&&&&&&所以,(2347)10=(92B)16&&&&&&&&&&&&计算机中数值数据的表示&&&&基本概念&&&&在计算机内部表示二进制数的方法称为数值编码,把一个数及其符号在机器中的表示加以数值化,称为机器数。机器数所代表的数称&&&&&&&&为数的真值。&&&&表示一个机器数,应考虑以下三个因素:1.机器数的范围&&&&&&&&字长为8位,无符号整数的最大值是()B=(255)D,&&&&此时机器数的范围是0~255。字长为16位,无符号整数的最大值是&&&&&&&&(1111)B=(FFFF)H=(65535)D&&&&此时机器数的范围是0~65535。&&&&&&&&&&&&2.机器数的符号&&&&在算术运算中,数据是有正有负的,将这类数据称为带符号数。对于不带符号数,机器数的各位都是数的有效值;而对带符号数,机器数最高位为0表示正数,为1表示负数。所以,对于带符号数来说,数的符号位也就数字化了。也就是说,带符号数的机器数由符号位和数值两部分组成。&&&&&&&&&&&&计算机中带符号数的表示&&&&1.原码表示方法:在数值前面直接加上以为符号位的表示法称为原码表示法正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。【例2.13】当机器字长为8位二进制数时:X=+1011011[X]原码=Y=+1011011[Y]原码=[+1]原码=[-1]原码=[+127]原码=[-127]原码=&&&&&&&&&&&&原码表示的整数范围是:-(2n-1-1)~+(2n-1-1),其中n为机器字长。则:8位二进制原码表示的整数范围是:-127~+12716位二进制原码表示的整数范围是:-32767~+32767&&&&&&&&&&&&2.反码&&&&对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。【例2.14】当机器字长为8位二进制数时:X=+1011011[X]原码=[X]反码=&&&&&&&&Y=-1011011&&&&&&&&[Y]原码=&&&&&&&&[Y]反码=&&&&&&&&[+1]反码=[+127]反码=&&&&&&&&[-1]反码=[-127]反码=&&&&&&&&&&&&负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。反码表示的整数范围与原码相同。&&&&&&&&&&&&3.补码正数的补码与其原码相同,负数的补码为其反码在最低位加1。【例2.15】(1)X=+)Y=-)根据定义有:[X]原码=&&&&&&&&[X]补码=&&&&(2)根据定义有:[Y]原码=[Y]反码=[Y]补码=&&&&&&&&&&&&补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。则:8位二进制补码表示的整数范围是-128~+12716位二进制补码表示的整数范围是-32768~+32767当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。&&&&&&&&&&&&原码、反码、补码之间转换1.已知[X]原,求[X]补符号位不变,将数值部分逐位取反,末位加1【例】已知[X]原码=B求[X]补码[X]原码=B[X]反=000001B[X]补码=B&&&&&&&&&&&&2.已知[X]补,求[X]原一个数的补码的补码就是该数的原码[[X]补]补【例】已知[X]补码=B求[X]原码[X]补码=B[X]补反=000001B[X]原码=B&&&&&&&&&&&&3.已知[X]补,求[-X]补将[X]补连同符号位一起逐位变反,然后在末位加1。【例】已知[X]补码=B求[-X]补码[X]补码=B[X]全部取反=000001B[-X]补码=B&&&&&&&&&&&&4.补码与真值之间的转换&&&&正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末位加1,即可得到该负数补码对应的真值的绝对值。【例2.16】[X]补码=B,[X]补码=B,分别求其真值X。(1)[X]补码代表的数是正数,其真值:X=+1011001B=+(1×26+1×24+1×23+1×20)=+(64+16+8+1)=+(89)D(2)[X]补码代表的数是负数,则真值:X=-([1011001]求反+1)B=-()B=-(0100111)B=-(1×25+1×22+1×21+1×20)=-(32+4+2+1)=-(39)D&&&&&&&&&&&&字符编码&&&&美国信息交换标准代码(ASCII码)&&&&ASCII(AmericanStandardCodeforInformationInterchange)码是美国信息交换标准代码的简称,用于给西文字符编码;&&&&&&&&包括英文字母的大小写、数字、专用字符、控制字符等;这种编码由7&&&&位二进制数组合而成,可以表示128种字符;在ASCII码中,按其作用可分为:&&&&&&&&?34个控制字符;&&&&?10个阿拉伯数字?52个英文大小写字母;&&&&&&&&?32个专用符号&&&&&&&&&&&&二—十进制编码——BCD码&&&&BCD(Binary-CodedDecimal)码又称为“二—十进制编码”,专门解决用二进制数表示十进数的问题。最常用的是8421编码,其方法是用4位二进制数表示1位十进制数,自左至右每一位对应的位权是8、4、2、1。&&&&&&&&1.压缩BCD码&&&&每一位数采用4位二进制数来表示,即一个字节表示2位十进制数。例如:二进制数B,采用压缩BCD码表示为十进制数89D。2.非压缩BCD码&&&&&&&&每一位数采用8位二进制数来表示,即一个字节表示1位十进制数。而且只用每个字节的低4位来表示0~9,高4位为0。&&&&例如:十进制数89D,采用非压缩BCD码表示为二进制数是:1001B&&&&&&&&&&&&汉字编码&&&&计算机处理汉字信息的前提条件是对每个汉字进行编码,这些编码统称为汉字代码。在汉字信息处理系统中,对于不同部位,存在着多种不同的编码方式。比如,从键盘输入汉字使用的汉字代码(外码)就与计算机内部对汉字信息进行存储、传送、加工所使用的代码(内码)不同,但它们都是为系统各相关部分标识汉字使用的。系统工作时,汉字信息在系统的各部分之间传送,它到达某个部分就要用该部分所规定的汉字代码表示汉字。因此,汉字信息在系统内传送的过程就是汉字代码转换的过程。这些代码构成该系统的代码体系,汉字代码的转换和处理是由相应的程序来完成的。&&&&&&&&&&&&汉字代码的表示方法&&&&1.汉字输入码汉字输入码是为用户由计算机外部输入汉字而编制的汉字编码,又称为汉字外部码,简称外码。使用较多的有以下4类:(1)顺序码:如区位码、电报码等。(2)音码:如拼音码、自然码等。(3)形码:如五笔字型、大众码等。(4)音形码:如双拼码、五十字元等。2.汉字机内码汉字机内码是汉字处理系统内部存储、处理汉字而使用的编码,简称内码。3.汉字字形码汉字字形码是表示汉字字形信息的编码。4.汉字交换码汉字交换码是汉字信息处理系统之间或通信系统之间传输信息时,对每个汉字所规定的统一编码。&&&&&&&&&&&&几种常用的汉字编码&&&&1.国标码即“中华人民共和国国家标准信息交换汉字编码”(代号GB2312-80)。共收录汉字和图形符号7445个。其中:一级常用汉字3755个;二级非常用汉字和偏旁部首3008个;图形符号682个。2.区位码&&&&&&&&将GB2312-80全部字符集组成一个94×94的方阵,每一行称为一个“区”,编号从01~94;每一列称为一个“位”,编号也是从01~94。这样,每一个字符便具有一个区码和一个位码,将区码置前,位码置后,组合在一起就成为区位码。&&&&&&&&&&&&3&&&&&&&&.BIG-5码BIG-5码是我国台湾地区编制和使用的一套中文内码。它是为了解决各生产厂家中文内码不统一的问题而设计出的一套编码,并采用5大套装软件的“五大”命名为“BIG-5”码,俗称“大五码”。4.GB13000码国际标准化组织(ISO)于1993年公布了“通用多八位编码字符集”的国际标准(ISO/IEC10646)。我国发布了与其一致的国家标准,即GB13000码。&&&&&&&&&&&&存储容量的表达&&&&&&&&比特b(二进制1位)字节B(二进制8位)1KB=210B=1024B1MB=220B、1GB=230B&&&&&&&&&&&&微处理器微型计算机是由具有不同功能的一些部件组成的,包含运算器和控制器电路的大规模集成电路,称为“微处理器”,又称“中央处理器(CPU)”,其职能是执行算术/逻辑运算,并负责控制整个计算机系统,使之能自动协调地完成各种操作。&&&&&&&&CPU的发展过程及其结构&&&&?从到8086?从?8及80486微处理器&&&&&&&&&&&&指令寄存&&&&&&&&指令译码&&&&&&&&时序和控制逻辑地址寄存器组地址总线控制数据总线控制&&&&&&&&控制总线&&&&&&&&通用寄存器组&&&&&&&&地址总线&&&&&&&&内部数据总线&&&&&&&&数据总线&&&&&&&&暂存器&&&&&&&&累加器&&&&&&&&标志寄存器&&&&&&&&ALU&&&&&&&&1.算术逻辑单元(运算器)2.寄存器组3.指令处理单元(控制器)&&&&&&&&&&&&Intel的功能结构&&&&AXBXCXDXAHBHCHDHSPBPSIDICSDSSSESALU数据总线(16位)IP内部通信寄存器ALBLCLDL地址加法器∑&&&&&&&&暂存器&&&&&&&&总线控制逻辑&&&&&&&&8086&&&&&&&&总线&&&&&&&&ALU&&&&&&&&指令队列控制电路123456&&&&&&&&状态标志寄存器执行部件EU总线接口部件BIU&&&&&&&&&&&&8086CPU内部结构从功能上分两个部分1.总线接口单元BIU管理8088与系统总线的接口负责CPU对存储器和外设进行访问&&&&总线接口部件BIU内部设有四个16位段地址寄存器:代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES,一个16位指令指针寄存器IP,一个6字节指令队列缓冲器,20位地址加法器和总线控制电路。主要功能:根据执行部件EU的请求,负责完成CPU与存储器或I/O设备之间的数据传送。&&&&&&&&&&&&2.执行单元EU&&&&负责指令的译码、执行和数据的运算执行部件中包含一个16位的算术逻辑单元(ALU),8个16位的通用寄存器,一个16位的状态标志寄存器,一个数据暂存寄存器和执行部件的控制电路。功能:从BIU的指令队列中取出指令代码,经指令译码器译码后执行指令所规定的全部功能。执行指令所得结果或执行指令所需的数据,都由EU向BIU发出命令,对存储器或I/O接口进行读/写操作。&&&&&&&&&&&&8086CPU内部寄存器结构&&&&&&&&AHBHCHDH&&&&SPBPSIDIIPFLAGS&&&&&&&&ALBLCLDL&&&&&&&&累加器基址寄存器计数寄存器数据寄存器堆栈指针寄存器基址指针寄存器源变址寄存器目的变址寄存器指令指针寄存器标志寄存器&&&&&&&&数据寄存器通用寄存器&&&&&&&&地址指针和变址寄存器&&&&&&&&控制寄存器&&&&&&&&CSDSSSES&&&&&&&&代码段寄存器数据段寄存器堆栈段寄存器附加段寄存器&&&&&&&&段寄存器&&&&&&&&&&&&8086CPU中可供编程使用的有14个16位寄存器,按其用途可分为3类:通用寄存器、段寄存器、指针和标志寄器。&&&&&&&&的寄存器组有&&&&8个通用寄存器4个段寄存器1个标志寄存器1个指令指针寄存器&&&&&&&&&&&&1.通用寄存器&&&&&&&&8086有8个通用的16位寄存器&&&&(1)数据寄存器:AXBXCXDX(2)变址寄存器:SIDI(3)指针寄存器:BPSP&&&&&&&&4个数据寄存器还可以分成高8位和低8位两个独立的寄存器,这样又形成8个通用的8位寄存器&&&&AX:AHALCX:CHCLBX:BHBLDX:DHDL&&&&&&&&&&&&(1)数据寄存器&&&&&&&&AX称为累加器(Accumulator)&&&&使用频度最高。用于算术、逻辑运算以及与外设传送信息等&&&&&&&&BX称为基址寄存器(BaseaddressRegister)&&&&常用做存放存储器地址&&&&&&&&CX称为计数器(Counter)&&&&作为循环和串操作等指令中的隐含计数器&&&&&&&&DX称为数据寄存器(Dataregister)&&&&常用来存放双字长数据的高16位,或存放外设端口地址&&&&&&&&&&&&(2)变址寄存器&&&&16位变址寄存器SI和DI常用于存储器变址寻址方式时提供地址&&&&SI是源地址寄存器(SourceIndex)DI是目的地址寄存器(DestinationIndex)&&&&&&&&在串操作类指令中,SI、DI还有较特殊的用法&&&&&&&&&&&&指针寄存器用于寻址内存堆栈内的数据&&&&SP为堆栈指针寄存器(StackPointer),指示堆栈段栈顶的位置(偏移地址)BP为基址指针寄存器(BasePointer),表示数据在堆栈段中的基地址&&&&&&&&SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址&&&&&&&&&&&&堆栈(Stack)是主存中一个特殊的区域,采用“先进后出”或“后进先出”存取操作方式、而不是随机存取方式。用形成的微机系统中,堆栈区域被称为堆栈段&&&&&&&&&&&&2.段寄存器&&&&8086CPU共有4个16位的段寄存器,用来存放每一个逻辑段的段起始地址。&&&&&&&&(1)代码段寄存器CS&&&&(3)堆栈段寄存器SS&&&&&&&&(2)数据段寄存器DS&&&&(4)附加段寄存器ES&&&&&&&&&&&&3.控制寄存器组&&&&IP(InstructionPointer)为指令指针寄存器,指示主存储器指令的位置随着指令的执行,IP将自动修改以指示下一条指令所在的存储器位置IP寄存器是一个专用寄存器IP寄存器与CS段寄存器联合使用以确定下一条指令的存储单元地址&&&&&&&&&&&&标志寄存器-分类&&&&状态标志--用来记录程序运行结果的状态信息许多指令的执行都将相应地设置它CFZFSFPFOFAF&&&&&&&&控制标志--可由程序根据需要用指令设置,用于控制处理器执行指令的方式DFIFTF标志寄存器FLAGS&&&&543210&&&&&&&&OF&&&&&&&&DIFF&&&&&&&&TSFZFF&&&&&&&&AF&&&&&&&&PF&&&&&&&&CF&&&&&&&&&&&&FLAGS是一个16位的寄存器,共9个标志,其中6个用作状态标志,3个用作控制标志。(1)状态标志:状态标志用来反映EU执行算术和逻辑运算&&&&&&&&以后的结果特征。&&&&CF:进位标志;PF:奇偶标志;AF:辅助进位标志ZF:零标志;SF:符号标志;OF:溢出标志(2)控制标志:控制标志是用来控制CPU的工作方式或工作状态。&&&&&&&&TF:陷阱标志或单步操作标志:IF:中断允许标志&&&&DF:方向标志&&&&&&&&&&&&什么是溢出?&&&&&&&&处理器内部以补码表示有符号数8位表达的整数范围是:+127~128?B6H=B,最高位为1-,16位表达的范围是:+32767~-32768作为有符号数是负数如果运算结果超出这个范围,就产生了溢出?对有溢出,说明有符号数的运算结果不正确B6H求反加1等于:&&&&&&&&3AH+7CH=B6H,就是58+124=182,已经超出-128~+127范围,产生溢出,故OF=1;补码B6H表达真值是-74,显然运算结果也不正确&&&&&&&&B+1=B=4AH=74?所以,B6H表达有符号数的真值为-74&&&&&&&&&&&&溢出和进位的区别&&&&溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确&&&&&&&&&&&&溢出的判断&&&&判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确其他情况下,则不会产生溢出例1:3AH+7CH=B6H溢出&&&&&&&&&&&&存储器的分段管理&&&&&&&&8086CPU有20条地址线&&&&最大可寻址空间为220=1MB物理地址范围从00000H~FFFFFH&&&&&&&&8086CPU将1MB空间分成许多逻辑段(Segment)&&&&每个段最大限制为64KB段地址的低4位为0000B&&&&&&&&这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址&&&&&&&&&&&&物理地址和逻辑地址&&&&&&&&8086CPU存储系统中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH分段后在用户编程时,采用逻辑地址,形式为段基地址:段内偏移地址&&&&分隔符&&&&物理地址逻辑地址H:100H&&&&&&&&&&&&第2章:逻辑地址&&&&&&&&段地址说明逻辑段在主存中的起始位置8088规定段地址必须是模16地址:xxxxH省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址&&&&&&&&偏移地址说明主存单元距离段起始位置的偏移量每段不超过64KB,偏移地址也可用16位数据表示&&&&&&&&&&&&物理地址和逻辑地址的转换&&&&&&&&将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址一个物理地址可以有多个逻辑地址&&&&逻辑地址80:F00物理地址H&&&&段地址左移4位加上偏移地址得到物理地址&&&&&&&&14600H+100H14700H&&&&&&&&13800H+F00H14700H&&&&&&&&&&&&3.段寄存器&&&&&&&&位段寄存器&&&&CS(代码段)指明代码段的起始地址SS(堆栈段)指明堆栈段的起始地址DS(数据段)指明数据段的起始地址ES(附加段)指明附加段的起始地址&&&&&&&&每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途&&&&&&&&&&&&代码段寄存器CS(CodeSegment)&&&&代码段用来存放程序的指令序列&&&&代码段寄存器CS存放代码段的段地址指令指针寄存器IP指示下条指令的偏移地址&&&&&&&&处理器利用CS:IP取得下一条要执行的指令&&&&&&&&&&&&堆栈段寄存器SS(StackSegment)&&&&堆栈段确定堆栈所在的主存区域&&&&堆栈段寄存器SS存放堆栈段的段地址堆栈指针寄存器SP指示堆栈栈顶的偏移地址&&&&&&&&处理器利用SS:SP操作堆栈顶的数据&&&&&&&&&&&&数据段寄存器DS(DataSegment)&&&&数据段存放运行程序所用的数据&&&&数据段寄存器DS存放数据段的段地址各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址&&&&&&&&处理器利用DS:EA存取数据段中的数据&&&&&&&&&&&&附加段寄存器ES(ExtraSegment)&&&&附加段是附加的数据段,也保存数据:&&&&附加段寄存器ES存放附加段的段地址各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址&&&&&&&&处理器利用ES:EA存取附加段中的数据串操作指令将附加段作为其目的操作数的存放区域&&&&&&&&&&&&《微机原理与接口技术》第二章指令系统及汇编语言基础&&&&&&&&&&&&2.1概述&&&&&&&&指令:计算机执行各种操作的命令。&&&&&&&&操作码&&&&&&&&操作数&&&&&&&&指令由操作码和操作数两部分组成&&&&&&&&操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分操作数是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数&&&&&&&&&&&&指令的助记符格式&&&&&&&&操作码&&&&&&&&操作数1,操作数2&&&&&&&&;注释&&&&&&&&操作数2,常被称为源操作数src,它表示参与指令操作的一个对象操作数1,成被称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果分号后的内容是对指令的解释&&&&&&&&&&&&指令的操作码和操作数&&&&&&&&每种指令的操作码:&&&&用一个助记符表示(指令功能的英文缩写)对应着机器指令的一个或多个二进制编码&&&&&&&&指令中的操作数:&&&&可以是一个具体的数值可以是存放数据的寄存器或指明数据在主存位置的存储器地址&&&&&&&&&&&&2.2.1操作数的寻址方式&&&&&&&&指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址把寻找操作数的方式叫做(操作数)寻址方式理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式&&&&一方面,会影响处理器执行指令的速度和效率另一方面,对程序设计也很重要&&&&&&&&&&&&1.立即数寻址方式&&&&&&&&指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm可以是8位数值i8(00H~FFH)也可以是16位数值i16(0000H~FFFFH)立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现&&&&&&&&MOVAX,0102H&&&&&&&&;AX←0102H&&&&演示&&&&&&&&&&&&2.寄存器寻址方式&&&&&&&&操作数存放在CPU的内部寄存器reg中:&&&&8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ES&&&&&&&&寄存器名表示其内容(操作数)&&&&&&&&MOVAX,BX&&&&&&&&;AX←BX&&&&&&&&演示&&&&&&&&&&&&2.2.2存储器寻址方式&&&&&&&&操作数在主存储器中,用主存地址表示程序设计时,8086采用逻辑地址表示主存地址&&&&段地址在默认的或用段超越前缀指定的段寄存器中指令中只需给出操作数的偏移地址(有效地址EA)&&&&&&&&8086设计了多种存储器寻址方式&&&&1、直接寻址方式2、寄存器间接寻址方式3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式&&&&&&&&&&&&1.直接寻址方式&&&&&&&&直接寻址方式的有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越前缀改变用中括号包含有效地址,表达存储单元的内容&&&&&&&&MOVAX,[2000H]&&&&&&&&;AX←DS:[2000H]&&&&演示&&&&&&&&MOVAX,ES:[2000H];AX←ES:[2000H]&&&&&&&&&&&&2.寄存器间接寻址方式&&&&&&&&有效地址存放在基址寄存器BX或变址寄存器SI、DI中默认的段地址在DS段寄存器,可使用段超越前缀改变&&&&MOVAX,[BX];AX←DS:[BX]&&&&演示&&&&&&&&&&&&3.寄存器相对寻址方式&&&&&&&&有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址=BX/BP/SI/DI+8/16位位移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变&&&&&&&&MOVAX,[SI+06H]MOVAX,06H[SI]&&&&&&&&;AX←DS:[SI+06H]&&&&演示&&&&&&&&;AX←DS:[SI+06H]&&&&&&&&&&&&4.基址变址寻址方式&&&&&&&&有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址=BX/BP+SI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变&&&&&&&&MOVAX,[BX+SI]MOVAX,[BX][SI]&&&&&&&&;AX←DS:[BX+SI]&&&&演示&&&&&&&&;AX←DS:[BX+SI]&&&&&&&&&&&&5.相对基址变址寻址方式&&&&&&&&有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址=BX/BP+SI/DI+8/16位位移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变&&&&&&&&MOVAX,[BX+DI+6];AX←DS:[BX+DI+6]&&&&演示&&&&&&&&MOVAX,6[BX+DI]&&&&&&&&MOVAX,6[BX][DI]&&&&&&&&&&&&2.2指令系统&&&&&&&&指令主要分为以下六种:&&&&&&&&数据传送指令算术运算指令位操作指令串操作指令程序控制指令处理器指令&&&&&&&&&&&&一、数据传送指令&&&&数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位&&&&重点掌握&&&&MOVXCHGXLATPUSHPOPLEA&&&&&&&&&&&&1.通用数据传送指令&&&&&&&&提供方便灵活的通用传送操作有3条指令MOVXCHGXLAT&&&&&&&&&&&&1.1传送指令mov&&&&&&&&把一个字节或字的操作数从源地址传送至目的地址&&&&MOVreg/mem,imm;立即数送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存&&&&&&&&&&&&MOV指令--立即数传送&&&&&&&&movcl,4;cl←4,字节传送movdx,0ffh;dx←00ffh,字传送movsi,200h;si←0200h,字传送movbvar,0ah;字节传送;假设bvar是一个字节变量,定义如下:bvardb0movwvar,0bh;字传送;假设wvar是一个字变量,定义如下:wvardw0&&&&以字母开头的常数要有前导0&&&&&&&&明确指令是字节操作还是字操作&&&&&&&&&&&&MOV指令--寄存器传送&&&&&&&&movah,almovbvar,chmovax,bxmovds,axmov[bx],al&&&&&&&&;ah←al,字节传送;bvar←ch,字节传送;ax←bx,字传送;ds←ax,字传送;[bx]←al,字节传送&&&&&&&&寄存器具有明确的字节和字类型&&&&&&&&&&&&MOV指令--存储器传送&&&&&&&&moval,[bx]movdx,[bp]movdx,[bp+4]moves,[si]&&&&&&&&;al←ds:[bx];dx←ss:[bp];dx←ss:[bp];es←ds:[si]&&&&&&&&不存在存储器向存储器的传送指令&&&&&&&&&&&&MOV指令--段寄存器传送&&&&&&&&mov[si],dsmovax,dsmoves,ax&&&&&&&&;ax←ds;es←ax←ds&&&&&&&&&&&&MOV指令传送功能图解立即数存储器通用寄存器AXBXCXDXBPSPSIDIMOV指令也并非任意传送!段寄存器CSDSESSS&&&&&&&&&&&&对MOV指令有以下几条具体规定,其中有些规定对其它指令也同样有效。&&&&&&&&1)、两个操作数的数据类型要相同,要同为8位、16位或32位;如:MOVBL,AX等是不正确的;2)、两个操作数不能同时为段寄存器,如:MOVES,DS等;3)、代码段寄存器CS不能为目的操作数,但可作为源操作数,如:指令MOVCS,AX等不正确,但指令MOVAX,CS等是正确的;&&&&&&&&&&&&4)、立即数不能直接传给段寄存器,如:MOVDS,100H等;5)、立即数不能作为目的操作数,如:MOV100H,AX等;6)、指令指针IP,不能作为MOV指令的操作数;7)、两个操作数不能同时为存储单元,如:MOVVARA,VARB等,其中VARA和VARB是同数据类型的内存变量&&&&&&&&&&&&非法指令--两个操作数类型不一致&&&&?在绝大多数双操作数指令中,目的操作数和源操&&&&&&&&作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令MOVAL,050AH;非法指令,修正:;movax,050ahMOVSI,DL;非法指令,修正:;movdh,0;movsi,dx&&&&&&&&&&&&非法指令--无法确定是字节量还是字量操作&&&&&&&&?当无法通过任一个操作数确定是操作类型时,需&&&&&&&&要利用汇编语言的操作符显式指明MOV[BX+SI],255;非法指令,修正:&&&&&&&&;movbyteptr[bx+si],255;byteptr说明是字节操作;movwordptr[bx+si],255;wordptr说明是字操作&&&&&&&&&&&&非法指令--两个操作数都是存储器&&&&?8088指令系统除串操作指令外,不允许两个操作&&&&&&&&数都是存储单元(存储器操作数)MOVbuf2,buf1;非法指令,修正:;假设buf2和buf1是两个字变量;movax,buf1;movbuf2,ax;假设buf2和buf1是两个字节变量;moval,buf1;movbuf2,al&&&&&&&&&&&&非法指令--段寄存器的操作有一些限制&&&&?8088指令系统中,能直接对段寄存器操作的指令&&&&&&&&只有MOV等个别传送指令,并且不灵活MOVDS,ES;非法指令,修正:;movax,es;movds,axMOVDS,100H;非法指令,修正:;movax,100h;movds,axMOVCS,[SI];非法指令;指令存在,但不能执行&&&&&&&&&&&&1.2交换指令XCHG(exchange)&&&&&&&&交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同。其指令格式如下:XCHGReg/Mem,Reg/Mem&&&&&&&&该指令的功能和MOV指令不同,后者是一个操作数的内容被修改,而前者是两个操作数都会发生改变。寄存器不能是段寄存器,两个操作数也不能同时为内存变量。&&&&&&&&&&&&例.数据交换&&&&&&&&movax,1199h;ax=1199hxchgah,al;ax=9911h;等同于xchgal,ahmovwvar,5566h;wvar是一个字量变量xchgax,wvar;ax=5566h,wvar=9911h&&&&&&&&&&&&2.3换码指令XLAT(translate)&&&&将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLAT换码指令执行前:&&&&在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量&&&&&&&&;al←ds:[bx+al]&&&&&&&&换码指令执行后:&&&&将AL寄存器的内容转换为目标代码&&&&&&&&&&&&2.4堆栈操作指令&&&&&&&&堆栈是一个“后进先出”(或说“先进后出”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP&&&&&&&&&&&&进栈指令PUSH&&&&&&&&进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部&&&&PUSHReg/Mem;SP←SP-2;SS:[SP]←Reg/Mem&&&&&&&&&&&&出栈指令POP&&&&&&&&出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2&&&&POPReg/Mem;Reg/Mem←SS:[SP];SP←SP+2&&&&&&&&&&&&堆栈操作的特点&&&&&&&&?堆栈操作的单位是字,进栈和出栈只对字量?字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节?堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据?堆栈段是程序中不可或缺的一个内存区,常用来&&&&?临时存放数据?传递参数?保存和恢复寄存器&&&&&&&&&&&&1.4有效地址传送指令LEA&&&&将存储器操作数的有效地址送至指定的16位通用寄存器&&&&&&&&LEAr16,mem;r16←mem的有效地址EA&&&&&&&&&&&&例.有效地址的获取movbx,400hmovsi,3chleabx,[bx+si+0f62h];BX←400H+3CH+0F62H=139EH&&&&&&&&&&&&地址传送与内容传送&&&&wvardw4142h;假设偏移地址为04H…movax,wvar;内容传送:AX=4142Hleasi,wvar;地址传送:SI=0004H;等同于leasi,[0004h]&&&&&&&&&&&&1.5取段寄存器指令LES、LDS&&&&指令格式:LDS/LESReg,Mem&&&&&&&&若Reg是16位寄存器,那么,Mem必须是32位指针;其低16位给指令中指定的寄存器,高16位给指令中的段寄存器。&&&&&&&&&&&&例如:…POINTERDDH…LDSBX,POINTER…指令的执行结果如图5.5所示。各寄存器的内容分别为:(BX)=5678H,(DS)=1234H。&&&&&&&&&&&&1.6输入输出指令&&&&1.IN输入指令指令格INAL,端口地址或INAX,端口地址式:&&&&&&&&INAL,DX;端口地址存放在DX中或INAX,DX&&&&&&&&&&&&指令功能:从8位端口输入一个字节到AL端口,或从16位端口读取一个字到AX寄存器。16位端口由两个连续的8位端口组成,从16位端口输入时,先将给定端口中的字节送进AL,再把端口地址加1,然后将该端口中的字节读入AH。&&&&&&&&&&&&IN指令有两种格式。第一种格式,端口地址(00~FFH)直接包含在IN指令里,共允许寻址256个端口。由于8086CPU可以直接访问地址为0000~FFFFH的64k个I/O端口,当端口地址号大于FFH时,必须用第二种寻址方式,即先将端口号送入DX寄存器,再执行输入操作。&&&&&&&&&&&&例INAL,0F1H;AL从F1H端口读入一个字节INAX,80H;AL80H口的内容&&&&AH80H口的内容&&&&&&&&MOVDX,310H;端口地址310H先送入DX中INAL,DX;AL310H端口的内容&&&&&&&&&&&&2、OUT输出指令指令格OUT端口地址,AL或OUT端口地址,AXOUTDX,AL或OUTDX,AX&&&&&&&&式&&&&&&&&:&&&&&&&&;DX=端口地址&&&&&&&&&&&&指令功能:将AL中的一个字节写到一个8位的端口,或把AX中的一个字写到一个16位的端口。同样,对16位端口进行输出操作时,也是对两个连续的8位端口进行输出操作。&&&&&&&&&&&&例OUT85H,AL;85H端口AL内容MOVDX,0FF4HOUTDX,AL;FF4H端口AL内容MOVDX,300H;DX指向300HOUTDX,AX;300H端口AL内容301H端口AH内容&&&&&&&&&&&&1.7取标志位操作指令&&&&&&&&LAHF(LoadAHfromFlags):AH←Flags的低8位SAHF(StoreAHinFlags):Flags的低8位←AH&&&&&&&&&&&&1.8标志位堆栈操作指令&&&&&&&&PUSHF/PUSHFD(PushFlagsontoStack):把16位/32位标志寄存器进栈;POPF/POPFD(PopFlagsoffStack):把16位/32位标志寄存器出栈;&&&&&&&&&&&&2.算术运算指令&&&&&&&&算术运算类指令用来执行二进制的算术运算:加减乘除。这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志重点掌握&&&&加法指令:ADD、ADC、INC减法指令:SUB、SBB、DEC、CMP、NEG&&&&&&&&&&&&2.1加法和减法指令&&&&&&&&加法指令:ADD,ADC和INC减法指令:SUB,SBB,DEC,NEG和CMP他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位操作数组合:&&&&运算指令助记符reg,imm/reg/mem运算指令助记符mem,imm/reg&&&&&&&&&&&&1.加和减指令&&&&&&&&ADDdest,src;加法:dest←dest+src&&&&;ADD指令使目的操作数加上源操作数,和的结果送到目的操作数&&&&&&&&SUBdest,src;减法:dest←dest-src&&&&;SUB指令使目的操作数减去源操作数,差的结果送到目的操作数受影响的标志位:AF、CF、OF、PF、SF和ZF&&&&&&&&&&&&例.加法&&&&&&&&movax,7348h;AX=7348Haddal,27h;AL=48H+27H=6FH,AX=736FH;OF=0,SF=0,ZF=0,PF=1,CF=0addax,3fffh;AX=736FH+3FFFH=B36EH;OF=1,SF=1,ZF=0,PF=0,CF=0&&&&&&&&&&&&例.无符号双字加法&&&&&&&&movax,7856hmovdx,8234haddax,8998hadcdx,1234h&&&&&&&&;AX=7856H;DX=8234H;AX=01EEH,CF=1;DX=9469H,CF=0&&&&&&&&&&&&2.比较指令CMP(compare)&&&&&&&&CMPdest,src&&&&;做减法运算:dest-src差值不回送目的操作数&&&&&&&&;CMP指令将目的操作数减去源操作数,但&&&&&&&&比较指令通过减法运算影响状态标志,用于比较两个操作数的大小关系&&&&cmpax,bxcmpal,100&&&&&&&&&&&&3.增量和减量指令&&&&&&&&加1指令INC(Incrementby1Instruction)指令的格式:INCReg/Mem;reg/mem←reg/mem+1受影响的标志位:AF、OF、PF、SF和ZF,不影响CF指令的功能是把操作数的值加1。&&&&&&&&&&&&减1指令DEC(Decrementby1Instruction)指令的格式:DECReg/Mem;reg/mem←reg/mem-1受影响的标志位:AF、OF、PF、SF和ZF,不影响CF指令的功能是把操作数的值减去1。&&&&&&&&&&&&4.求补指令NEG(negtive)&&&&&&&&NEGreg/mem;reg/mem←0-reg/memNEG指令对操作数执行求补运算,即用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEG指令也是一个单操作数指令&&&&&&&&&&&&例.求补运算&&&&&&&&movax,0ff64hnegal;AL=0-64H=9CH,AX=FF9CH;OF=0SF=1,ZF=0,PF=1,CF=1&&&&&&&&&&&&5.符号扩展指令&&&&&&&&符号扩展是指用一个操作数的符号位(最高位)形成另一个操作数,后一个操作数的高位是全0(正数)或全1(负数)符号扩展虽然使数据位数加长,但数据大小并没有改变,扩展的高部分仅是低部分的符号扩展符号扩展指令有两条,用来将字节转换为字,字转换为双字CBW;AL符号扩展成AXCWD;AX符号扩展成DX&&&&&&&&&&&&字节转换为字指令CBW&&&&&&&&指令的格式:CBW该指令的隐含操作数为AH和AL。其功能是用AL的符号位去填充AH,即:当AL为正数,则AH=0,否则,AH=0FFH。指令的执行不影响任何标志位。&&&&&&&&&&&&字转换为双字指令CWD&&&&&&&&指令的格式:CWD该指令的隐含操作数为DX和AX,其功能是用AX的符号位去填充DX。指令的执行不影响任何标志位。&&&&&&&&&&&&例.符号扩展&&&&&&&&moval,64h&&&&;AL=64H(机器数),表示10进制数100(真值)&&&&&&&&cbw&&&&;将符号0扩展,AX=0064H,仍然表示100&&&&&&&&movax,0ff00h&&&&;AX=FF00H,表示有符号10进制数-256&&&&&&&&cwd&&&&;将符号位“1”扩展,DX.AX=FFFFFF00H;仍然表示-256&&&&&&&&&&&&6.乘法和除法指令&&&&&&&&乘法指令分无符号和有符号乘法指令&&&&MULreg/memIMULreg/mem;无符号乘法;有符号乘法&&&&&&&&除法指令分无符号和有符号除法指令&&&&DIVreg/memIDIVreg/mem;无符号除法;有符号除法&&&&&&&&&&&&无符号数乘法指令MUL&&&&&&&&受影响的标志位:CF和OF(AF、PF、SF和ZF无定义)指令的功能:把显式操作数和隐含操作数(都作为无符号数)相乘,所得的乘积按表的对应关系存放。&&&&&&&&&&&&有符号数乘法指令IMUL&&&&&&&&受影响的标志位:CF和OF(AF、PF、SF和ZF无定义)该指令的功能是把显式操作数和隐含操作数相乘&&&&&&&&&&&&除法指令&&&&&&&&除法指令的被除数是隐含操作数,除数在指令中显式地写出来。CPU会根据除数是8位、16位,还是32位,来自动选用被除数AX、DX-AX无符号数除法指令DIV:指令的格式:DIVReg/Mem指令的功能是用显式操作数去除隐含操作数(都作为无符号数),所得商和余数按表5.3的对应关系存放。指令对标志位的影响无定义。&&&&&&&&&&&&有符号数除法指令IDIV:指令的格式:IDIVReg/Mem受影响的标志位:AF、CF、OF、PF、SF和ZF&&&&&&&&指令的功能是用显式操作数去除隐含操作数(都作为有符号数),所得商和余数的对应关系见表&&&&&&&&&&&&例.AX=0F05H,DX=068AH,CX=08E9H执行指令DIVCX之后商在AX中,余数在DX中,AX=BBE1H,DX=074CH068A0F05H÷08E9H=BBE1H……074CH&&&&&&&&&&&&3.位操作类指令&&&&&&&&位操作类指令以二进制位为基本单位进行数据的操作当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令注意这些指令对标志位的影响&&&&1.逻辑运算指令ANDORXORNOTTEST2.移位指令SHLSHRSAR3.循环移位指令ROLRORRCLRCR&&&&&&&&&&&&逻辑运算指令&&&&&&&&双操作数逻辑指令AND、OR、XOR和TEST设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义;它们的操作数组合与ADD、SUB等一样:&&&&运算指令助记符reg,imm/reg/mem&&&&&&&&运算指令助记符mem,imm/reg&&&&&&&&单操作数逻辑指令NOT不影响标志位,操作数与INC、DEC和NEG一样:NOTreg/mem&&&&&&&&&&&&第2章:逻辑与指令AND&&&&&&&&对两个操作数执行逻辑与运算,结果送目的操作数ANDdest,src;dest←dest∧src&&&&&&&&只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0&&&&&&&&&&&&第2章:逻辑或指令OR&&&&&&&&对两个操作数执行逻辑或运算,结果送目的操作数ORdest,src;dest←dest∨src&&&&&&&&只要相“或”的两位有一位是1,结果就是1;否则,结果为0&&&&&&&&&&&&第2章:逻辑异或指令XOR&&&&&&&&对两个操作数执行逻辑异或运算,结果送目的操作数XORdest,src;dest←dest⊕src&&&&&&&&只有相“异或”的两位不相同,结果才是1;否则,结果为0&&&&&&&&&&&&第2章:测试指令TEST&&&&&&&&对两个操作数执行逻辑与运算,结果并不送目的操作数,仅按AND指令影响标志&&&&TESTdest,src;dest∧src&&&&&&&&AND与TEST指令的关系,同SUB与CMP指令的关系一样&&&&&&&&&&&&第2章:逻辑非指令NOT&&&&&&&&对一个操作数执行逻辑非运算&&&&NOTreg/mem;reg/mem←~reg/mem&&&&&&&&按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”&&&&&&&&&&&&例.已知(BH)=67H,要求把其的第0、1和5位置为0。解:可以构造一个立即数,其第0、1和5位的值为0,其它位的值为1,该立即数即为:0DCH或B,然后用指令"ANDBH,0DCH"来实现此功能。其计算过程如右图所示。&&&&&&&&&&&&已知(BL)=46H,要求把其的第1、3、4和6位置为1。解:构造一个立即数,使其第1、3、4和6位的值为1,其它位的值为0,该立即数即为:5AH或B,然后用指令"ORBL,5AH"来实现此功能。其计算过程如右图所示。&&&&&&&&&&&&已知(AL)=46H,执行指令“NOTAL”后,AL的值是什么?解:执行该指令后,(AL)=0B9H。其计算过程如下所示。&&&&&&&&&&&&已知(AH)=46H,要求把其的第0、2、5和7位的二进制值变反。解:构造一个立即数,使其第0、2、5和7位的值为1,其它位的值为0,该立即数即为:0A5H或B,然后再用指令"XORAH,0A5H"来实现此功能。&&&&&&&&&&&&逻辑运算指令的应用&&&&&&&&andbl,b;BL中D0和D3清0,其余位不变orbl,b;BL中D0和D3置1,其余位不变xorbl,b;BL中D0和D3求反,其余位不变&&&&AND指令可用于复位某些位(同0相与),不影响其他位OR指令可用于置位某些位(同1相或),不影响其他位XOR指令可用于求反某些位(同1相异或),不影响其他位&&&&&&&&&&&&位移指令&&&&&&&&将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元;后一个操作数表示移位位数:&&&&该操作数为1,表示移动一位该操作数为CL,CL寄存器值表示移位位数(移位位数大于1只能CL表示)&&&&&&&&按照移入的位设置进位标志CF,根据移位后的结果影响SF、ZF、PF&&&&&&&&&&&&逻辑左移指令SHL&&&&&&&&SHLreg/mem,1/CL;reg/mem左移1或CL位;最低位补0,最高位进入CF&&&&&&&&&&&&逻辑右移指令SHR&&&&&&&&SHRreg/mem,1/CL;reg/mem右移1/CL位;最高位补0,最低位进入CF&&&&&&&&&&&&算术左移指令SAL&&&&&&&&SALreg/mem,1/CL;与SHL是同一条指令&&&&&&&&&&&&算术右移指令SAR&&&&&&&&SARreg/mem,1/CL;reg/mem右移1/CL位;最高位不变,最低位进入CF&&&&&&&&&&&&数据位移举例&&&&&&&&movdx,6075h;DX=0101Bshldx,1;DX=1010B&&&&;CF=0,SF=1、ZF=0、PF=0sardx,1;DX=0101B;CF=0,SF=1、ZF=0、PF=0shrdx,1;DX=1010B;CF=1,SF=0、ZF=0、PF=1movcl,4;CL=4,标志不变&&&&&&&&sardx,cl&&&&&&&&;DX=0011B;CF=1,SF=0、ZF=0、PF=1&&&&&&&&&&&&循环移位指令&&&&&&&&循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。分为:&&&&ROLreg/mem,1/CLRORreg/mem,1/CLRCLreg/mem,1/CLRCRreg/mem,1/CL;不带进位循环左移;不带进位循环右移;带进位循环左移;带进位循环右移&&&&&&&&循环移位指令的操作数形式与移位指令相同,按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志&&&&&&&&&&&&循环移位指令有:&&&&?循环左移ROL/循环右移ROR指令的格式:ROL/ROROPR,count&&&&&&&&受影响的标志位:CF和OF&&&&循环左移/右移指令只是移位方向不同,它们移出的位不仅要进入CF,而且还要填补空出的位。&&&&OPR&&&&循环左移&&&&&&&&CF&&&&&&&&OPR&&&&循环右移&&&&&&&&CF&&&&&&&&&&&&带进位的循环移位指令有:?带进位的循环左移RCL/带进位的循环右移RCR。指令的格式:RCL/RCROPR,count受影响的标志位:CF和OF带进位的循环左移/右移指令只有移位的方向不同,它们&&&&&&&&都用原CF的值填补空出的位,移出的位再进入CF。&&&&&&&&CF&&&&&&&&OPR&&&&&&&&OPR&&&&&&&&CF&&&&&&&&&&&&例:移位指令可实现乘法功能:DX←7×BX+3×AX&&&&MOVSI,AXSHLSI,1;SI←2×AX&&&&&&&&ADDSI,AX&&&&MOVDX,BXMOVCL,03H&&&&&&&&;SI←3×AX&&&&&&&&SHL&&&&SUB&&&&&&&&DX,CL&&&&DX,BX&&&&&&&&;DX←8×BX&&&&;DX←7×BX;DX←7×BX+3×AX&&&&&&&&ADDDX,SI&&&&&&&&注:(1)逻辑左移一位相当于无符号数乘以2,&&&&(2)逻辑右移一位相当于无符号数除以2。&&&&&&&&&&&&串操作指令&&&&&&&&串——存储器中一序列字或字节单元,单元中的内容是字符或数据;串操作——对序列字或字节单元中的内容进行某种操作。?使用串操作指令时微处理器设计有若干约定:1、源串地址由DS:SI指定目的串地址在ES:DI中2、串长送CX寄存器3、设置方向标志位DF当DF=0(指令CLD)时,SI(和DI)为增量修改(+1或+2)当DF=1(指令STD)时,SI(和DI)为减量修改(-1或-2)&&&&&&&&&&&&与REP配合工作的MOVS/STOS/LODS的指令&&&&?重复前缀指令REP重复前缀指令是重复其后的串操作指令,重复的次数由CX来决定。其一般格式为:REPMOVS/STOS/LODS重复前缀指令的执行步骤如下:&&&&&&&&(1)判断:CX=0;&&&&(2)如果CX=0,则结束重复操作,执行程序中的下一条指令骤(1)。;(3)否则,执行其后的串操作指令,CX=CX-1,再转到步&&&&&&&&&&&&?串传送指令MOVS(MoveStringInstruction)&&&&?功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:①(DS:[SI])→ES:[DI]。&&&&&&&&②当DF=0时,(SI)和(DI)增量。&&&&当DF=1时,(SI)和(DI)减量。?指令的格式:&&&&&&&&MOVSDST,SRC&&&&MOVSBMOVSW注(字节)(字)&&&&&&&&字节操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2&&&&&&&&&&&&?存入串指令STOS(StoreStringInstruction)?功能:将AL或AX中的数据送入ES:DI所指的目的串中的字节(或字)存储单元中。即:①字节操作:(AL)→[DI],字操作:(AX)→[DI]。②修改指针DI,使之指向串中的下一个元素。当DF=0时,(DI)增量;当DF=1时,(DI)减量。?指令的格式:STOSDSTSTOSBSTOSW(字)(字节)&&&&ES→ES:DI→&&&&&&&&AL或AX&&&&&&&&&&&&?取出串指令LODS(LoadStringInstruction)&&&&?功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。即:①字节操作:([SI])→AL,字操作:([SI])→AX。②修改指针SI,使它指向串中的下一个元素。当DF=0时,(SI)增量。当DF=1时,(SI)减量。?指令的格式:LODSSRC&&&&DS→&&&&DS:SI→&&&&&&&&LODSB&&&&LODSW&&&&&&&&(字节)&&&&(字)&&&&&&&&AL或AX&&&&&&&&&&&&与REPZ(REPNZ)配合工作的CMPS和SCAS指令&&&&?相等重复前缀指令REPE/REPZ一般格式为:&&&&&&&&REPE/REPZ&&&&执行步骤如下:&&&&&&&&CMPS/SCAS&&&&&&&&(1)判断条件:CX≠0且ZF=1;&&&&&&&&(2)如果条件不成立,则结束重复操作,执行程序&&&&中的下一条指令;(3)否则,执行其后的串操作指令,CX=CX-1,再&&&&&&&&转到步骤(1)。&&&&&&&&&&&&?不等重复前缀指令REPNE/REPNZ一般格式为:&&&&&&&&REPNE/REPNZ&&&&执行步骤如下:&&&&&&&&CMPS/SCAS&&&&&&&&(1)判断条件:CX≠0且ZF=0;(2)如果条件不成立,则结束重复操作,执行程序中&&&&&&&&的下一条指令;&&&&(3)否则,执行其后的串操作指令,CX=CX-1,再转到步骤(1)。&&&&&&&&&&&&?串比较指令CMPS&&&&?语句格式:①CMPSB——字节串比较②CMPSW——字串比较?功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的&&&&DS→DS:SI→&&&&&&&&串中的一个字节(或字)存储单元中的数据&&&&相减,并根据相减的结果设置标志,但结果并不保存。&&&&~~ES→ES:DI→&&&&&&&&~减~&&&&&&&&即:①([SI])-([DI])。&&&&②修改串指针,使之指向串中的下一个元素。当DF=0时,(SI)和(DI)增量;当DF=1时,(SI)和(DI)减量。&&&&&&&&&&&&?串扫描指令SCAS&&&&?语句格式:①SCASB——字节串扫描&&&&&&&&②SCASW——字串扫描&&&&ES→&&&&&&&&?功&&&&&&&&能:AL(字节)或AX(字)中的内&&&&&&&&ES:DI→&&&&&&&&容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,即:①字节操作:(AL)-([DI]),&&&&&&&&字操作:(AX)-([DI])。&&&&②修改指针使之指向串中的下一个元素。当DF=0时,(DI)增量。当DF=1时,&&&&AL或AX&&&&&&&&(DI)减量。&&&&&&&&&&&&控制转移指令&&&&&&&&?无条件转移指令JMP&&&&&&&&?段内直接短转移:JMPSHORTOPR&&&&&&&&执行操作:(IP)←(IP)+8位位移量&&&&?段内直接近转移:JMPNEARPTROPR执行操作:(IP)←(IP)+16位位移量?段内间接转移:JMPWORDPTROPR执行操作:(IP)←(EA)?段间直接远转移:JMPFARPTROPR执行操作:(IP)←OPR的段内偏移地址&&&&&&&&(CS)←OPR所在段的段地址&&&&?段间间接转移:JMPDWORDPTROPR执行操作:(IP)←(EA)(CS)←(EA+2)&&&&&&&&&&&&?段内直接短转移:JMPSHORTOPR&&&&执行操作:(IP)←(IP)+8位位移量&&&&&&&&?段内直接近转移:JMPNEARPTROPR&&&&执行操作:(IP)←(IP)+16位位移量位移量是紧接着JMP指令后的那条指令的偏移地址,到目标指令的&&&&&&&&偏移地址的地址位移。当向地址增大方向转移时,位移量为正;向地&&&&址减小方向转移时,位移量为负。例如:……&&&&&&&&JMPAGAIN&&&&……AGAIN:DECCX&&&&&&&&;转移到AGAIN处继续执行&&&&;标号AGAIN的指令&&&&&&&&&&&&例:段内直接短转移&&&&&&&&&&&&?段内间接转移:&&&&执行操作:&&&&&&&&JMP&&&&&&&&WORDPTR&&&&&&&&OPR&&&&&&&&(IP)←(EA)&&&&&&&&将一个寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容。JMPAXJMPWORDPTR[2000H];IP←AX;IP←[2000H]&&&&&&&&&&&&例:段内间接转移&&&&ADDRESSDW3000H;定义转移地址……LEASI,ADDRESS;偏移量?SI……JMPWORDPTR[SI];转移到CS:3000H&&&&&&&&&&&&?段间直接远转移:JMPFARPTROPR&&&&执行操作:(IP)←OPR的段内偏移地址&&&&(CS)←OPR所在段的段地址&&&&&&&&将标号所在段的段基地址作为新的CS值,标号在该段&&&&内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行。&&&&&&&&例:JMPFARPTROTHERSEG&&&&它代码段的OTHERSEG处&&&&&&&&;远转移到其&&&&&&&&&&&&例:段间直接远转移&&&&&&&&&&&&条件转移指令&&&&条件转移指令根据标志寄存器中的一个(或多个)标志位(CF、ZF、SF、PF和OF)来决定是否需要转移,共有19条。若满足条件,则将控制转移到指令所规定的目标,若不满足条件,则继续顺序执行后续指令。所有的条件转移指令都是段内短转移,即转移的目的地&&&&&&&&址必须在当前代码段内,且与下一条指令的第一个字节的&&&&距离在-128~127个字节内。&&&&&&&&&&&&判断单个标志位状态&&&&&&&&⑴JZ/JE和JNZ/JNE利用零标志ZF,判断结果是否为零(或相等)⑵JS和JNS利用符号标志SF,判断结果是正是负⑶JO和JNO利用溢出标志OF,判断结果是否产生溢出⑷JP/JPE和JNP/JPO利用奇偶标志PF,判断结果中“1”的个数是偶是奇⑸JC/JB/JNAE和JNC/JNB/JAE&&&&&&&&&&&&比较无符号数高低&&&&&&&&无符号数的大小用高(Above)、低(Below)表示,需要利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系,对应4条指令&&&&JB(JNAE):目的操作数低于(不高于等于)源操作数JNB(JAE):目的操作数不低于(高于等于)源操作数&&&&&&&&JBE(JNA):目的操作数低于等于(不高于)源操作数&&&&JNBE(JA):目的操作数不低于等于(高于)源操作数&&&&&&&&&&&&比较有符号数大小&&&&&&&&判断有符号数的大(Greater)、小(Less),需要组合OF、SF标志、并利用ZF标志确定相等与否两数的大小分成4种关系,分别对应4条指令&&&&JL(JNGE):目的操作数小于(不大于等于)源操作数&&&&&&&&JNL(JGE):目的操作数不小于(大于等于)源操作数&&&&JLE(JNG):目的操作数小于等于(不大于)源操作数JNLE(JG):目的操作数不小于等于(大于)源操作数&&&&&&&&&&&&循环指令&&&&?循环指令LOOP&&&&语句格式:LOOP短标号&&&&执行过程:CX=CX-1;如果CX≠0,转向“标号”所指向的指令,否则,终止循环,&&&&CX←循环次数&&&&&&&&执行该指令下面的指令。&&&&说令:DECCXJNE短标号明:使用LOOP指令可代替两条指&&&&&&&&循环体&&&&CX←CX-1NCX=0?Y&&&&&&&&&&&&?相等/为零循环指令LOOPE/LOOPZ&&&&语句格式:LOOPE/LOOPZ短标号执行过程:(1)CX=CX-1(2)如果CX≠0且ZF=1,则程序转向“标号”所&&&&CX←循环次数循环体CX←CX-1Yes&&&&&&&&指向的指令,否则,程序将执行该循环指令下面&&&&的指令。&&&&CX0且ZF=1?No&&&&&&&&&&&&?不相等/不为零循环指令LOOPNE/LOOPNZ&&&&语句格式:LOOPNE/LOOPNZ短标号&&&&循环体&&&&CX←循环次数&&&&&&&&执行过程:&&&&(1)CX=CX-1(2)如果CX≠0且ZF=0,则程序转向“标号”所指向的指令,否则,程序将执行该循环指令下面的指令。&&&&&&&&CX←CX-1Yes&&&&&&&&CX0且ZF=0?No&&&&&&&&&&&&子程序的调用与返回指令&&&&子程序是完成特定功能的一段程序。如果某程序段在源程序内反复出现,就可把该程序段定义为子程序。这样可以缩短源程序长度、节省目标程序的存储空间,也可提高程序的可维护性和共享性。&&&&&&&&当主程序(调用程序)需要执行这个功能时,采用CALL调&&&&用指令转移到该子程序的起始处执行;当运行完子程序功能后,采用RET返回指令回到主程序继续执行。&&&&主程序&&&&……子程序label:proc…&&&&&&&&CALLlabel&&&&……&&&&&&&&RET&&&&&&&&&&&&中断&&&&中断就是CPU暂停当前程序的执行,转而执行处理紧急事务的程序,并在该事务处理完后能自动恢复执行原先程&&&&&&&&序的过程。在此,称引起紧急事务的事件为中断源,称处&&&&理紧急事务的程序为中断服务程序或中断处理程序。中断处理程序基本上是系统程序员编写好的,是为操&&&&&&&&作系统或用户程序服务的。为了在应用程序中使用中断服&&&&务程序,程序员必须能够在程序中有目的地安排中断的发生。为此,指令系统提供了各种引起中断的指令。&&&&&&&&&&&&?中断向量表和中断服务程序&&&&中断向量表是一个特殊的线性表,它保存着系统所有中断服务程序的入口地址(偏移量和段地址)。在微机系统中,该向量表有256个元素(0~0FFH),每个元素占4个字节,总共1K字节。&&&&&&&&&&&&&&&&类型0的(IP)类型0的(CS)类型1的(IP)类型1的(CS)&&&&&&&&4*N&&&&&&&&图中的“中断偏移量”和“中断段地址”是指该中断服务程序入口单元的“偏移量”和“段地址”。由此不难看出:假如中断号&&&&&&&&类型N的(IP)类型N的(CS)&&&&&&&&为N,那么,在中断向量表中存储该中断处理&&&&程序的入口地址的单元地址为:4N。&&&&&&&&003FC类型255的(IP)类型255的(CS)&&&&&&&&&&&&?中断指令INT&&&&一般格式:INTTYPE其中:立即数TYPE是一个0~0FFH范围内的整数。指令执行的步骤:(1)把标志寄存器压栈,清除标志位IF和TF;(2)把代码段寄存器CS和指令指针寄存器IP的内容压栈;&&&&&&&&(3)(IP)←(TYPE*4),(CS)←(TYPE*4+2)&&&&&&&&?溢出中断指令INTO&&&&当标志位OF为1时,引起中断。&&&&&&&&该指令的格式如下:INTO&&&&该指令影响标志位:IF和TF。&&&&&&&&&&&&?中断返回指令IRET当一个中断服务程序执行完毕时,CPU将恢复被中断的现场,返回到引起中断的程序中。为了实现此项功能,指令系统提供了一条专用的中断返回指令。指令格式:IRET&&&&&&&&该指令执行的过程基本上是INT指令的逆过程,具体如下:&&&&(1)从栈顶弹出内容送入IP;(2)再从新栈顶弹出内容送入CS;(3)再从新栈顶弹出内容送入标志寄存器;&&&&&&&&&&&&?标志操作指令:&&&&?CLC&&&&?CMC?STC?CLD?STD&&&&&&&&进位位置0指令&&&&进位位求反指令进位位置1指令方向标志位置0指令方向标志位置1指令&&&&&&&&;CF←0&&&&;CF取反;CF←1;DF←0;DF←1&&&&&&&&?CLI&&&&?STI&&&&&&&&中断标志位置0指令&&&&中断标志位置1指令&&&&&&&&;IF←0&&&&;IF←1&&&&&&&&注意:以上指令只影响本指令指定的标志&&&&&&&&&&&&伪指令语句&&&&&&&&伪指令:告诉编译器如何进行编译的指令,它既不控制机器的操作,也不被汇编成机器代码,只能为汇编程序所识别并指导编译器如何翻译源程序。指令性语句的格式为:[标号:]指令助记符[操作数[,操作数]][;注释]伪指令语句的格式为:[名字]伪指令定义符[参数,…,参数][;注释]&&&&&&&&&&&&伪指令与指令的最大区别在于,伪指令只在编译时起作用,而指令只能在程序运行时才发挥作用。换句话说,伪指令对编译器说话,而指令则是对CPU说话。&&&&&&&&&&&&1.标号、名字指令或数据的符号地址。2.助记符、定义符规定指令或伪指令的功能。3.参数参数可分为三类,如下:(1).数值表达式⊙常数宏汇编中允许使用如下几种常数:①二进制常数、②十进制常数、③十六进制常数、④八进制常数、⑤串常数、⑤十进制科学计数法、⑦十六进制实数⊙算术运算符算术运算符有+、-、*、/、MOD。(2)⊙逻辑运算符逻辑运算符有NOT、AND、OR、XOR、SHR和SHL。⊙关系运算符关系运算符有:EQ、NE、LT、LE、GT、GE。&&&&&&&&&&&&(2).寄存器操作数&&&&&&&&寄存器操作数就是寄存器的名字,常用于指令性(3).存储器操作数存储器操作数即存储器的地址,常以一个表达式的形式给出,称为地址表达式。单个的变量、标号或有方括号的基址或变址寄存器是地址表达式的特例。(4)注释注释项必须以分号开头。&&&&&&&&&&&&符号定义伪指令1.等值语句EQU格式:变量名EQU表达式功能:EQU伪指令告知汇编程序,指令左右的二个量相等,并且用右边表达式的值定义左边的符号。表达式可以是常数、变量、标号、指令助记符、数值表达式、地址表达式。BEQU[BP+8];变址寻址存储单元内容赋给符号BP8EQUDS:[BP+8];段前缀和操作数赋给符号名P8CBDEQUADD;指令ADD赋给符号名CBD&&&&&&&&&&&&2.等号伪指令格式:变量名=表达式功能:“=”伪指令用来为右边的表达式定义一个替代符号,且只能是数值表达式,不能为字符串或地址表达式,“=”伪指令定义的符号允许重复定义。EMP=6:这与EMPEQU6相同EMP=7;可以重新定义EMP=EMP+1;可以引用前面的定义EMPEQU9;错误,不能由EQU重新定义&&&&&&&&&&&&3.定义符号名伪指令LABEL格式:符号名LABEL类型功能:定义由符号名指定的符号,使该符号的段属性与偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同,并具有类型参数所指定的类型。类型可以是BYTE、WORD、DWORD、NEAR和FAR。&&&&&&&&&&&&数据定义伪指令&&&&1.数据定义语句数据定义语句有5条,其格式相同,如下:变量名DB初值表达式变量名DW初值表达式变量名DD初值表达式变量名DQ初值表达式变量名DT初值表达式功能:让汇编程序在内存中划出指定个数的存储单元,然后将这些存储单元与变量名联系起来,并在存储单元中预置初值。DB伪指令定义字节类型变量,其每个初值都占一个字节的存储空间。DW伪指令用来定义字类型变量,其每个初值都占一个字的存储空间。DD伪指令用来定义双字类型变量,其每个初值都占二个字的存储空间。DQ伪指令用来定义四字类型变量,其每个初值都占四个字的存储空间。DT伪指令用来定义十字节类型变量,其每个初值都占五个字的存储空间。&&&&&&&&&&&&初值表达式:初值表达式决定变量初值的个数,定义变量时可以指定多个初值,从而占据较多的存储空间。多个初值时各个初值间用逗号隔开。初值表达式中可以有常数或常数表达式、字符串、?和带DUP的表达式。例如:B0DB2B1DB3,5,?,9B2DW10H,2DUP(1234H,?)B3DD1,2B4DB0,2DUP(?,1,2DUP(7))这5个变量分配内存情况如图(a)~(f)所示&&&&&&&&&&&&段定义伪指令1.段定义伪指令格式:段名SEGMENT[定位类型][组合类型][‘类别’]…段名ENDS&&&&&&&&&&&&程序段的结构&&&&在学习了段定义语句之后,我们分析一个简单的汇编语言源程序的结构。DATASEGMENTVARDB12HDATAENDSSTACK1SEGMENTSTACKDB300HDUP(?)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXINCVARMOVAH,4CHINT21HCODEENDSENDSTART&&&&&&&&&&&&1.源程序分段结构汇编语言源程序由若干段组成,段是程序的基本构成单位,一般将数据集中放在一个段内,称为数据段.本例中为DATA段;将堆栈所需内存专划为一个段,称为堆栈段.本例中为STACK1段。在堆栈段内定义变量的目的是指定堆栈段的长度;将指令代码集中放在一个段内,称为代码段,本例中为CODE段。一个程序必须有代码段,其它段根据需要定义。2.段假设伪指令ASSUME格式:ASSUME段寄存器名:段名[,段寄存器名:段名,…]功能:ASSUME伪指令设定段和段寄存器的关系,其中段寄存器名必须是CS、DS、ES和SS中的一个,而段名必须是由SEGMENT/ENDS定义的段名。在程序的代码段中可以多次使用ASSUME伪指令,则新设置&&&&&&&&返回&&&&&&&&&&&&的“段寄存器:段名”的对应关系将取代以前的设置。返回3.段寄存器的填装ASSUME伪指令仅告诉汇编程序在汇编源程序时假设段寄存器与段存在着这样的对应关系,它不能真正将段基址装入到相应的段寄存器中去。段寄存器的装入是应用程序在运行时实现的,并且4个段寄存器的装入方法有所不同。(1).DS和ES的装入由于段基址不能用MOV指令直接送往段寄存器,所以通过一通用寄存器再送往DS和ES。(2).SS的填装有二个办法:⊙在堆栈段定义时,指定组合类型为"STACK"。示例程序中STACK1段即是这样定义的,当程序代码装入到内存准备执行时,DOS将完成以下设置:SS=STACK1的段基址,SP=栈底单元的偏移量+1,本例中SP=300H。⊙在堆栈段定义时,未指定组合类型为"STACK",这时可用类似于DS、ES填装的办法对SS和SP进行设置。&&&&&&&&&&&&(3).CS的填装返回CS和IP的填装必须在程序执行之前完成,不可由程序自己来实现而是由DOS来实现。源程序结束时,通过END伪指令的参数指明程序运行时起始执行指令的位置,本例中为START,DOS将程序装入内存后,将这一位置的段基址装入CS,偏移量装入IP。4.DOS的返回返回DOS的方法有多种,最常用也是最简单的方法是利用DOS的4CH号功能调用本例中:MOVAH,4CHINT21H即为此功能而设,这二条指令执行后应用程序结束,其占用的内存被DOS收回,CPU的控制权交还给DOS,这是用户程序执行的最后二条指令。5.源程序结束伪指令END格式:END起始地址功能:告知汇编程序,源程序就此结束。END伪指令后面的任何语句汇编程序都将予以忽略。END伪指令的参数还用于指定程序的起始位置。&&&&&&&&&&&&汇编语言基础&&&&&&&&汇编语言(AssemblyLanguage):面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。&&&&&&&&&&&&利用汇编语言编写的程序称为源程序。机器不能识别源程序,要通过汇编程序翻译成二进制的浮动目标程序,然后由连接程序将目标文件与库文件相连,最后得到可执行程序,才可在机器上直接运行。&&&&&&&&&&&&汇编语言的特点&&&&汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:(1)能够直接访问与硬件相关的存储器或I/O端口;(2)能够不受编译器的限制,对生成的二进制代码进行完全的控制;(3)能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁;(4)能够根据特定的应用对代码做最佳的优化,提高运行速度;(5)能够最大限度地发挥硬件的功能。&&&&&&&&&&&&同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点:(1)编写的代码非常难懂,不好维护;(2)很容易产生bug,难于调试;(3)只能针对特定的体系结构和处理器进行优化;(4)开发效率很低,时间长且单调。&&&&&&&&&&&&汇编语言开发&&&&&&&&编辑程序&&&&&&&&.ASM文件&&&&&&&&汇编程序&&&&&&&&.OBJ文件&&&&&&&&连接程序&&&&&&&&.EXE文件&&&&&&&&Edit等&&&&&&&&MASM&&&&&&&&LINK&&&&&&&&&&&&?开发过程1:源程序的编辑&&&&&&&&源程序文件要以ASM为扩展名。&&&&源程序文件的形成(编辑)可以通过任何一个文本编辑器实现。&&&&&&&&&&&&?开发过程2:源程序的汇编&&&&汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。使用提供的汇编程序是MASM.EXE:&&&&&&&&C:\MASMtest01.asm&&&&如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(test01.obj),否则MASM将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,再进行汇编。&&&&&&&&&&&&?开发过程3:目标模块的连接&&&&连接程序能把一个或多个目标文件和库文件&&&&合成一个可执行程序(.EXE文件):C:\LINKtest01.obj如果没有严重错误,LINK将生成一个可执行文件(test01.exe);否则将提示相应的错误信息。&&&&&&&&这时需要根据错误信息重新修改源程序后再汇编、&&&&连接,直到生成可执行文件。&&&&&&&&&&&&?开发过程4:可执行程序的调试经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:C:\test01(回车)操作系统装载该文件进入主存,开始运行。&&&&&&&&&&&&例1.显示文字&&&&DATASSEGMENTSTRINGDB13,10,'HelloWorld!',13,10,'$'DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AX;送数据段地址LEADX,STRING;传送偏移地址MOVAH,9;DOS功能调用,显示输出字符串INT21HMOVAH,4CHINT21HCODESENDSENDSTART;DOS功能调用,进程结束返回操作系统&&&&&&&&&&&&例2.实现输出3+5&&&&DATASSEGMENTFIVEDB5DATASENDSSTACKSSEGMENTDB128DUP(?)STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVAL,FIVEADDAL,3ADDAL,30H;得到

我要回帖

更多关于 555产生方波 的文章

 

随机推荐