汇编中 mov 34h, 汇编输出寄存器的值名 是什么意思 不是目的汇编输出寄存器的值不能为立即数么

【图文】汇编语言02_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
汇编语言02
阅读已结束,下载本文到电脑
想免费下载本文?
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢MOV_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
MOV即QuickTime影片格式,它是公司开发的一种、视频文件格式,用于存储常用数字媒体类型。当选择QuickTime(*.mov)作为“保存类型”时,动画将保存为·mov文件。用于保存音频和视频信息,包括Apple Mac OS,95/98/NT/2003/XP/VISTA,甚至WINDOWS7在内的所有主流电脑平台支持。
MOV基本信息
QuickTime视频文件播放程序,除了播放外,QuickTime还支持MIDI播放。并且可以收听/收网络播放,支持HTTP、RTP和RTSP标准。该软件还支持主要的图像格式,比如:、、、和。该软件的其他特性还有:支持文件,包括:MiniDV、DVCPro、 DVCam、AVI、AVR、、OpenDML以及Macromedia Flash等。
QuickTime文件格式支持25位彩色,支持领先的集成,提供150多种视频效果,并配有提供了200多种MIDI兼容音响和设备的声音装置。它无论是在本地播放还是作为格式在网上传播,都是一种优良的格式。
QuickTime因具有跨平台、存储空间要求小等技术特点,而采用了方式的MOV格式文件,画面效果较要稍微好一些。到目前为止,它共有 4 个版本,其中以 4.0 版本的最好。这种编码支持16位的和,每秒10帧以上。这种格式有些软件也可以对它实行处理,其中包括ADOBE公司的专业级多媒体软件AFTEREFFECTS和PREMIERE。
MOV视频制作
MOV是一种大家熟悉的流式视频格式,在某些方面它甚至比WMV和RM更优秀,并能被众多的多媒体编辑及软件所支持,用MOV格式来保存影片是一个非常好的选择。
介绍制作RM和WMV的文章已经相当多了,而如何制作MOV则介绍得比较少,大家可能不知道,其实QuickTime player就具备MOV视频制作功能。
Apple QuickTime player
MOV导入文件
运行QuickTime player 6.3,选择“File”菜单下的“Import(输入)”命令,然后在弹出的“Import”对话框中浏览至导入文件所在的位置,QuickTime player可直接导入AVI、MOV、MPEG-1文件,如果想导入或VOB文件(DVD文件),需要安装一个MPEG-2播放插件。
MOV设置输出
导入好的视频文件会在一个新的播放器窗口中打开,在该窗口中选择“File”菜单下的“Export(输出)”命令,会弹出“Save exported file as”对话框,在对话框中的“Export”下拉列表中选择“Movie to QuickTime Movie”,当然,也可选择将它输出为(MP4)、AVI、FLC等格式的文件,不过它们不属于本文讨论的范围了。
单击“Options”按钮,会弹出“Movie Settings”对话框。
在对话框的Video栏中单击“Settings”按钮,然后进行“Compression Settings(压缩设置)”,首先在最上方的下拉列表中选择压缩方式为“MPEG-4 Video”,“Quality(质量)”当然尽量是“Best(最好)”,最后再设置好、间隔、等参数,这些和其它的软件没太大的区别,可参照其它的设置,需要注意的是关键帧间隔最多为10秒钟时间,也就是如
MOV视频的制作
果帧率为24FPS,关键帧间隔可为240帧。
视频部分还可进行“Filter()”设置,为MOV视频加入模糊、亮度、锐化等效果,点击“Size”按钮还可设置视频的尺寸。
音频部分可使用默认的MPEG-4 Audio,它使用AAC作为其音频部分的编码。如果要进行修改可选定“Movie Settings”对话框中的“Sound”,然后单击Sound栏中的“Setting”按钮,并在弹出的“Sound Settings”对话框中设置采样频率等参数,如要进一步设置还可选择“Options”按钮,具体设置AAC音频的等参数。
设置完成后回到“Save exported file as”对话框中,将MOV文件命名后选择“保存”按钮,即可输出MOV视频。
MOV格式文件是以轨道(track)的形式组织起来的。一个MOV格式文件结构中可以包含很多轨道。轨道的数目限制有一些经验值,这些值会因为计算机的能力越来越强大而发生改变,然而MOV格式文件本身并没有预定义的轨道数目限制。
轨道媒体,压缩,和数据引用
每个轨道都有一个具体的媒体类型(mediatype)—比如视频,声音,或者文本—和一个指定轨道样本数据在何处可以找到的数据引用(datareference)。轨道结构中可以也会指定(比如JPEG视频或者GSM音频)。
数据引用可能指向一个本地文件,也可能是一个网络或服务器上的文件,或者来自网络或英特网上的流,还可能指向一个内存块的或者;其它数据也是可能的,并且类型本身是可扩展的。简而言之,MOV格式文件数据可以位于任何地方。数据引用用来描述。
不同的轨道指定的数据源可能相同,也可能不同。举例来说,可以是所有的MOV格式文件媒体样本都在单独一个文件中,也可以是MOV格式文件的在一个文件中,而视频轨道的样本存储在另一个不同的文件中。
一个给定的轨道只能对应一种媒体类型,而且大部分的轨道都从单一的数据源获取所有的样本数据。然而某些媒体类型支持多个。比如:一个视频轨道可能是有一系列的存储在不同文件的图像组成的。在这种情况下,每个图像都有一个数据源。
不同轨道的媒体类型可以相同,也可以不同—举例来说,同一个MOV格式文件可以有多个视频轨道和多个声音轨道,或者对应于不同语言的多个文本轨道。
一个给定轨道只能使用同一类型的压缩方法,但是在一个MOV格式文件中,具有同样媒体类型的多个轨道使用的压缩方法可以不同。举例来说,一个MOV格式文件中可能同时包含和MPEG-4压缩格式的音频轨道。
轨道的视觉和声音特性
可视的轨道有一些与视觉相关的属性,比如高度,宽度,x和y,层的数量,以及图形模式。这些属性使您可以在同一时间播放多个可视的轨道,在位置上可以是并列播放,部分或者完全重叠,或者不同程度的透明或半透明。可视的轨道还包含一个转换矩阵,用于旋转,缩放,或者实时地使轨道的视觉输出产生歪斜。
声音轨道也有一些属性,比如和平衡,使用户可以创建声音层。多通道的目前尚未支持,比如:四扬声器和5.1。
每个轨道都有自己的时间比例:即每秒钟包含的单位数,用于描述特定的轨道。在创建电影的时候,可以指定时间比例。举例来说,可以为一个制式的视频轨道分配一个值为25的时间比例,以便使每个时间单元对应一个视频帧。一个CD音频轨道的时间比例可以是44100,以使每个时间单位对应一个声音样本;或者也是1000,这样每个时间单位对应于一毫秒长的声音。
轨道结构中还包含一个称为媒体(media)的数据结构,它是一个描述位置,时长,和样本数据自然时间比例的底层数据结构。这可能容易,因为在某些的场合下,样本数据有时也被称为轨道的媒体。
样本时长和
由于每一批样本数据都有其自己的时长,而一批样本可能只包含一个样本,所以MOV格式文件轨道可能没有固定的“帧率”。例如,一个视频轨道可能包含一系列的图像,做显示,而屏幕上的每一个“幻灯片”具有不同的时长。
可以将轨道的时长除以视频样本的总数来得到一个帧率,但是请注意,这个计算结果并不总是和MOV格式文件的行为相一致;MOV格式文件中可能有几个点的实际帧率发生激烈变化。
和轨道及轨道中的每一个媒体一样,电影结构中有一个时间比例。时间比例指定每秒包含多少个时间单位。对于媒体来说,时间比例通常是采样频率;对于轨道或者电影,时间比例则可能是任何方便的。
MOV格式文件及其轨道,以及不同媒体的时间比例之间的关系,定义了MOV格式文件的时间坐标系统。
MOV格式文件有一个当前时间,用来指示MOV格式文件中马上要被显示出来的部分。当前时间以MOV格式比例单元来表示。举例来说,如果MOV格式文件的时间比例为600,且已经播放了半秒,则当前时间为300。
当前时间的范围可以从0到MOV格式文件的时长。它随着MOV格式文件的播放而不断改变。拖动MOV格式文件控制器的播放箭头也会改变电影的当前时间。
MOV格式文件还有一个率的概念,MOV格式文件停止的时候这个值为0,当MOV格式文件以正常速度播放的时候为1,正常播放速度由MOV格式文件的时间比例来确定。举例来说,当播放率为1的时候,时间比例为600的电影以每秒种600个时间单元的速度播放。率为会使电影倒放。率大于1会使MOV格式文件播放速度比正常速度快,小于1会使电影播放速度比正常速度慢。再举个例子,当播放率为0.5的时候,时间比例为600的MOV格式文件以每秒种300个时间单元的速度播放;如果播放率为2,则以每秒种1200个时间单元的速度播放。
MOV格式转换
AVI文件格式和VFW软件是Microsoft为设计的数字视频格式和应用软件。对于世界上的另一大类微机--Apple公司的Macintosh机,公司也推出了相应的视频格式,即MOV(Movie digital video technology)的文件格式,其文件以MOV为后缀,相应的视频应用软件为Apple's QuickTime for Macintosh。该软件的功能与VFW类似,只不过用于Macintosh机。同时Apple公司也推出了适用于PC机的视频应用软件Apple's QuickTime for Windows,因此在MPC机上也可以播放MOV视频文件。
MOV格式的视频文件也可以采用不压缩或压缩的方式,其压缩算法包括Cinepak、和Video编码。其中Cinepak和Intel Indeo Video R3.2算法的应用和效果与AVI格式中的应用和效果类似。而Video格式编码适合于采集和压缩,并可从硬盘平台上高质量回放,从光盘平台上回放质量可调。这种算法支持16位的帧内压缩和,可达每秒10帧以上。
三种文件、文件和MOV文件,它们具有不同的格式,不同的压缩编码算法和不同的特性。必须要有相应的播放软件才能播放对应格式的视频文件,播放软件首先能够识别视频文件的格式,通过解压来回放数据。因此,播放软件只要包含某种格式的解释和解压功能,就能够播放该种格式的视频文件。如VFW中的MediaPlayer就能播放MOV和AVI等多种格式的文件。
通过软件或硬件也可以把这三种视频文件的格式进行转换。如Broadway提供了采集模拟视频,并可用AVI格式(MPEG I帧算法)和存储成文件的功能。如果直接按MPEG格式采集,则该文件不能被编辑。如果按AVI格式采集,则采集以后可以对其进一步编辑并把编辑以后的视频数据按AVI格式或MPEG格式存储。通过该采集软件,也可读取已有的AVI文件,然后按格式存储,以实现两种格式的转换。
MOV汇编语言
(片内RAM)传送指令MOV(Move)把一个字节、字或双字的从源位置传送到目的位置,源操作数的内容不变。可以实现立即数到或主存的传送,通用寄存器与通用寄存器、主存或之间的传送,主存与段寄存器之间的传送。该操作属于复制性质,不属于搬家性质。格式:MOV DST,SRC
MOV EAX,#050aH ;将050a 传送到通用寄存器eax中
MOV DI,BX(寄存器到寄存器之间传数)
MOV ES,AX(通用寄存器与段寄存器之间传数)
MOV AX,DS(段寄存器至通用寄存器)
MOV AL,23H(将立即数&复制&到寄存器)
MOV [2000H],02H(直接寻址)
MOV [2061H],BX
应该注意的是:
目的要与源操作数类型要一致,不能一个是字,一个是字节
目的操作数要和源操作数类型之一必须要有明确的类型
立即数不能作为目的操作数
不能用立即寻址方式给段寄存器传数
源操作数和目的操作数不能同时为存储器操作数,即存储单元之间不能用MOV指令直接传送
CS和IP不能作为目的操作数,但CS可以作为源操作数。
段寄存器之间不能用MOV指令直接传送
在传送字单元时,遵循“高字节存放在高地址,低字节存放在低地址”的原则。
1. OPRD1 为目的,可以是、、.
OPRD2 为源操作数,可以是寄存器、存储器、累加器和.
2. MOV 指令分为以下四种情况:
&1& 寄存器与寄存器之间的指令
&2& 立即数到数据传送指令
&3& 寄存器与存储器之间的数据传送指令
&4& 立即数到存储器的数据传送
3. 本指令不影响位
汇编还提供许多mov变体,如movzx,,MOVS等等
MOV压敏电阻
metal-oxide-varistor的缩写,即金属氧化物压敏电阻
MOV组织价值
MOV (Measureable Organisational Values)。
在系统分析与设计中,MOV对于评估一个业务的价值至关重要。它是实现一个业务的目标,并且定义了一项业务为客户所带来的利益与价值。是对业务可行性所必须的一项分析。进行MOV分析可以从一下四点:
1. 影响的领域:主要包括经济方面,用户方面,内部进程与改善提升等。
2. 潜在的价值:主要是指为各个利益相关者带来的经济,客户,内部进程,改善提升等方面的价值。
3. 达到MOV所需要的时间计划表:这里计划了达到业务MOV所需要的时间与相应的工作。
4. 对MOV进行总结:根据以上分析,总结MOV。
.Apple中国.[引用日期]
何小海.微机原理与接口技术:科学出版社,2006:96
何小海.微机原理与接口技术:科学出版社,2006:96-97
清除历史记录关闭没有更多推荐了,
不良信息举报
举报内容:
汇编语言总结笔记
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Assembly Language Programming制作者 主讲人钱晓捷 课程介绍专业基础课、必修课 计算机组成原理的一个部分 软件开发的一个组成部分 一种低级语言的程序设计 高级语言程序设计的扩展 先修课 高级语言程序设计 计算机组成原理 后续课 微机原理及接口技术 计算机控制技术 使用教材钱晓捷主编 汇编语言程序设计(第二版) 电子工业出版社 2003.6 教学内容第1章 第2章 第3章 第4章 第5章 第6章 第7章 汇编语言基础知识 8086的指令系统 汇编语言程序格式 基本汇编语言程序设计 高级汇编语言程序设计 32位指令及其编程 汇编语言与C/C++的混合编程 教学特点采用汇编程序MASM 6.15 采用简化段定义源程序格式 强调对基本指令的理解和掌握 介绍汇编系统和伪指令的基本内容 新增32位指令、Windows编程 引出与Visual C++的混合编程 强调上机实践,要求熟练进行编程和调试 运用多媒体教学手段 教学要求课堂上注意听讲、重要的是理解 部分补充例题等内容需要笔记 课堂外一定要看书复习或预习、完成作业 充分利用上机时间、多编程练习 参考文献1. 钱晓捷 陈涛 编著 16/32微机原理、汇编语言及接口技术?第2版 机械工业出版社,. 钱晓捷 编著大学计算机学习指导系列汇编语言程序设计?学习与解题指南 华中科技大学出版社,2002.8 教学资料钱晓捷之微辅网 大学微机技术系列课程教学辅助网站 http://www2.zzu.edu.cn/qwfw 考核要求考试成绩(课堂教学内容) 80% 上机成绩(出勤及编程情况) 15% 平时成绩(作业等学习情况) 5% 第1章 教学重点第1章是用汇编语言进行程序设 计所需要了解的基本知识。在课 堂上,我们重点掌握几个内容:PC机软硬件系统 认识汇编语言 基础是熟悉寄存器组 难点是各种寻址方式 第1章1.1 计算机系统概述中央处理单元CPU 控制器、运算器、寄存器 存储器 主存储器:RAM和ROM 辅助存储器:磁盘、光盘、U盘 外部设备 输入设备和输出设备硬件(Hardware)软件(Software)系统软件 应用软件 第1章微型计算机的系统组成系统总线 CPU 运算器 控制器 寄存器 I/O 接 口 主存储器 辅助存储器 输入设备 输出设备 第1章汇编语言程序员看到的硬件中央处理单元 CPU(Intel 80x86)对汇编语言程序员,最关心其中的寄存器存储器(主存储器)呈现给汇编语言程序员的,是存储器地址外部设备(接口电路)汇编语言程序员看到的是端口(I/O地址) 第1章寄存器(Register)寄存器是CPU内部的高速存储单元 它们为处理器提供各种操作所需要的数据或 地址等信息 汇编语言程序采用它们各自的符号名16位Intel
CPU中有 AX BX CX DX SI DI BP SP 32位/Pentium系列 CPU中有 EAX EBX ECX EDX ESI EDI EBP ESP 第1章存储器地址(Address)存储器是由大量存储单元组成,需要用编号 区别每个单元:编号=地址 存储器地址是存储器中存储单元的编号 每个存储单元存放一个字节量的数据一个字节B(Byte)=8个二进制位b(bit)采用十六进制数来表达地址Intel 8086具有1兆字节(1MB)存储器容量 存储器地址表示为:00000H ~ FFFFFH 其中大写H(或小写h)表示是十六进制数 第1章端口(Port)I/O接口电路由接口寄存器组成,需要用编 号区别各个寄存器:编号=地址 I/O地址是接口电路中寄存器的编号 端口是I/O地址的通俗说法 系统通过这些端口与外设进行通信 采用十六进制数来表达端口Intel 8086支持64K个8位端口 I/O地址可以表示为:0000H ~ FFFFH 第1章计算机的程序设计语言机器语言(Machine Language)B8 64 00 05 00 01汇编语言(Assembly Language)mov ax,100 ;取得一个数据100(MOV是传送指令) add ax,256 ;实现100+256(ADD是加法指令)高级语言(High-level Language)100+256 第1章什么是汇编语言以助记符形式表示计算机指令助记符(mnemonic)是便于人们记忆、并能 描述指令功能和指令操作数的符号 助记符是表明指令功能的英语单词或其缩写汇编格式指令以及使用它们编写程序的规则 就形成汇编语言(Assembly Language) 汇编语言程序:用汇编语言书写的程序 汇编程序:将汇编语言程序“汇编”成机器代 码目标模块的程序汇编语言程序与汇编程序是两个概念 第1章汇编语言和高级语言的比较-1汇编语言与处理器密切相关K 汇编语言程序的通用性、可移植性较差高级语言与具体计算机无关J高级语言程序是标准化语言,可在多种 计算机上编译后执行汇编语言:× 高级语言:√ 第1章汇编语言和高级语言的比较-2汇编语言功能有限、涉及硬件细节K 程序编写比较繁琐,调试比较困难高级语言提供了强大的功能,不必 关心琐碎问题J类似自然语言的语法,易于掌握和应 用汇编语言:× 高级语言:√ 第1章汇编语言和高级语言的比较-3汇编语言本质上就是机器语言J 可以直接、有效地控制计算机硬件 J易于产生速度快、容量小的高效率目标 程序高级语言不针对具体计算机系统K不易直接控制计算机的各种操作 K目标程序比较庞大、运行速度较慢汇编语言:√ 高级语言:× 第1章汇编语言的特点汇编语言的优点:直接控制计算机硬件部件 编写“时间”和“空间”两方面最有效程序汇编语言的缺点:与处理器密切有关 需要熟悉计算机硬件系统、考虑许多细节 编写繁琐,调试、维护、交流和移植困难汇编语言:? 高级语言:? 第1章汇编语言和高级语言的混合编程汇编语言的优点使得它在程序设计中占有重 要的位置,不可被取代 汇编语言的缺点使得人们主要采用高级语言 进行程序开发工作 有时需要采用高级语言和汇编语言混合编 程,互相取长补短,更好地解决实际问题 混合编程 取长补短 第1章汇编语言的应用场合程序要具有较快的执行时间,或者只能占用 较小的存储容量 程序与计算机硬件密切相关,程序要直接、 有效地控制硬件 大型软件需要提高性能、优化处理的部分 汇编语言的作用实在不小 ! 没有合适的高级语言、或只能采用汇编语言 的时候 分析具体系统尤其是该系统的低层软件、加 密解密软件、分析和防治计算机病毒等等 第1章1.2 数据表示跳过1.2.1 数制二进制数、十六进制数 它们与十进制数的相互转换1.2.2 编码BCD码和ASCII码的规律1.2.3 有符号数的表示法有符号整数的补码表示1.2.4 二进制运算二进制的算术运算和逻辑运算 十进制的加减运算 第1章二进制数便于计算机存储及物理实现 特点:逢二进一,由0和1两个数码组成,基 数为2,各个位权以2k表示 二进制数: anan-1…a1a0.b1b2…bm= an×2n+an-1×2n-1+…+a1×21+a0×20 +b1×2-1+b2×2-2+…+bm×2-m 其中ai,bj非0即1 第1章十六进制数用于表达二进制数,相互转换简单 基数16,逢16进位,位权为16k,16个数码: 0,1,2,3,4,5,6,7,8,9 A,B,C,D,E,F 十六进制数: anan-1…a1a0.b1b2…bm= an×16n+an-1×16n-1+…+a1×161+ a0×160 +b1×16-1+b2×16-2+…+bm×16-m 其中ai,bj是0~F中的一个数码 第1章十进制整数转换为二或十六进制数演示整数部分转换:用除法十进制数整数部分不断除以基数2或16,并记下 余数,直到商为0为止 由最后一个余数起逆向取各个余数,则为转换 成的二进制和十六进制数 整数除以基数倒序取余 小数乘以基数顺序取整126=6=7EH 第1章十进制小数转换为二或十六进制数演示小数部分转换:用乘法分别乘以各自的基数,记录整数部分,直到小 数部分为0为止0.1B 0.8125=0.DH 小数转换会发生总是无法乘到为0的情况可选取一定位数(精度) 将产生无法避免的转换误差 第1章二或十六进制数转换为十进制数方法:按权展开 二进制数转换为十进制数 二进制数用后缀字母B B 二进制数用后缀字母B =1×21+1×20+1×2-1+0×2-2+1×2-3 =3.625 十六进制数转换为十进制数 十六进制数用后缀字母H 1.2H 十六进制数用后缀字母H =1×160+2×16-1 =1.125 第1章BCD码(Binary Coded Decimal)二进制编码的十进制数一个十进制数位0~9用4位二进制编码来表示 常用8421 BCD码:低10个4位二进制编码表示 压缩BCD码:一个字节表达两位BCD码 非压缩BCD码:一个字节表达一位BCD码(低 4位表达数值,高4位常设置为0)BCD码很直观BCD码:11 00 1001 十进制真值:
BCD码便于输入输出,表达数值准确 第1章ASCII码(美国标准信息交换码)标准ASCII码用7位二进制编码,有128个 不可显示的控制字符前32个和最后一个编码 回车CR:0DH 换行LF:0AH 响铃BEL:07H可显示和打印的字符:20H后的94个编码数码0~9:30H~39H 大写字母A~Z:41H~5AH 小写字母a~z:61H~7AH 空格:20H扩展ASCII码:最高D7位为1,表达制表符 第1章真值和机器数真值:现实中真实的数值 机器数:计算机中用0和1数码组合表达的数值 无符号数:只表达0和正整数的定点整数 有符号数:表达负整数、0和正整数的定点整数符号位需要占用一个位 常用机器数的最高位 0表示正数、1表示负数定点数:固定小数点的位置表达数值的机器数定点整数:将小数点固定在机器数的最右侧表达的整数 定点小数:将小数点固定在机器数的最左侧表达的小数浮点数:小数点浮动表达的实数 第1章补码最高位表示符号:正数用0,负数用1 正数补码:直接表示数值大小(同无符号数) 负数补码:将对应正数补码取反加1演示有符号整数在计算机中默认采用补码[105]补码=B 为什么是补码 [-105]补码=[B]取反+1 =B+1=22222 8位二进制补码表示的数值范围:-128~+127 16位二进制补码表示的数值范围:-215~+215-1 32位二进制补码表示的数值范围:-231~+231-1 第1章负数求补除符号位外演示负数真值“取反加1”得机器数补码 负数补码“取反加1”得到负数真值补码:B 真值:-([]求反+1)=-() =-=-25=-32负数求补运算,等效于用带借位的0作减法真值:-8,补码:[-8]补码=00H-08H=F8H 补码:,真值:-(00H-F8H)=-08H=-8 用十六进制表达和运算,方便! 第1章十六进制数的加减运算二进制和十六进制数之间具有对应关系整数从左向右 小数从右向左 每4个二进制位对应一个十六进制位B=3AH,F2H=B 十六进制数的加减运算类似十进制逢16进位1,借1当1623D9H+94BEH=B897H A59FH-62B8H=42E7H 第1章1.3 Intel 80x86系列微处理器IA-64(安腾) 奔腾4 IA-32 奔腾III 奔腾II 奔腾
4004不是我不明白, 这世界变化太快。 扎扎实实掌握知识, 以不变应万变! 第1章808616位结构的微处理器:数据总线为16位 主存容量1MB:地址总线为20位 时钟频率5MHz(IBM PC使用4.77MHz) 准16位微处理器8088:外部数据总线为8位 IBM PC和PC/XT机使用Intel 8088 CPU 8086的16位指令系统:Intel 80x86基本指令集 的核心是,配以支持电路 指令系统比8086指令系统新增了若 干条实用的指令涉及堆栈操作、移位指令、输入输出指令、过程指令和 边界检测及乘法指令 第1章8028616位数据总线,24位地址总线(16MB主存) 实方式(Real Mode) 与8086工作方式一样 保护方式(Protected Mode) 存储管理、保护机制和多任务管理的硬件支持 IBM PC/AT机使用Intel 80286 CPU 80286指令系统新增15条保护方式指令 16位Intel 80x86 CPU:8086 / 80186 / 80286 32位Intel 80x86 CPU(IA-32微处理器): 8,Pentium系列 英特尔32位结构:IA-32(Intel Architecture-32) 第1章8038632位结构 数据总线32位,地址总线32位,寻址4GB主存 虚拟8086方式(Virtual 8086 Mode) 保护方式下的8086工作方式 系统管理方式(System Management Mode) 低功耗节能状态80386指令系统全面升级为32位兼容原来16位指令系统 新增有关位操作、条件设置指令以及对控制、 调试和测试寄存器的传送指令等 第1章804868+80387+8KB Cache 浮点处理单元FPU :::80387 高速缓冲存储器Cache 复杂指令集计算机CISC融合精简指令集计算机 RISC的技术特点 80486指令系统新增用于多处理器和内部Cache操 作的6条指令 第1章Pentium俗称的80586微处理器,奔腾微处理器 32位结构,连接主存的数据总线是64位 超标量(Superscalar)技术 Pentium指令系统新增一条8字节比较交换指令 一条处理器识别指令 4条系统专用指令 第1章Pentium Pro原称P6,中文名称为“高能奔腾” 两个芯片组成 扩展的超标量技术 动态执行技术 Pentium Pro新增3条指令 第1章Pentium II多媒体扩展指令(MMX指令)MMX(MutliMedia eXtension) 整数运算多媒体指令 优化图像、音频、视频和通信方面的程序进行 提升微机对多媒体的处理能力Pentium MMX(多能奔腾):MMX指令应 用于Pentium处理器 Pentium II:MMX指令应用于Pentium Pro 第1章Pentium III数据流SIMD扩展指令(SSE指令)SSE(Streaming SIMD Extensions) 浮点单精度多媒体运算指令 提高浮点3D数据的处理能力。 SSE指令类似于AMD公司发布的3D Now!指令Pentium III:SSE指令应用于Pentium II 单指令多数据SIMDSingle Instruction Multiple Data 表示一条指令具有同时处理多组数据的能力 第1章Pentium 4进一步发掘指令之间可以同时执行的能力NetBurst的微结构(Microarchitecture) 超线程HT(Hyper Threading)发掘程序中的并行性 一个物理处理器形成两个逻辑处理器SSE2指令增强浮点双精度多媒体运算能力SSE3指令增强和完善MMX,SSE和SSE2指令 第1章Intel 80x86微处理器面向低端(低价位)PC机Celeron(赛扬)微处理器 Xeon(至强)微处理器面向高端服务器、工作站AMD微处理器AMD公司生产的IA-32微处理器兼容芯片 Intel公司最主要的竞争对手双核微处理器单芯片多处理器SMP技术 Intel的Pentium D:单芯片双Pentium 4核心64位微处理器AMD的K8核心:兼容IA-32的64位微处理器 Intel的EM64T(扩展64位技术): IA-32的64位扩展 第1章1.4 PC微型计算机本课程采用16位或32位个人计算机 16位PC机8088 CPU的IBM PC和IBM PC/XT 80286 CPU的IBM PC/AT 16位80x86 CPU的PC兼容机32位PC机采用32位80x86 CPU而形成的微机 基本结构仍然源于PC/AT机人们日常谈论的PC机或微机是上述微型计 算机系统的统称 第1章主存空间的分配 第1章PC机最低1MB主存系统RAM区地址最低端的640KB空间 由DOS进行管理显示RAM区128KB主存空间保留给显示缓冲存储区 显示RAM区并没有被完全使用扩展ROM区I/O接口电路卡上的ROM系统ROM区ROM-BIOS程序 第1章微机的软件系统软件:DOS平台MS-DOS 6.22实地址方式 Windows的MS-DOS模拟环境应用软件:开发汇编语言程序涉及文本编辑器 汇编程序 连接程序 调试程序 集成化开发环境本教材提供 DOS-MASM615.EXE 第1章文本编辑器(Editor)文本编辑器用于编辑无任何格式的文档 程序设计要采用文本编辑器编写源程序 常见的文本编辑软件有很多,如MS-DOS的EDIT全屏幕编辑器 Windows的Notepad计事本 程序开发系统中的程序编辑器Turbo C Visual Studio MASM的PWB 第1章汇编程序(Assembler)汇编程序将汇编语言源程序翻译(称为“汇 编”)成机器代码目标模块 本课程采用微软的MASM 6.15MASM的最后一个独立版本MASM 6.11 可免费升级为MASM 6.14(支持SSE) Visual C++中有MASM 6.15(支持SSE2) Visual C++.NET 2003有MASM 7.10 Visual C++.NET 2005的MASM支持Penium 4 的SSE3指令系统,同时有ML64.EXE程序用于 支持64位指令系统 第1章连接程序(Linker)连接程序将汇编后的目标模块转换为可执行 程序 每个程序开发环境都有连接程序 连接程序的文件名通常是:LINK.EXE 32位Windows连接程序不同于16位DOS连 接程序源程序 文本编辑器 目标模块 汇编程序 .job 可执行文件 调试程序连接程序 .exe 第1章调试程序(Debugger)调试程序进行程序排错、分析等 本课程采用MASM的CodeView DOS的DEBUG程序 还有Turbo Debugger等源程序 文本编辑器 目标模块 汇编程序 连接程序 可执行文件 调试程序 第1章集成化开发环境进行程序设计使用的各种软件的有机集合, 有文本编辑器,有语言翻译程序,有连接程 序,还组合有调试程序等 大型的程序设计项目往往要借助这种集成开 发环境,也就是软件开发工具(包) MASM提供程序员工作平台PWB 微软的Visual Studio开发系统 第1章MASM编程环境的使用 进入模拟DOS环境 将MASM目录作为当前目录 开发汇编语言程序 ml /Fl filename.asm 运行可执行程序 调试可执行程序定制进入MASM快捷方式 ML615 创建快速开发文件 MLL.BAT 构造方便的调试环境 CV.BAT1. 2. 3. 4. 5. 第1章1.5 8086微处理器微处理器是微机的硬件核心,主要包含指令 执行的运算和控制部件,还有多种寄存器 对程序员来说,微处理器抽象为以名称存取 的寄存器 8086内部结构有两个功能模块,完成一条指 令的取指和执行功能 总线接口单元BIU:负责读取指令和操作数 执行单元EU :负责指令译码和执行 8086的内部结构AH BH CH DH AL BL CL DL SP BP SI DI16位地址加法器∑通用寄存器 CS DS SS ES IP 内部暂存器20位16位输入/输出 控制电路 外 部 总 线ALU标志寄存器执行部分 控制电路12 3 4 5 68位指令队列缓冲器执行部件 (EU)总线接口部件 (BIU)执行 8086的寄存器组 第1章8086的通用寄存器8086的16位通用寄存器是:AX SI BX DI CX BP DX SP其中前4个数据寄存器都还可以分成高8位和 低8位两个独立的寄存器 8086的8位通用寄存器是:AH AL BH BL CH CL DH DL对其中某8位的操作,并不影响另外对应8位 的数据 第1章数据寄存器数据寄存器用来存放计算的结果和操作数, 也可以存放地址 每个寄存器又有它们各自的专用目的AX--累加器,使用频度最高,用于算术、逻 辑运算以及与外设传送信息等; BX--基址寄存器,常用做存放存储器地址; CX--计数器,作为循环和串操作等指令中的 隐含计数器; DX--数据寄存器,常用来存放双字长数据的 高16位,或存放外设端口地址。 第1章变址及指针寄存器变址寄存器常用于存储器寻址时提供地址 SI是源变址寄存器 DI是目的变址寄存器 指针寄存器用于寻址内存堆栈内的数据 SP为堆栈指针寄存器,指示栈顶的偏移地址, 不能再用于其他目的,具有专用目的 BP为基址指针寄存器,表示数据在堆栈段中的 基地址 SI和DI在串操作指令有特殊用法 SP和BP寄存器与SS段寄存器联合使用确定堆栈段中 的存储单元地址 第1章堆栈(Stack)堆栈是主存中一个特殊的区域 它 采 用 先 进 后 出 FILO ( First In Last Out ) 或 后 进 先 出 LIFO ( Last In First Out)的原则进行存取操作,而不是随机存 取操作方式 堆栈通常由处理器自动维持 在8086中,由堆栈段寄存器SS和堆栈指针寄 存器SP共同指示 第1章指令指针IP指令指针寄存器IP,指示代码段中指令的偏 移地址 它与代码段寄存器CS联用,确定下一条指 令的物理地址 计算机通过CS : IP寄存器来控制指令序列的 执行流程 IP寄存器是一个专用寄存器 第1章标志寄存器标志(Flag)用于反映指令执行结果或控制指令 执行形式,形成16位标志寄存器FLAGS(程序状 态字PSW寄存器) 状态标志--用来记录程序运行结果的状态信息, 许多指令的执行都将相应地设置它 CF ZF SF PF OF AF 控制标志--可由程序根据需要用指令设置,用于 控制处理器执行指令的方式 DF IF TF15 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZFAFPFCF 第1章进位标志CF(Carry Flag)最左边的一位当运算结果的最高有效位有进位(加法)或 借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。)3AH + 7CH=B6H,没有进位:CF = 0 AAH + 7CH=(1)26H,有进位:CF = 1 第1章零标志ZF(Zero Flag)若运算结果为0,则ZF = 1; 否则ZF = 0注意:ZF为1表示的结果是0 3AH + 7CH=B6H,结果不是零:ZF = 0 84H + 7CH=(1)00H,结果是零:ZF = 1 第1章符号标志SF(Sign Flag)运算结果最高位为1,则SF = 1;否则 SF = 0有符号数据用最高有效位表示数据的符号 所以,最高有效位就是符号标志的状态化成二进制最高位为13AH + 7CH=B6H,最高位D7=1:SF = 1 84H + 7CH=(1)00H,最高位D7=0:SF = 0 第1章奇偶标志PF(Parity Flag)当运算结果最低字节中“1”的个数为零或偶 数时,PF = 1;否则PF = 0 PF标志仅反映最低8位中“1”的个数是 偶或奇,即使是进行16位字操作 3AH + 7CH=B6H=B 结果中有5个1,是奇数:PF = 0 第1章溢出标志OF(Overflow Flag)若算术运算的结果有溢出,则OF=1; 否则 OF=03AH + 7CH=B6H,产生溢出:OF = 1 AAH + 7CH=(1)26H,没有溢出:OF = 0问题什么是溢出? 溢出和进位有什么区别? 处理器怎么处理,程序员如何运用? 如何判断是否溢出? 第1章什么是溢出处理器内部以补码表示有符号数 8位表达的整数范围是:+127~-128 16位表达的范围是:+32767~-32768 如果运算结果超出这个范围,就产生了溢出 有溢出,说明有符号数的运算结果不正确3AH+7CH=B6H,就是58+124=182, 已经超出-128~+127范围,产生溢出,故OF=1; 另一方面,补码B6H表达真值是-74, 显然运算结果也不正确 第1章溢出和进位的对比 例1:3AH + 7CH=B6H无符号数运算: 58+124=182 范围内,无进位 有符号数运算: 58+124=182 范围外,有溢出例2:AAH + 7CH=(1)26H无符号数运算: 170+124=294 范围外,有进位 有符号数运算: -86+124=28 范围内,无溢出 第1章如何运用溢出和进位处理器对两个操作数进行运算时,按照无符 号数求得结果,并相应设置进位标志CF; 同时,根据是否超出有符号数的范围设置溢 出标志OF 应该利用哪个标志,则由程序员来决定。也 就是说,如果将参加运算的操作数认为是无 符号数,就应该关心进位;认为是有符号 数,则要注意是否溢出 第1章溢出的判断判断运算结果是否溢出的简单规则: 只有当两个相同符号数相加(包括不同 符号数相减),而运算结果的符号与原 数据符号相反时,产生溢出;因为,此 时的运算结果显然不正确 其他情况下,则不会产生溢出_______________________________________ ____________________ ______________________ 第1章辅助进位标志AF(Auxiliary Carry Flag)运算时D3位(低半字节)有进位或 借位时,AF = 1;否则AF = 0。3AH + 7CH=B6H,D3有进位:AF = 1 这个标志主要由处理器内部使用, 用于十进制算术运算调整指令中,用 户一般不必关心 第1章方向标志DF(Direction Flag)用于串操作指令,控制地址的变化方向: 设置DF=0,存储器地址自动增加; 设置DF=1,存储器地址自动减少。CLD指令复位方向标志:DF=0 STD指令置位方向标志:DF=1 第1章中断允许标志IF(Interrupt-enable Flag)用于控制外部可屏蔽中断是否可以被处 理器响应:设置IF=1,则允许中断; 设置IF=0,则禁止中断。CLI指令复位中断标志:IF=0 STI指令置位中断标志:IF=1 第1章陷阱标志TF(Trap Flag)用于控制处理器进入单步操作方式:设置TF=0,处理器正常工作; 设置TF=1,处理器单步执行指令。 单步执行指令――处理器在每条指令执行结束时, 便产生一个编号为1的内部中断 这种内部中断称为单步中断 所以TF也称为单步标志 利用单步中断可对程序进行逐条指令的调试 这种逐条指令调试程序的方法就是单步调试 第1章数据信息的表达单位计算机中信息的单位二进制位Bit:存储一位二进制数:0或1 字节Byte:8个二进制位,D7~D0 字Word:16位,2个字节,D15~D0 双字DWord:32位,4个字节,D31~D0最低有效位LSB:数据的最低位,D0位 最 高 有 效 位 MSB : 数 据 的 最 高 位 , 对 应 字 节、字、双字分别指D7、D15、D31位 第1章数据的存储格式D7 D000006HD31D7 D15D0 字节 D0 字 D0 双字78H 56H 12H 34H0H 0H 0H 低地址 第1章存储单元及其存储内容主存储器需要利用地址区别 每个存储单元都有一个编号;被称为 存储器地址 每个存储单元存放一个字节的内容 0002H单元存放有一个数据34H 表达为 [0002H]=34H 第1章多字节数据存放方式多字节数据在存储器中占连续的多个存储单元: 存放:低字节存入低地址,高字节存入高地址 表达:用低地址表示多字节数据占据的地址空间2号“字”单元的内容为: [0002H] = 1234H 2号“双字”单元的内容为: [0002H] = x86处理器采用“低对低、高对 高”:小端方式Little Endian 第1章数据的地址对齐同一个存储器地址可以是字节单元地址、 字单元地址、双字单元地址等等 字单元安排在偶地址(xxx0B)、双字单元 安排在模4地址(xx00B)等,被称为“地址对 齐(Align)” 对于不对齐地址的数据,处理器访问时, 需要额外的访问存储器时间 应该将数据的地址对齐,以取得较高的存 取速度 第1章存储器的分段管理最大可寻址空间为220=1MB 物理地址范围从00000H~FFFFFH8086 CPU有20条地址线8086CPU 将 1MB 空 间 分 成 许 多 逻 辑 段 (Segment)每个段最大限制为64KB 段地址的低4位为0000B这样,一个存储单元除具有一个唯一的物理 地址外,还具有多个逻辑地址 第1章物理地址和逻辑地址每个物理存储单元有一个唯一的20位 编号,即物理地址: 00000H~FFFFFH 分段后用户编程时,采用逻辑地址: 段基地址 : 段内偏移地址分隔符 第1章逻辑地址段地址说明逻辑段在主存中的起始位置 8086规定段地址必须是模16地址:xxxx0H 省略低4位0000B,段地址就可以用16位数 据表示,就能用16位段寄存器表达段地址 偏移地址说明主存单元距离段起始位置的偏 移量 每段不超过64KB,偏移地址也可用16位数 据表示 第1章物理地址和逻辑地址的转换将逻辑地址中的段地址左移4位,加上 偏移地址就得到20位物理地址 一个物理地址可以有多个逻辑地址逻辑地址 80:F00 物理地址 1H段地址左移4位 加上偏移地址 得到物理地址14600H + 100H 14700H13800H + F00H 14700H 第1章段寄存器位段寄存器,每个段寄存器确定一个 逻辑段的起始地址,每种逻辑段均有各自的用途 CS(Code Segment) 指明代码段的起始地址 SS(Stack Segment) 指明堆栈段的起始地址 DS(Data Segment) 指明数据段的起始地址 ES(Extra Segment) 指明附加段的起始地址 第1章代码段(Code Segment)代码段用来存放程序的指令序列代码段寄存器CS存放代码段的段地址 指令指针寄存器IP指示下条指令的偏移地址处理器利用CS:IP取得下一条要执行的 指令 第1章堆栈段(Stack Segment)堆栈段确定堆栈所在的主存区域堆栈段寄存器SS存放堆栈段的段地址 堆栈指针寄存器SP指示堆栈栈顶的偏移地址处理器利用SS:SP操作堆栈顶的数据 第1章数据段(Data Segment)数据段存放运行程序所用的数据数据段寄存器DS存放数据段的段地址 各种主存寻址方式(有效地址EA)得到存 储器中操作数的偏移地址处理器利用DS:EA存取数据段中的数据 第1章附加段(Extra Segment)附加段是附加的数据段,也用于数据的保 存:附加段寄存器ES存放附加段的段地址 各种主存寻址方式(有效地址EA)得到存储器中 操作数的偏移地址处理器利用ES:EA存取附加段中的数据 串操作指令将附加段作为其目的操作数的存 放区域 第1章如何分配各个逻辑段程序的指令序列必须安排在代码段 程序使用的堆栈一定在堆栈段 程序中的数据默认是安排在数据段, 也经常安排在附加段,尤其是串操作 的目的区必须是附加段 数据的存放比较灵活,实际上可以存 放在任何一种逻辑段中 第1章段超越前缀指令没有指明时,一般的数据访问在DS段;使用 BP访问主存,则在SS段 默认的情况允许改变,需要使用段超越前缀 指令;8086指令系统中有4个: CS: SS: DS: ES:;代码段超越,使用代码段的数据 ;堆栈段超越,使用堆栈段的数据 ;数据段超越,使用数据段的数据 ;附加段超越,使用附加段的数据 第1章段超越的示例没有段超越的指令实例:MOV AX,[2000H] ;AX←DS:[2000H] ;从默认的DS数据段取出数据采用段超越前缀的指令实例:MOV AX,ES:[2000H] ;AX←ES:[2000H] ;从指定的ES附加段取出数据 第1章段寄存器的使用规定默认 CS SS DS SS DS ES 可超越 无 无 CS ES SS CS ES DS CS ES SS 无 偏移地址 IP SP 有效地址EA 有效地址EA SI DI访问存储器的方式 取指令 堆栈操作 一般数据访问 BP基址的寻址方式 串操作的源操作数 串操作的目的操作数 第1章存储器的分段8086对逻辑段要求:段地址低4位均为0 每段最大不超过64KB8086对逻辑段并不要求:必须是64KB 各段之间完全分开(即可以重叠) 第1章各个逻辑段独立 第1章各个逻辑段重叠 第1章1MB空间的分段1MB空间最多能分成多少个段? 每隔16个存储单元就可以开始一个段 所以1MB最多可以有: 220÷16=216=64K 个段 1MB空间最少能分成多少个段? 每隔64K个存储单元开始一个段 所以1MB最少可以有: 220÷216=16 个段 第1章1.6 8086的寻址方式指令系统设计了多种操作数的来源 寻找操作数的过程就是操作数的寻址 操作数采取哪一种寻址方式,会影响机器运行的速 度和效率 如何寻址一个操作数对程序设计很重要上机实践的建议配合调试程序单步执行每条指令 或调用IO.LIB的子程序显示结果 第1章指令的组成 操作码 操作数指令由操作码和操作数两部分组成 操作码说明计算机要执行哪种操作,如传送、运 算、移位、跳转等操作,它是指令中不可缺少的 成部分 操作数是指令执行的参与者,即各种操作的对象 有些指令不需要操作数,通常的指令都有一个或 个操作数,个别指令有3个甚至4个操作数 第1章指令的操作码和操作数每种指令的操作码:用一个唯一的助记符表示(指令功能的英文缩 写) 对应着机器指令的一个二进制编码指令中的操作数:可以是一个具体的数值 可以是存放数据的寄存器 或指明数据在主存位置的存储器地址 第1章8086的机器代码格式1/2字节 操作码0/1字节 mod reg r/m0/1/2字节 位移量0/1/2字节 立即数操作 表明采用的寻址方式(表1.7) 给出某些寻址方式需要的对基地址的偏移量 给出立即寻址方式需要的数值本身 第1章标准机器代码示例1/2字节 操作码 0/1字节 mod reg r/m 0/1/2字节 位移量 0/1/2字节 立即数mov ax,[BP+0] ;机器代码是 8B 46 00 前一个字节8B是操作码(含w=1表示字操作) 中间一个字节46(01 000 110)是 “mod reg r/m”字节reg=000表示目的操作数为AX mod=01和r/m=110表示源操作数为[BP+D8]最后一个字节就是8位位移量〔D8=〕00 第1章其它机器代码形式 操作码 操作数mov al,05 ;机器代码是B0 05 前一个字节B0是操作码(含一个操作 数AL),后一个字节05是立即数 mov ax,0102H ;机器代码是B8 02 01 前一个字节B8是操作码(含一个操作 数AX),后两个字节02 01是16位立即 数(低字节02在低地址) 第1章指令的助记符格式 操作数1,操作数2 ;注释操作码操作数2,称为源操作数 src,它表示参与 指令操作的一个对象 操作数1,称为目的操作数 dest,它不仅可 以作为指令操作的一个对象,还可以用来存 放指令操作的结果 分号后的内容是对指令的解释 第1章传送指令MOV的格式MOV dest,srcMOV MOV MOV MOV MOV AL,05H BX,AX AX,[SI] AX,[BP+06H] AX,[BX+SI];dest←src功能:将源操作数src传送至目的操作数dest;AL←05H ;BX←AX ;AX←DS:[SI] ;AX←SS:[BP+06H] ;AX←DS:[BX+SI] 第1章传送指令MOV的功能30H目的操作数 dest 被传送的数据30H源操作数 src 第1章立即数寻址方式指令中的操作数直接存放在机器代码中,紧 跟在操作码之后(操作数作为指令的一部分 存放在操作码之后的主存单元中) 这种操作数被称为立即数imm它可以是8位数值i8(00H~FFH) 也可以是16位数值i16(0000H~FFFFH)立即数寻址方式常用来给寄存器赋值MOV AL,05H MOV AX,0102H;AL←05H ;AX←0102H 第1章立即数寻址指令MOV AX,0102H;AX←0102H立即寻址 第1章寄存器寻址方式操作数存放在CPU的内部寄存器reg中:8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL 16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP 4个段寄存器seg: CS、DS、SS、ESMOV AX,1234H ;AX←1234H MOV BX,AX ;BX←AX 第1章寄存器寻址指令MOV BX,AX;BX←AX寄存器寻址 第1章存储器寻址方式指令中给出操作数的主存地址信息(偏移地 址,称之为有效地址EA),而段地址在默 认的或用段超越前缀指定的段寄存器中 8086设计了多种存储器寻址方式1、直接寻址方式 2、寄存器间接寻址方式 3、寄存器相对寻址方式 4、基址变址寻址方式 5、相对基址变址寻址方式 第1章直接寻址方式有效地址在指令中直接给出 默认的段地址在DS段寄存器,可 用段超越前缀改变MOV AX,[2000H] ;AX←DS:[2000H] ;指令代码:A1 00 20 MOV AX,ES:[2000H] ;AX←ES:[2000H] ;指令代码:26 A1 00 20 第1章直接寻址指令 ;AX←DS:[2000H]MOV AX,[2000H]直接寻址 第1章寄存器间接寻址方式有效地址存放在基址寄存器BX或变址 寄存器SI、DI中 默认的段地址在DS段寄存器,可使用 段超越前缀改变MOV AX,[SI] ;AX←DS:[SI]间接寻址 第1章寄存器相对寻址方式有效地址是寄存器内容与有符号8位或16位 位移量之和,寄存器可以是BX/BP或SI/DI有效地址=BX/BP/SI/DI+8/16位位移量段地址对应BX/SI/DI寄存器默认在DS,对 应BP寄存器默认在SS;可用段超越前缀 MOV AX,[DI+06H] ;AX←DS:[DI+06H] MOV AX,[BP+06H] ;AX←SS:[BP+06H]相对寻址 第1章基址变址寻址方式有效地址由基址寄存器(BX或BP)的内容 加上变址寄存器(SI或DI)的内容构成:有效地址=BX/BP+SI/DI段地址对应BX基址寄存器默认是DS,对应 BP基址寄存器默认是SS;可用段超越前缀MOV AX,[BX+SI] MOV AX,[BP+DI] MOV AX,DS:[BP+DI] ;AX←DS:[BX+SI] ;AX←SS:[BP+DI] ;AX←DS:[BP+DI]基址变址 第1章相对基址变址寻址方式有效地址是基址寄存器(BX/BP)、变址寄存 器(SI/DI)与一个8位或16位位移量之和:有效地址=BX/BP+SI/DI+8/16位位移量段地址对应BX基址寄存器默认是DS,对应 BP基址寄存器默认是SS;可用段超越前缀 MOV AX,[BX+SI+06H] ;AX←DS:[BX+SI+06H] 相对基址变址位移量可用符号表示 同一寻址方式有多种表达形式 第1章寻址方式的多种表示方式位移量可用符号表示:MOV AX,[SI+COUNT] ;COUNT是事先定义的变量或常量(就是数值) MOV AX,[BX+SI+WNUM] ;WNUM是变量或常量同一寻址方式可以写成不同的形式:MOV AX,[BX][SI] ;MOV AX,[BX+SI] MOV AX,COUNT[SI] ;MOV AX,[SI+COUNT] MOV AX,WNUM[BX][SI] ;等同于 MOV AX,WNUM[BX+SI] ;等同于 MOV AX,[BX+SI+WNUM] 第1章寄存器操作数的表达r8――任意一个8位通用寄存器AH AL BH BL CH CL DH DLr16――任意一个16位通用寄存器AX BX CX DX SI DI BP SPreg――代表r8或r16 seg――段寄存器 CS DS ES SS 第1章存储器操作数的表达m8――一个8位存储器操作数单元(所 有主存寻址方式) m16――一个16位存储器操作数单元 (所有主存寻址方式) mem――代表m8或m16 第1章立即数的表达i8――一个8位立即数 i16――一个16位立即数 imm――代表i8或i16 dest――目的操作数 src――源操作数 第1章 教学要求1. 了解微机系统的基本软硬件组成 2. 熟悉汇编语言的基本概念和应用特点 3. 掌握8086的寄存器组和存储器组织 4. 掌握8086的寻址方式 习题 1.10 1.11 1.17 1.19 1.20 1.24 第2章 教学重点重点掌握常用指令功能及应用常用传送指令 加减法指令 逻辑运算和移位指令 控制转移指令 字符(串)输入输出功能调用 第2章什么是指令系统计算机的指令系统就是指该计算机能够执 行的全部指令的集合 每种计算机都有它支持的指令集合 16位8086指令系统是Intel 80x86系列微 处理器指令系统的基础 Intel 80x86系列微处理器指令系统:整数指令 浮点指令 多媒体指令 第2章8086指令系统概述Intel 8086指令系统共有117条基本指令 可分成6个功能组① ② ③ ④ ⑤ ⑥ 数据传送类指令 算术运算类指令 位操作类指令 串操作类指令 控制转移类指令 处理机控制类指令 第2章学习指令的注意事项指令的功能――该指令能够实现何种操作。 通常指令助记符就是指令功能的英文单词或 其缩写形式 指令支持的寻址方式――该指令中的操作数 可以采用何种寻址方式 指令对标志的影响――该指令执行后是否对 各个标志位有影响,以及如何影响 其他方面――该指令其他需要特别注意的地 方,如指令执行时的约定设置、必须预置的 参数、隐含使用的寄存器等 第2章汇编语言指令格式由4部分组成:标号: 指令助记符 目的操作数,源操作数 ; 注释标号表示该指令在主存中的逻辑地址 每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象 注释是对该指令或程序段功能的说明 教学提示全面而准确地理解每条指 令的功能和应用,是编写 汇编语言程序的关键 第2章2.1 数据传送类指令数据传送是计算机中最基本、最重要的一种 操作 传送指令也是最常使用的一类指令 传送指令把数据从一个位置传送到另一个位 置 除标志寄存器传送指令外,均不影响标志位 重点掌握 MOV XCHG PUSH POP LEA 第2章2.1.1 通用数据传送指令提供方便灵活的通用传送操作 有3条指令MOV XCHG XLATXCHG XLAT MOV 第2章1. 传送指令MOV(move)把一个字节或字的操作数从源地址传送至目 的地址 MOV reg/mem,imm例题2.1例题2.2 ;立即数送寄存器或主存 MOV reg/mem/seg,reg 例题2.3 ;寄存器送(段)寄存器或主存 MOV reg/seg,mem 例题2.5 MOV reg/mem,seg;主存送(段)寄存器;段寄存器送寄存器或主存 第2章MOV指令传送功能立即数 存 储 器 段寄存器 CS DS ES SS 通用寄存器 AX BX CX DX BP SP SI DIMOV并非任意传送 第2章非法传送种种示例两个操作数的类型不一致例如源操作数是字节,而目的操作数是 字;或相反两个操作数不能都是存储器示例传送指令很灵活,但主存之间的直接传送 却不允许段寄存器的操作有一些限制示例段寄存器属专用寄存器,对他们的操作能 力有限 第2章2. 交换指令XCHG(exchange)把两个地方的数据进行互换XCHG reg,reg/mem;reg ? reg/mem寄存器与寄存器之间对换数据 寄存器与存储器之间对换数据例题2.6 例题2.7不能在存储器与存储器之间对换数据 第2章3. 换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的 一个字节数据取出赋给AL XLAT;al←ds:[bx+al]例题2.8换码指令执行前:主存建立一个字节量表格,含要转换成的目的代码 表格首地址存放于BX,AL存放相对表格首的位移量换码指令执行后:将AL寄存器的内容转换为目标代码 第2章2.1.2 堆栈操作指令堆栈:后进先出 FILO,位于堆栈 段;SS段寄存器 记录其段地址 堆栈只有一个出 口,即当前栈 顶;用堆栈指针 寄存器SP指定 第2章堆栈的操作堆栈只有两种基本操作:进栈和出栈, 对应两条指令PUSH和POP PUSH;进栈指令先使堆栈指 针SP减2,然后把一个字操作数 存入堆栈顶部 ;出栈指令把栈顶的一 个字传送至指定的目的操作数, 然后堆栈指针SP加2Word Word Word Word Word 5 4 3 2 1POPStack PUSH POP 第2章1. 进栈指令PUSHPUSH r16/m16/seg;SP←SP-2 ;SS:[SP]←r16/m16/segpush ax push [2000h]WordSP -2 Stack PUSH 第2章2. 出栈指令POPPOP r16/m16/seg;r16/m16/seg←SS:[SP] ;SP←SP+2pop ax pop [2000h]SP+2WordStack POP 第2章堆栈的特点堆栈操作的单位是字,进栈和出栈只对字量 字量数据从栈顶压入和弹出时,都是低地址 字节送低字节,高地址字节送高字节 堆栈操作遵循先进后出原则,但可用存储器 寻址方式随机存取堆栈中的数据 堆栈常用来 临时存放数据 传递参数 例题2.11 保存和恢复寄存器 第2章2.1.3 标志传送指令标志寄存器传送指令用来传送标志寄存 器FLAGS的内容 标志位操作指令直接对CF、DF、IF标 志进行复位或置位 第2章1. 标志寄存器传送标志寄存器传送指令用来传送标志寄存 器FLAGS的内容,方便进行对各个标 志位的直接操作 有2对4条指令低8位传送:LAHF和SAHF 16位传送:PUSHF和POPF 第2章标志低字节进出AH指令LAHF;AH←FLAGS的低字节 LAHF指令将标志寄存器 的低字节送寄存器AH SF/ZF/AF/PF/CF状态标 志 位 分 别 送 入 AH 的 第 7/6/4/2/0 位 , 而 AH 的 第5/3/1位任意SAHF;FLAGS的低字节←AH SAHF 将 AH 寄 存 器 内 容 送FLAGS的低字节 用AH的第7/6/4/2/0位 相 应 设 置 SF/ZF/AF/ PF/CF标志 第2章标志寄存器进出堆栈指令PUSHF;SP←SP-2 ;SS:[SP]←FLAGS PUSHF指令将标志寄存 器的内容压入堆栈, 同时栈顶指针SP减2POPF;FLAGS←SS:[SP] ;SP←SP+2 POPF指令将栈顶字单元 内容送标志寄存器,同 时栈顶指针SP加2例题2.12 第2章2. 标志位操作标志位操作指令直接对CF、DF、IF标 志进行复位或置位,常用于特定的情况 对标志位进行设置的指令CLC CLD CLI STC STD STI CMC 第2章进位标志操作指令用于任意设置进位标志 CLC STC CMC;复位进位标志:CF←0 ;置位进位标志:CF←1 ;求反进位标志:CF←~CF 第2章方向标志操作指令串操作指令中,需要使用 CLD ;复位方向标志:DF←0 STD ;置位方向标志:DF←1 第2章中断标志操作指令在编写中断服务程序时,需要控制 可屏蔽中断的允许和禁止 CLI STI;复位中断标志:DF←0 ;置位中断标志:DF←1 第2章2.1.4 地址传送指令地址传送指令将存储器单元的逻辑地址 送至指定的寄存器有效地址传送指令 LEA 指针传送指令 LDS和LES注意不是获取存储器单元的内容 第2章有效地址传送指令LEA(load EA)将存储器操作数的有效地址传送至 指定的16位寄存器中LEA r16,mem;r16←mem的有效地址EA例题2.13 第2章指针传送指令LDS r16,mem LES r16,mem ;r16←mem, ;r16←mem, ;DS←mem+2 ;ES←mem+2 LDS 指 令 将 主 存 中 LES 指 令 将 主 存 中 mem 指 定 的 字 送 至 mem 指 定 的 字 送 至 r16 , 并 将 mem 的 下 r16,并将mem的下 一字送DS寄存器 一字送ES寄存器例题2.14 第2章2.1.5 输入输出指令8086通过输入输出指令与外设进行数 据交换;呈现给程序员的外设是端口 (Port)即I/O地址 8086用于寻址外设端口的地址线为16 条 , 端 口 最 多 为216 =65536(64K) 个,端口号为0000H~FFFFH 每个端口用于传送一个字节的外设数据 第2章输入输出寻址方式8086的端口有64K个,无需分段,设计 有两种寻址方式直接寻址:只用于寻址00H~FFH前256个 端口,操作数i8表示端口号 间接寻址:可用于寻址全部64K个端口, DX寄存器的值就是端口号大于FFH的端口只能采用间接寻址方式 第2章输入指令IN将外设数据传送给CPU内的AL/AX例题2.15IN AL,i8;字节输入:AL←I/O端口(i8直接寻址)IN AL,DX;字节输入:AL←I/O端口(DX间接寻址)IN AX,i8;字输入:AX←I/O端口(i8直接寻址)IN AX,DX;字输入:AX←I/O端口(DX间接寻址) 第2章输出指令OUT将CPU内的AL/AX数据传送给外设例题2.16OUT i8,AL;字节输出:I/O端口←AL(i8直接寻址)OUT DX,AL;字节输出:I/O端口←AL(DX间接寻址)OUT i8,AX;字输出:I/O端口←AX(i8直接寻址)OUT DX,AX;字输出:I/O端口←AX(DX间接寻址) 第2章2.2 算术运算类指令四则运算是计算机经常进行的一种操作。算 术运算指令实现二进制(和十进制)数据的 四则运算 请注意算术运算类指令对标志的影响 掌 握:ADD/ADC/INC、SUB/SBB/DEC/ NEG/CMP 熟悉:MUL/IMUL、DIV/IDIV 理解:CBW/CWD、DAA/DAS、 AAA/ AAS/AAM/AAD 第2章加法指令ADDADD指令将源与目的操作数相加,结 果送到目的操作数 ADD指令按状态标志的定义相应设置例题2.17aADD reg,imm/reg/mem;reg←reg+imm/reg/memADD mem,imm/reg;mem←mem+imm/reg 第2章带进位加法指令ADCADC指令将源与目的操作数相加,再加上进 位CF标志,结果送到目的操作数 ADC指令按状态标志的定义相应设置 ADC指令主要与ADD配合,实现多精度加法 运算例题2.17bADC reg,imm/reg/mem;reg←reg+imm/reg/mem+CFADC mem,imm/reg;mem←mem+imm/reg+CF 第2章增量指令INC(increment)INC指令对操作数加1(增量) INC指令不影响进位CF标志,按定义设 置其他状态标志INC reg/mem;reg/mem←reg/mem+1inc bx inc byte ptr [bx] 第2章减法指令SUB(subtract)SUB 指 令 将 目 的 操 作 数 减 去 源 操 作 数,结果送到目的操作数 SUB指令按照定义相应设置状态标志例题2.18aSUB reg,imm/reg/mem;reg←reg-imm/reg/memSUB mem,imm/reg;mem←mem-imm/reg 第2章带借位减法指令SBBSBB指令将目的操作数减去源操作数,再减 去借位CF(进位),结果送到目的操作数。 SBB指令按照定义相应设置状态标志 SBB指令主要与SUB配合,实现多精度减法 运算例题2.18bSBB reg,imm/reg/mem;reg←reg-imm/reg/mem-CFSBB mem,imm/reg;mem←mem-imm/reg-CF 第2章减量指令DEC(decrement)DEC指令对操作数减1(减量) DEC指令不影响进位CF标志,按定义 设置其他状态标志DEC reg/mem;reg/mem←reg/mem-1dec cx INC指令和DEC指令都是单操作数指令 dec word ptr [si] 主要用于对计数器和地址指针的调整 第2章求补指令NEG(negative)NEG指令对操作数执行求补运算:用 零减去操作数,然后结果返回操作数 求补运算也可以表达成:将操作数按位 取反后加1 NEG指令对标志的影响与用零作减法 的SUB指令一样NEG reg/mem;reg/mem←0-reg/mem例题2.19 第2章比较指令CMP(compare)CMP指令将目的操作数减去源操作数,按 照定义相应设置状态标志 CMP指令执行的功能与SUB指令,但结果 不回送目的操作数例题2.20CMP reg,imm/reg/mem;reg-imm/reg/memCMP mem,imm/reg;mem-imm/reg 第2章2.2.3 乘法指令MUL r8/m8;无符号字节乘法 ;AX←AL×r8/m8IMUL r8/m8;有符号字节乘法 ;AX←AL×r8/m8MUL r16/m16;无符号字乘法 ;DX.AX←AX×r16/m16说明IMUL r16/m16;有符号字乘法 ;DX.AX←AX×r16/m16例题2.21 第2章2.2.4 除法指令DIV r8/m8;无符号字节除法: AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余数说明DIV r16/m16 IDIV r8/m8;无符号字除法: ;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余数 ;有符号字节除法: AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余数例题2.22IDIV r16/m16 ;有符号字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余数 第2章2.2.5 符号扩展指令;AL的符号扩展至AH ;如AL的最高有效位是0,则AH=00 ;AL的最高有效位为1,则AH=FFH。AL不变 ;AX的符号扩展至DX ;如AX的最高有效位是0,则DX=00 ;AX的最高有效位为1,则DX=FFFFH。AX不变例题2.23 什么是符号扩展 符号扩展指令常用于获得倍长的数据CBWCWD例题2.24 第2章2.2.6 十进制调整指令十进制数调整指令对二进制运算的结果进 行十进制调整,以得到十进制的运算结果 分成压缩BCD码和非压缩BCD码调整 压缩BCD码就是通 常的8421码;它用 4个二进制位表示一 个十进制位,一个 字节可以表示两个 十进制位,即00~ 99 非 压 缩 BCD 码 用 8 个二进制位表示一 个十进制位,只用 低4个二进制位表 示一个十进制位 0~9,高4位任 意,通常默认为0 第2章BCD码(Binary Coded Decimal)二进制编码的十进制数:一位十进制数 用4位二进制编码来表示 8086支持压缩BCD码和非压缩BCD码 的调整运算真值 二进制编码 压缩BCD码 非压缩BCD码 8 08H 08H 08H 64 40H 64H 0604H 第2章压缩BCD码加、减调整指令(SUB AL,i8/r8/m8) (SBB AL,i8/r8/m8)(ADD AL,i8/r8/m8) (ADC AL,i8/r8/m8)DAA例题2.25aDAS例题2.25b;AL←将AL的加和调整 为压缩BCD码;AL←将AL的减差调整 为压缩BCD码使用DAA或DAS指令前,应先执行以AL为 目的操作数的加法或减法指令 DAA和DAS指令对OF标志无定义,按结果 影响其他标志,例如CF反映压缩BCD码相 加或减的进位或借位状态 例题2.26 第2章非压缩BCD码加、减调整指令(SUB AL,i8/r8/m8) (SBB AL,i8/r8/m8)(ADD AL,i8/r8/m8) (ADC AL,i8/r8/m8)AAA例题2.27aAAS例题2.27b; AL← 将 AL 的 加 和 调 整 ;AL←将AL的减差调整 为非压缩BCD码 为非压缩BCD码 ;AH←AH+调整的进位 ;AH←AH-调整的借位 使用AAA或AAS指令前,应先执行以AL为目的操 作数的加法或减法指令 AAA和AAS指令在调整中产生了进位或借位,则 AH要加上进位或减去借位,同时CF=AF=1,否则 CF=AF=0;它们对其他标志无定义 第2章非压缩BCD码乘、除调整指令例题2.27c(MUL r8/m8)AAD例题2.27dAAM;AX←将AX中非压缩BCD 码扩展成二进制数 ;AX←将AX的乘积调整为 (DIV r8/m8) 非压缩BCD码 AAM指令跟在字节乘MUL之后,将乘积调整为非 压缩BCD码 AAD指令跟在字节除DIV之前,先将非压缩BCD 码的被除数调整为二进制数 AAM和AAD指令根据结果设置SF、ZF和PF,但对 OF、CF和AF无定义 第2章习题2.9设X、Y、Z、V均为16位 带符号数,分别存放在 X、Y、Z、V存储单元 中,阅读如下程序段,得 出它的运算公式,并说明 运算结果存于何处?65 F3 02 00 24 E0 05 00V Z Y X 习题2.9:算术运算1mov ax,X imul Y mov cx,ax mov bx,dx mov ax,Z cwd add cx,ax adc bx,dx;DX.AX=X×Y ;BX.CX=X×Y;BX.CX=X×Y+Z 习题2.9:算术运算2sub cx,540 sbb bx,0 ;BX.CX=X×Y+Z-540 mov ax,V cwd sub ax,cx sbb dx,bx ;DX.AX=V-(X×Y+Z-540) idiv X ;DX.AX=(V-(X×Y+Z-540))÷X 教学提示在正确理解每条指令的功能 基础上,可以阅读和编写有 实际意义的程序段 第2章2.3 位操作类指令位操作类指令以二进制位为基本单位进行数 据的操作 这是一类常用的指令,都应该掌握 注意这些指令对标志位的影响 1、逻辑运算指令 AND OR XOR NOT TEST 2、移位指令 SHL SHR SAR 3、循环移位指令 ROL ROR RCL RCR 第2章逻辑与指令AND对两个操作数执行逻辑与运算,结果送到目 的操作数 AND reg,imm/reg/mem ;reg←reg∧imm/reg/mem AND mem,imm/reg;mem←mem∧imm/reg只有相“与”的两位都是1,结果 才是1;否则,“与”的结果为0 AND指令设置CF = OF = 0,根据结果 设置SF、ZF和PF状态,而对AF未定义 第2章逻辑或指令OR对两个操作数执行逻辑或运算,结果送到目 的操作数 OR reg,imm/reg/mem OR mem,imm/reg;reg←reg∨imm/reg/mem ;mem←mem∨imm/reg只要相“或”的两位有一位是1, 结果就是1;否则,结果为0 OR指令设置CF = OF = 0,根据结果设 置SF、ZF和PF状态,而对AF未定义 第2章逻辑异或指令XOR对两个操作数执行逻辑异或运算,结果送到 目的操作数 XOR reg,imm/reg/mem ;reg←regimm/reg/mem XOR mem,imm/reg;mem←memimm/reg只有相“异或”的两位不相同,结 果才是1;否则,结果为0 XOR指令设置CF = OF = 0,根据结果 设置SF、ZF和PF状态,而对AF未定义 第2章逻辑非指令NOT对一个操作数执行逻辑非运算NOT reg/mem;reg/mem←~reg/mem按位取反,原来是“0”的位变为 “1”;原来是“1”的位变为“0” NOT指令是一个单操作数指令 NOT指令不影响标志位 例题:逻辑运算mov al,45h and al,31h mov al,45h or al,31h mov al,45h xor al,31h mov al,45h not al;逻辑与 al=01h ;CF=OF=0,SF=0、ZF=0、PF=0 ;逻辑或 al=75h ;CF=OF=0,SF=0、ZF=0、PF=0 ;逻辑异或 al=74h ;CF=OF=0,SF=0、ZF=0、PF=1 ;逻辑非 al=0bah ;标志不变 例题:逻辑指令应用;AND指令可用于复位某些位(同0相与),不 影响其他位:将BL中D3和D0位清0,其他位不变 and bl,B ;OR指令可用于置位某些位(同1相或),不影 响其他位:将BL中D3和D0位置1,其他位不变 or bl, B ;XOR指令可用于求反某些位(同1相异或), 不影响其他位:将BL中D3和D0位求反,其他不变 xor bl, B 第2章测试指令TEST对两个操作数执行逻辑与运算,结果不回送 到目的操作数 TEST reg,imm/reg/mem ;reg∧imm/reg/mem TEST mem,imm/reg;mem∧imm/reg只有相“与”的两位都是1,结果 才是1;否则,“与”的结果为0 TEST指令设置CF = OF = 0,根据结果 设置SF、ZF和PF状态,而对AF未定义 TEST例2.32:测试为0或1test al,01h ;测试AL的最低位D0 jnz there ;标志ZF=0,即D0=1 ;则程序转移到there ... ;否则ZF=1,即D0=0,顺序执行 there: ...TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况 第2章移位指令(shift)将操作数移动一位或多位,分成逻辑移位和 算术移位,分别具有左移或右移操作 SHL reg/mem,1/CL;逻辑左移,最高位进入CF,最低位补0 SAL与SHL相同 SHR reg/mem,1/CLSAL reg/mem,1/CL SAR reg/mem,1/CL;逻辑右移,最低位进入CF,最高位补0 ;算术左移,最高位进入CF,最低位补0;算术右移,最低位进入CF,最高位不变 第2章移位指令的操作数移位指令的第一个操作数是指定的被移 位的操作数,可以是寄存器或存储单元 后一个操作数表示移位位数,该操作数 为1,表示移动一位;当移位位数大于 1时,则用CL寄存器值表示,该操作数 表达为CL 第2章移位指令对标志的影响按照移入的位设置进位标志CF 根据移位后的结果影响SF、ZF、PF 对AF没有定义 如果进行一位移动,则按照操作数的最高符 号位是否改变,相应设置溢出标志OF:如 果移位前的操作数最高位与移位后操作数的 最高位不同(有变化),则OF = 1;否则 OF = 0。当移位次数大于1时,OF不确定 例2.33:移位指令mov cl,4 mov al,0f0h ;al=f0h shl al,1 ;al=e0h ;CF=1,SF=1、ZF=0、PF=0,OF=0 shr al,1 ;al=70h ;CF=0,SF=0、ZF=0、PF=0、OF=1 sar al,1 ;al=38h ;CF=0,SF=0、ZF=0、PF=0、OF=0 sar al,cl ;al=03h ;CF=1,SF=0、ZF=0、PF=1 第2章循环移位指令(rotate)将操作数从一端移出的位返回到另一端形成 循环,分成不带进位和带进位,分别具有左 移或右移操作ROL reg/mem,1/CL ;不带进位循环左移 ROR reg/mem,1/CL ;不带进位循环右移 RCL reg/mem,1/CL ;带进位循环左移 RCR reg/mem,1/CL ;带进位循环右移 第2章循环移位指令对标志的影响按照指令功能设置进位标志CF 不影响SF、ZF、PF、AF 如果进行一位移动,则按照操作数的最高符 号位是否改变,相应设置溢出标志OF:如 果移位前的操作数最高位与移位后操作数的 最高位不同(有变化),则OF = 1;否则 OF = 0。当移位次数大于1时,OF不确定 例2.35:32位数移位;将DX.AX中32位数值左移一位 shl ax,1 rcl dx,1DX AX 0CF 例2.36:位传送;把AL最低位送BL最低位,保持AL不变 AL、BL ror bl,1 CF ror al,1BLAL之D0CFrcl bl,1 rol al,1CF AL 例2.37:BCD码合并;AH.AL分别存放着非压缩BCD码的两位 ;将它们合并成为一个压缩BCD码存AL and ax,0f0fh ;保证高4位为0 mov cl,4 rol ah,cl ;也可以用shl ah,cl add al,ah ;也可以用or al,ah 第2章2.4 控制转移类指令控制转移类指令用于实现分支、循环、过程 等程序结构,是仅次于传送指令的常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET INT n/IRET 常用系统功能调用 一般了解: LOOPZ/LOOPNZ INTO 控制转移类指令通过改变IP(和CS) 值,实现程序执行顺序的改变 第2章2.4.1 无条件转移指令JMP label ;程序转向label标号指定的地址只要执行无条件转移指令JMP,就使程序转到指 定的目标地址处,从目标地址处开始执行指令 操作数label是要转移到的目标地址(目的地址、 转移地址) JMP指令分成4种类型: ⑴ 段内转移、相对寻址 ⑵ 段内转移、间接寻址 ⑶ 段间转移、直接寻址 ⑷ 段间转移、间接寻址 第2章目标地址的寻址方式用标号表达相对寻址方式相对寻址方式以当前IP为基地址,加 上位移量构成目标地址直接寻址方式用标号表达转移地址象立即数一样,直接在指令 的机器代码中间接寻址方式用寄存器或存储 器操作数表达转移地址在寄存器或主存单元中 第2章目标地址的范围:段内段内转移――近转移(near)在当前代码段64KB范围内转移 ( ±32KB范围) 不需要更改CS段地址,只要改 变IP偏移地址代 码 段段内转移――短转移(short)转移范围可以用一个字节表达, 在段内-128~+127范围的转移代 码 段 第2章目标地址的范围:段间段间转移――远转移(far)从当前代码段跳转到另一个 代码段,可以在1MB范围 更改CS段地址和IP偏移地址 目标地址必须用一个32位数 表达,叫做32位远指针,它 就是逻辑地址代 码 段代 码 段实际编程时,MASM汇编程序会根据目标地址的 距离,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制 第2章段内转移、相对寻址 ;IP←IP+位移量JMP label位移量是紧接着JMP指令后的那条指令的偏移地 址,到目标指令的偏移地址的地址位移 当向地址增大方向转移时,位移量为正;向地址减 小方向转移时,位移量为负 again: dec cx ;标号again的指令 …… ;转移到again处继续执行 jmp again …… ;转向output jmp output …… output: mov result,al ;标号output的指令 第2章段内转移、间接寻址JMP r16/m16;IP←r16/m16将一个16位寄存器或主存字单元内容送入IP 寄存器,作为新的指令指针,但不修改CS寄存 器的内容 jmp ax ;IP←AX jmp word ptr [2000h] ;IP←[2000h] 第2章段间转移、直接寻址JMP far ptr label;IP←label的偏移地址 ;CS←label的段地址 将标号所在段的段地址作为新的CS值, 标号在该段内的偏移地址作为新的IP值;这 样,程序跳转到新的代码段执行 jmp far ptr otherseg ;远转移到代码段2的otherseg 第2章段间转移、间接寻址JMP far ptr mem;IP←[mem],CS←[mem+2] 用一个双字存储单元表示要跳转的目标地 址。这个目标地址存放在主存中连续的两个 字单元中的,低位字送IP寄存器,高位字送 CS寄存器mov word ptr [bx],0 mov word ptr [bx+2],1500h JMP far ptr [bx] ;转移到1500h:0 第2章2.4.2 条件转移指令Jcc label;条件满足,发生转移:IP←IP+8位位移量 ;条件不满足,顺序执行 指定的条件cc如果成立,程序转移到由标号label 指定的目标地址去执行指令;条件不成立,则程 序将顺序执行下一条指令 操作数label是采用相对寻址方式的短转移标号 表示Jcc指令后的那条指令的偏移地址,到目标 指令的偏移地址的地址位移 距当前IP地址-128~+127个单元的范围之内 第2章Jcc指令的分类Jcc 指 令 不 影 响 标 志 , 但 要 利 用标志 (表2.2)。根据利用的标志位不同, 16条指令分成3种情况:1. 判断单个标志位状态 2. 比较无符号数高低 3. 比较有符号数大小 第2章判断单个标志位状态这组指令单独判断5个状态标志之一 ⑴JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否 例题2.38 例题2.38 为零(或相等) ⑵JS和JNS:利用符号标志SF,判断结果是正是负 例题2.39 例题2.39 ⑶ JO 和 JNO :利用溢出标志OF,判断结果是否产生 例题2.40 例题2.40 溢出 ⑷ JP/JPE 和 JNP/JPO :利用奇偶标志PF,判断结果 中“1”的个数是偶是奇 例题2.41 例题2.41 ⑸ JC/JB/JNAE 和 JNC/JNB/JAE :利用进位标志CF, 例题2.42 例题2.42 判断结果是否进位或借位 第2章比较无符号数高低无 符 号 数 的 大 小 用 高 ( Above ) 低 (Below)表示 利 用 CF 确 定 高 低 、 利 用 ZF 标 志 确 定 相 等 (Equal) 两数的高低分成4种关系: ⑴ 低于(不高于等于):JB(JNAE) ⑵ 不低于(高于等于):JNB(JAE) ⑶ 低于等于(不高于):JBE(JNA) ⑷ 不低于等于(高于):JNBE(JA ) 例2.43a:比较无符号数next:cmp ax,bx ;比较ax和bx jnb next ;若ax≥bx,转移 xchg ax,bx ;若ax<bx,交换 ... 结果:AX保存较大的无符号数 第2章比较有符号数大小有符号数的大(Greater)小(Less)需要 组合OF、SF标志,并利用ZF标志确定相等 (Equal) 两数的大小分成4种关系: ⑴ 小于(不大于等于):JL(JNGE) ⑵ 不小于(大于等于):JNL(JGE) ⑶ 小于等于(不大于):JLE(JNG) ⑷ 不小于等于(大于):JNLE(JG ) 例2.43b:比较有符号数next:cmp ax,bx ;比较ax和bx jnl next ;若ax≥bx,转移 xchg ax,bx ;若ax<bx,交换 ... 结果:AX保存较大的有符号数 第2章2.4.3 循环指令(loop) JCXZ label ;CX=0,转移到标号label LOOP label ;CX←CX-1,;CX≠0,循环到标号labelLOOPZ label ;CX←CX-1,;CX≠0且ZF=1,循环到标号labelLOOPNZ label ;CX←CX-1,;CX≠0且ZF=0,循环到标号label循环指令默认利用CX计数器 label操作数采用相对短转移寻址方式 cmp cx,0 jz next例2.44:记录空格个数mov cx,count ;设置循环次数 mov si,offset string xor bx,bx ;bx=0,记录空格数 jcxz done mov al,20h ;如果长度为0,退出 again: cmp al,es:[si] jnz next ;ZF=0非空格,转移 inc bx ;ZF=1是空格,个数加1 next: inc si dec cx loop again jnz again ;字符个数减1,不为0继续循环 第2章2.4.4 子程序指令子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能 时,采用CALL调用指令转移到该子程序的 起始处执行 当运行完子程序功能后,采用RET返回指令 回到主程序继续执行演示 第2章子程序调用指令CALL指令分成4种类型(类似JMP)CALL label CALL r16/m16 CALL far ptr label CALL far ptr mem ;段内调用、相对寻址 ;段内调用、间接寻址 ;段间调用、直接寻址 ;段间调用、间接寻址CALL指令需要保存返回地址:段内调用――入栈偏移地址IP SP←SP-2,SS:[SP]←IP 段间调用――入栈偏移地址IP和段地址CS SP←SP-2,SS:[SP]←IP SP←SP-2,SS:[SP]←CS 第2章子程序返回指令根据段内和段间、有无参数,分成4种类型RET RET i16 RET RET i16 ;无参数段内返回 ;有参数段内返回 ;无参数段间返回 ;有参数段间返回i16参数的作用需要弹出CALL指令压入堆栈的返回地址段内返回――出栈偏移地址IP IP←SS:[SP], SP←SP+2 段间返回――出栈偏移地址IP和段地址CS IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2 例2.45:子程序 ;主程序mov al,0fh ;提供参数AL call htoasc ;调用子程序 ;只取al的低4位 ;al高4位变成3 ;是0~9,还是0Ah~0Fh ;是0Ah~0Fh,加上7 ;子程序返回... ;子程序:将AL低4位的一位16进制数转换成ASCII码htoasc: and al,0fh or al,30h cmp al,39h jbe htoend add al,7 htoend: ret 第2章2.4.5 中断指令中断(Interrupt )是又一种改变程序 执行顺序的方法 中断具有多种中断类型 中断的指令有3条:INT i8 IRET INTO本节主要掌握类似子程序调用指令的中 断调用指令INT i8,进而学习使用DOS 功能调用 第2章8086的外部中断8086可以管理256个中断 各种中断用一个向量编号来区别 主要分成外部中断和内部中断 外部中断――来自CPU之外的原因引起的中 断,又可以分成可屏蔽中断:可由CPU的中断允许标志IF控制 非屏蔽中断:不受CPU的中断允许标志IF控制 第2章8086的内部中断内部中断――CPU内部执行程序引起的中 断,又可以分成:除法错中断:执行除法指令,结果溢出产生的 0 号中断 指令中断:执行中断调用指令INT i8产生的 i8 号中断 断点中断:用于断点调试(INT 3)的 3 号中断 溢出中断:执行溢出中断指令,OF=1产生的 4 号中断 单步中断:TF=1在每条指令执行后产生的 1 号中断 第2章中断指令INT INT i8;中断调用指令:产生i8号中断IRET;中断返回指令:实现中断返回INTO;溢出中断指令: ;若溢出标志OF=1,产生4号中断 ;否则顺序执行 第2章2.4.6 系统功能调用21H号中断是DOS提供给用户的用于调 用系统功能的中断,它有近百个功能供用 户选择使用,主要包括设备管理、目录管 理和文件管理三个方面的功能 ROM-BIOS也以中断服务程序的形式, 向程序员提供系统的基本输入输出程序 汇编语言程序设计需要采用系统的各种 功能程序 充分利用操作系统提供的资源是程序设 计的一个重要方面,需要掌握 第2章功能调用的步骤通常按照如下4个步骤进行:⑴ 在AH寄存器中设置系统功能调用号 ⑵ 在指定寄存器中设置入口参数 ⑶ 执行指令INT 21H(或ROM-BIOS的中断向 量号)实现中断服务程序的功能调用 ⑷ 根据出口参数分析功能调用执行情况 第2章输入输出类功能调用向显示器输出字符⒈ 字符的输出 ⒉ 字符串的输出从键盘输入数据⒊ 字符的输入 ⒋ 字符串的输入 ⒌ 按键的判断汇编语言程序裸机 第2章字符输出的功能调用DOS功能调用INT 21H功能号:AH=02H 入口参数:DL=字符的ASCII码 功能:在显示器当前光标位置显示 给定的字符,光标右移一个字符位 置。如按Ctrl-Break或Ctrl-C则退出 例2.46:显示问号;在当前显示器光标位置显示一个问号 mov ah,02h mov dl,'?' int 21h ;设置功能号:ah←02h ;提供入口参数:dl←'?' ;DOS功能调用:显示进行字符输出时,当输出响铃字符(07H) 以 及 退 格 ( 08H ) 、 回 车 ( 0DH ) 和 换 行 (0AH)字符时,该功能调用可以自动识别并 能进行相应处理 第2章字符输出的功能调用显示器功能调用INT 10H功能号:AH=0EH 入口参数:AL=字符的ASCII码 BL=字符的颜色值(图形方式) BH=页号(字符方式) 通常使BX=0 功能:将字符按原属性在光标处显示, 光标自动移到下一个字符位置 第2章字符串输出的功能调用DOS功能调用INT 21H功能号:AH=09H 入口参数: DS:DX=欲显示字符串在主存中的首地址 字符串应以$(24H)结束 功能:在显示器输出指定的字符串可以输出回车(0DH)和换行(0AH)字符 产生回车和换行的作用 例2.47:显示字符串string db 'Hello,Everybody !',0dh,0ah,'$' ;在数据段定义要显示的字符串 ... mov ah,09h ;设置功能号:ah←09h mov dx,offset string ;提供入口参数:dx←字符串的偏移地址 int 21h ;DOS功能调用:显示 第2章字符输入的功能调用DOS功能调用INT 21H功能号:AH=01H 出口参数:AL=字符的ASCII码 功能:获得按键的ASCII代码值调用此功能时,若无键按下,则会一直 等待,直到按键后才读取该键值 例2.48:判断按键getkey: mov ah,01h int 21h cmp al,’Y’ je yeskey cmp al,’N’ je nokey jne getkey ... yeskey: ... nokey: ...;功能号:ah←01h ;功能调用 ;处理出口参数al ;是“Y” ;是“N” 第2章字符输入的功能调用 键盘功能调用INT 16H功能号:AH=0 出口参数:AX=键值代码 对于标准ASCII码按键:AL=ASCII码,AH =扫描码; 对 于 扩 展 按 键 : AL = 00H , AH = 键 扩 展 码; 对于alt+小键盘数字按键:AL=ASCII码, AH=00H此功能类同DOS功能01H,会一直等待 按键 例2.49:字符输入输出mov int mov mov intah,0 16h bx,0 ah,0eh 10h;键盘功能调用(int 16h) ;al←按键的ASCII码 ;显示功能调用(int 10h) ;显示 第2章字符串输入的功能调用功能号:AH=0AH 入口参数:DS:DX=缓冲区首地址 关键要定义好缓冲区DOS功能调用INT 21H执行该功能调用时,用户按键,最后用回车 确认 本调用可执行全部标准键盘编辑命令;用户 按 回 车 键 结 束 输 入 , 如 按 Ctrl + Break 或 Ctrl+C则中止 例2.50:输入字符串;定义缓冲区 ;第1个字节填入可能输入的最大字符数 db 0 ;存放实际输入的字符数 db 81 dup(0) ;存放输入的字符串 ... mov dx,seg buffer ;伪指令seg取得buffer的段地址 mov ds,dx ;设置数据段DS mov dx,offset buffer mov ah,0ah int 21hbuffer db 81 第2章按键判断的功能调用DOS功能调用INT 21H功能号:AH=0BH 出口参数:AL=0,当前没有按键; AL=FFH,当前已经按键。 功能:仅判断当前是否有按下的键, 设置AL后退出 例2.51:按任意键继续... ;提示“按任意键继续” getkey: mov ah,0bh int 21h or al,al ;al=0? jz getkey ;al=0,没有按键,继续等待 ;等同于如下功能调用 mov ah,01h int 21h 第2章按键判断的功能调用键盘功能调用INT 16H功能号:AH=1 出口参数:若标志ZF=1,无键按下; 若ZF=0,有键按下,且AX=键值代码 功能:此子功能仅判断是否按键,设置零位标 志ZF后退出这两个功能调用都不循环等待按键,即使有 键按下,键盘缓冲区仍然保留键值并且没有 被清空,必要时必须用字符输入功能取走键 值清空缓冲区 教学提示在学习和应用汇编语言进行 程序设计时,有一些经常遇 到的问题,例如算术运算、 代码转换等,需要掌握 第2章2.5 串操作类指令串操作指令是8086指令系统中比较独特的 一类指令,采用比较特殊的数据串寻址方 式,常用在操作主存连续区域的数据时 主要熟悉: MOVS STOS LODS CMPS SCAS REP 一般了解: REPZ/REPE REPNZ/REPNE 第2章串数据类型串操作指令的操作数是主存中连续存 放的数据串(String)――即在连续的 主存区域中,字节或字的序列 串操作指令的操作对象是以字(W)为 单位的字串,或是以字节(B)为单位的 字节串 第2章串寻址方式源操作数用寄存器SI寻址,默认在数据段DS中, 但允许段超越:DS:[SI] 目的操作数用寄存器DI寻址,默认在附加段ES 中,不允许段超越:ES:[DI] 每执行一次串操作指令,SI和DI将自动修改: ±1(对于字节串)或±2(对于字串) 执行指令CLD后,DF = 0,地址指针增1或2 执行指令STD后,DF = 1,地址指针减1或2 第2章串传送MOVS(move string)把字节或字操作数从主存的源地址传送 至目的地址MOVSB;字节串传送:ES:[DI]←DS:[SI] ;SI←SI±1,DI←DI±1MOVSW;字串传送:ES:[DI]←DS:[SI] ;SI←SI±2,DI←DI±2 offset是汇编操作符, 求出变量的偏移地址例2.52:字节串传送mov si,offset source mov di,offset destination mov cx,100 ;cx←传送次数 cld ;置DF=0,地址增加 again: movsb ;传送一个字节 dec cx ;传送次数减1 jnz again ;判断传送次数cx是否为0 ;不为0,则到again位置执行指令 ;否则,结束 例2.52:字串传送mov si,offset source mov di,offset destination mov cx,50 ;cx←传送次数 cld ;置DF=0,地址增加 again: movsw ;传送一个字 dec cx ;传送次数减1 jnz again ;判断传送次数cx是否为0 ;不为0,则到again位置执行指令 ;否则,结束 第2章串存储STOS(store string)把AL或AX数据传送至目的地址STOSB;字节串存储:ES:[DI]←AL ;DI←DI±1STOSW;字串存储:ES:[DI]←AX ;DI←DI±2 例2.53:串存储mov ax,0 DI为偶数即可 mov di,0 mov cx,8000h ;cx←传送次数(32×1024) cld ;DF=0,地址增加 again: stosw ;传送一个字 dec cx ;传送次数减1 jnz again ;传送次数cx是否为0 可将CLD改为STD吗?如何改用STOSB? 可不用给DI赋值吗?

我要回帖

更多关于 汇编标志寄存器 的文章

 

随机推荐