版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言本课程的学习方法以课件为主进行学习课件融合多方资料和资源,结合基础和实用的案例,系统全面的讲解汇编语言的使用。选择合适的参考资料,善用网络资源,提高自学能力1.《80x86汇编语言程序设计》华中科技大学出版社王元珍,曹忠升等编著2.《汇编语言程序设计实用教程》清华大学出版社任向民,卢慧琳编著3.《计算机组成与结构》清华大学出版社王爱英编著4.《汇编语言程序设计》电子工业出版社钱晓捷编著5.Debug教程6.善用搜索引擎理论与实验相结合
1.认真听课,首先理解和掌握基本概念和理论,将知识内容进行条理化、层次化,通过实验来理解和体会。
2.积极参加课堂讨论和发言,自已动手,在老师指导下做好每一次实验。
3.有重点地学习,掌握最基础和最常用的知识点和技能,了解如何“把有限的精力投入无限的编程中去”的思想。选择了软件工程师(程序员)职业,就选择了充满挑战和机会、辛苦又充满乐趣、单调和富有成就感的职业。本课程的学习方法基础知识本章结构1.4数据在机内的表示形式1.3存储器1.1计算机语言的发展1.2Intel8060微处理器简介1.5汇编源程序举例基础知识本章要点3.存储器中的数据的访问1.
8086的寄存器2.片外存储器的结构以及地址分段表示法4.外设接口的作用与访问1.1计算机语言的发展1.1.1机器语言1.1.2汇编语言1.1.3高级语言
1.1计算机语言的发展机器语言汇编语言高级语言FORTRANBASICCOBOLPASCALC/C++JAVA…...1.1计算机语言的发展1.1.1机器语言机器语言:依赖于机器的低级语言,书写格式为二进制代码。优点:执行速度快,效率高。缺点:表达的意义不直观,编写、阅读、调试较困难。1.1计算机语言的发展1.1.2汇编语言汇编语言:是一种符号语言,与机器语言一一对应;使用助记符表示相应的操作,并遵循一定的语法规则。与机器语言有类似的优、缺点,但比机器语言更易于为人们所理解。
1.1计算机语言的发展1.1.3高级语言高级语言:面向人的语言,有多种类型。优点:便于阅读,易学易用,不涉及硬件,具有通用性。缺点:目标代码冗长,占用内存多,从而执行时间长,效率不高,不能对某些硬件进行操作。LOGO1.1计算机语言的发展
汇编语言与处理器密切相关:汇编语言程序的通用性、可移植性较差汇编语言和高级语言(1)高级语言与具体计算机无关:高级语言程序可以在多种计算机上编译后执行.汇编语言:×高级语言:√LOGO1.1计算机语言的发展
汇编语言功能有限、涉及硬件细节:汇编语言比较繁琐,调试起来也比较困难汇编语言和高级语言(2)高级语言与具体计算机无关:类似自然语言的语法,易于掌握和应用汇编语言:×高级语言:√LOGO1.1计算机语言的发展汇编语言本质上就是机器语:↗可以直接、有效地控制计算机硬件↗易于产生速度快、容量小的高效率目标程序汇编语言和高级语言(3)高级语言与具体计算机无关:↘不易直接控制计算机的各种操作↘目标程序比较庞大、运行速度较慢.汇编语言:√高级语言:×LOGO1.1计算机语言的发展汇编语言和高级语言(4)汇编语言:?高级语言:
?汇编语言的优点直接控制计算机硬件部件可以编写在“时间”和“空间”两方面最有效的程序汇编语言的缺点与处理器密切有关需要熟悉计算机硬件系统、考虑许多细节编写繁琐,调试、维护、交流和移植困LOGO1.1计算机语言的发展汇编语言和高级语言(5)混合编程取长补短汇编语言和高级语言有时需要采用高级语言和汇编语言混合编程的方法,互相取长补短,更好地解决实际问题汇编语言的优点使得它在程序设计中占有重要的位置,是不可被取代的汇编语言的缺点使得人们主要采用高级语言进行程序开发工作程序要具有较快的执行时间,或者只能占用较小的存储容量程序与计算机硬件密切相关,程序要直接、有效地控制硬件大型软件需要提高性能、优化处理的部分没有合适的高级语言、或只能采用汇编语言的时候分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等等1.1计算机语言的发展
汇编语言的应用场合
汇编语言的作用实在不小!1.2
Intel8086微处理器简介1.2.1
Intel8086微处理器结构1.2.2
Intel8086微处理器寄存器组1.2
Intel8086微处理器简介中央处理机
CPU总线控制逻辑
接口接口存储器大容量存储器I/O设备I/O子系统系统总线计算机系统包括硬件和软件两大部分。硬件:三个主要组成部分,用系统总线连接。
1.2
Intel8086微处理器简介
系统软件(核心是操作系统operatingsystem)
—I/O驱动程序(I/Odriver)—文件管理程序(filemanagement)—文本编辑程序(texteditor)—翻译程序(translator)MASM.EXE/TASM.EXE—连接程序(linker)LINK.EXE/TLINK.EXE—装入程序(loader)DEBUG.EXE—系统程序库(systemlibrary)
用户软件软件
1.2
Intel8086微处理器简介中央处理器:IBMPC机的CPU组成:算术逻辑部件ALU控制逻辑工作寄存器(14个)IBM公司1981年推出的个人PC,CPU采用芯片8086,机器字长16位,数据线16根,地址线20根,
1MRAM,40KROMLOGO1.2
Intel8086微处理器简介1.2.1Intel8086微处理器结构内部暂存器
IP
ES
SS
DS
CS输入/输出控制电路执行部分控制电路123456∑ALU标志寄存器
AHAL
BHBLCHCL
DHDL
SP
BP
SI
DI通用寄存器地址加法器指令队列缓冲器执行部件(EU)总线接口部件(BIU)16位20位16位8位LOGO1.2
Intel8086微处理器简介1.2.2Intel8086微处理器寄存器组通用数据寄存器(4个)AX,BX,CX,DX 它们可以分解为AL~DH8个8位寄存器使用指针及变址寄存器(4个)SP堆栈指针寄存器(存放栈顶的偏移地址)BP基址指针寄存器SI源变址寄存器DI目的变址寄存器段寄存器(4个)CSDSSSES
8086/8088的寄存器组(16位)LOGO1.2
Intel8086微处理器简介1.2.2Intel8086微处理器寄存器组指针寄存器SP、BP指针寄存器用于寻址内存堆栈内的数据SP为堆栈指针寄存器,指示栈顶的偏移地址SP不能再用于其他目的,具有专用目的BP为基址指针寄存器,指示数据在堆栈段中的基地址SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址LOGO1.2
Intel8086微处理器简介1.2.2Intel8086微处理器寄存器组堆栈的概念堆栈(Stack)是主存中一个特殊的区域它采用先进后出FILO(FirstInLastOut)或后进先出LIFO(LastInFirstOut)的原则进行存取操作,而不是随机存取操作方式。
堆栈通常由处理器自动维护在8086中,由堆栈段寄存器SS和堆栈指针寄存器SP共同指示。LOGO1.2
Intel8086微处理器简介1.2.2Intel8086微处理器寄存器组控制寄存器(2个)IP
指令指针寄存器(保存下一条即将执行的指令的首地址)
PSW
程序状态字寄存器OFDFIFTFSFZFAFPFCF
1514131211109876543210条件码标志OF
溢出标志SF
符号标志ZF
零标志CF
进位标志AF
辅助进位标志PF
奇偶标志控制标志OV/
NV
NG/PLZR/NZCY/NCAC/NAPE/PODF
方向标志IF
中断标志TF
陷阱标志DN/
UP
EI/DILOGO1.2
Intel8086微处理器简介1.2.2Intel8086微处理器寄存器组指令指针寄存器IP指令指针寄存器IP,指示代码段中指令的偏移地址它与代码段寄存器CS联用,确定下一条指令的物理地址计算机通过CS:IP寄存器来控制指令序列的执行流程IP寄存器是一个专用寄存器LOGO1.2
Intel8086微处理器简介1.2.2Intel8086微处理器寄存器组CFCarryFlag。它反映运算中最高有效位向前有无进位(针对加运算)或借位(针对减运算)。有进位或借位时,CF=1,否则CF=0。CF主要针对无符号运算。OFOverflowFlag。它反映有符号数的运算结果是否超出其所能表示的范围;运算结果溢出时OF=1,否则OF=0,注意,OF标志主要针对有符号运算。SFSignFlag。它反映运算结果的最高有效位(MSB)为0、还是为1;对有符号运算来说,它反映了运算结果为正、还是为负,即SF=MSB。ZFZeroFlag。它反映运算结果是否为全0。若ZF=1,则表示运算结果为全0(各位均为0);否则ZF=0。PFParityFlag。它反映运算结果的低8位中1的个数是否为偶数。是则PF=1,否则PF=0。AFAuxiliaryFlag。它反映运算中低四位向前有无进位或借位。若AF=1,表示有进位或借位;否则AF=0。程序状态字(PSW)LOGO1.2
Intel8086微处理器简介1.2.2Intel8086微处理器寄存器组程序状态字(PSW)DFDirectionFlag。若设置DF=0,则串操作后,源和目的操作数的地址均向增址方向调整;若设置DF=1,则向减址方向调整。IFInterruptEnableFlag。若设置IF=1,则允许CPU响应可屏蔽中断(开中断);若IF=0,则不允许CPU响应可屏蔽中断(关中断)。TFTrapFlag。若设置TF=1,则将在CPU运行中设置陷井,此时,CPU每执行一条指令就产生一个单步中断;若TF=0,表示不设置陷井。起控制程序运行方式的作用1.3存储器1.3.1存储单元的地址和内容1.3.2堆栈1.3.3存储器物理地址的形成1.3存储器1.3.1存储单元的地址和内容存储器是用来存放程序、数据、中间结果和最终结果的记忆装置。是计算机中最重要的设备。理解计算机的构成(体系结构)的第一步是了解存放程序指令和数据值的基本存储单元的相关概念。80X86存储器阵列1.3存储器1.3.1存储单元的地址和内容1.3存储器1.3.1存储单元的地址和内容**********12340H12341H12343H12342H00000HFFFFFHFFFFEH
PA********00001H
存储器以字节为单位存储信息;每个字节有一个地址,从0编号,顺序加1;地址用无符号二进制整数表示,用十六进制书写;一个字要占用存储器相继的两个字节,字单元地址用它的低地址来表示。低位字节存入计数小的地址(低地址),高位字节存入计数大的地址(高地址),这种数据存储方式称为小端方式(smallendian)。图8086的存储格式1.3存储器1.3.1存储单元的地址和内容1.3存储器1.3.1存储单元的地址和内容二进制位:存储一位二进制数:0或1。字节:8个二进制位,D7~D0。字:16位,2个字节,D15~D0。双字:32位,4个字节,D31~D0。最低有效位LSB(LeastSignificantBit):指数据的最低位,即D0位;最高有效位MSB(MostSignificantBit):指数据的最高位,对应字节、字、双字分别指D7、D15、D31位。数据信息的表达单位1.3存储器1.3.1存储单元的地址和内容数据在存储器中的存取规则1.3存储器1.3.32堆栈堆栈操作:(1)PUSH操作数(2)POP操作数.堆栈堆栈的作用:(1)调用函数(2)暂时存储数据(3)保护寄存器数据1.3存储器1.3.3存储器物理地址的形成将存储器分成若干段:段起始地址的低4位为0,段的大小是64K范围内的任意连续字节时,任一存储单元的实际地址都可以用两个16位的二进制数表示。1.3存储器1.3.3存储器物理地址的形成
物理地址:每个存储单元的唯一的20位地址(PA)
段地址:段起始地址的高16位
偏移地址(EA):段内相对于段起始地址的偏移值(16位)
**********12340H12341H12343H12342H0000H0001H0002H0003HFFFFH2233FH
PA
0000段地址高16位
16位偏移地址+
20位物理地址EA=PA-
段首地址1.3存储器1.3.3存储器物理地址的形成逻辑地址
在程序中使用,由16位段基址和16位段内偏移值
所组成的地址.
1234:00021234*16+0002=500A:1234500A*16+1234=逻辑地址与物理地址1.3存储器1.3.3存储器物理地址的形成物理地址=段基址×16+段内偏移地址。代码段段寄存器CS数据段段寄存器DS堆栈段段寄存器SS附加段段寄存器ES段地址*10000B偏移地址物理地址150150
地址加法器19031.3存储器1.3.3存储器物理地址的形成程序员如何分配各个逻辑段程序的指令序列必须安排在代码段;程序使用的堆栈一定在堆栈段;程序中的数据默认是安排在数据段,也经常安排在附加段,尤
其是串操作的目的区必须是附加段。数据的存放比较灵活,实际上可以存放在任何一种逻辑段中。
程序中如何指明数据所在的逻辑段呢?1.3存储器1.3.3存储器物理地址的形成段超越的例子MOVAX,[2000H];AX←DS:[2000H],;从默认的DS数据段取出数据MOVAX,ES:[2000H];AX←DS:[2000H],;从默认的DS数据段取出数据没有段超越的指令实例采用段超越前缀的指令实例1.3存储器1.3.3存储器物理地址的形成段寄存器的使用规定(表2.1)访问存储器的方式 默认的段寄存器 可超越的段寄存器 偏移地址取指令 CS 无 IP堆栈操作 SS 无 SP一般数据访问 DS CS、ES、SS 有效地址EA(下列除外)串操作的源操作数 DS CS、ES、SS SI串操作的目的操作数 ES 无 DIBP基址的寻址方式 SS CS、DS、ES 有效地址EA1.3存储器1.3.3存储器物理地址的形成代码段段寄存器CS数据段段寄存器DS堆栈段段寄存器SS附加段
段寄存器ES
存储器8K代码
2K数据256堆栈02000H04800H04000H0200H0400H0480H逻辑段10000H1000H
例:(DS)=0400H,EA=1234H,
物理地址=(DS)10H+EA=05234H1.3存储器1.3.3存储器物理地址的形成寄存器与存储器的比较:
AddYourText
寄存器存储器在CPU内部在CPU外部访问速度快访问速度慢容量小,成本高容量大,成本低用名字表示用地址表示没有地址地址可用各种方式形成1.4数据在机内的表示形式1.4.1数值在计算机内的表示形式1.4.2字符数据在计算机内的表示形式1.4数据在机内的表示形式一、数制及数制之间的转换二、码制三、BCD码及其表示四、字符的编码五、几种基本的逻辑运算1.4数据在机内的表示形式1.4.1数值在计算机内的表示形式012345678930H31H32H33H34H35H36H37H38H39H+30H-30H
十进制ASCII1.4数据在机内的表示形式1.4.1数值在计算机内的表示形式019ABCDEF30H31H32H39H41H42H43H44H45H46H+30H+37H
十六进制ASCII-30H-37H1.4数据在机内的表示形式1.4.2字符数据在计算机内的表示形式A41HB42HC43HD44HX58HY59HZ5AHa61Hb62Hc63Hd64Hx68Hy69Hz74H+20H-20H
大写字母小写字母1.5汇编源程序举例举例二进制加法程序:两个多字节的二进制数分别放在以ADD1和ADD2为首地址的存储单元中,两个数的字长度放在CONT单元中,最后相加结果放在以SUM为首地址的单元中(所有数的低字节在前,高字节在后)。解参考程序如下:DATASEGMENT;数据段ADD1DBFEH,86H,7CH,44H,56H,1FHADD2DB56H,49H,4EH,0FH,9CH,22H1.5汇编源程序举例举例STACKSEGMENTPARASTACK′STACK′;堆栈段DB100DUP(?)STACKENDSCODESEGMENT;代码段ASSUME:CS:CODE,DS:DATA,ES:DATA,SS:STACKMADDB:MOVAX,DATAMOVDS,AX;初始化数据段寄存器MOVES,AX;初始化附加段寄存器MOVSI,OFFSETADD1;被加数地址→(SI)MOVDI,OFFSETADD2;加数地址→(DI)MOVBX,OFFSETSUM;和地址→(BX)1.5汇编源程序举例举例MOVCL,BYTEPTRCONTMOVCH,0;初始化相加字长度CLCMADDB1:MOVAX,[SI]ADCAX,[DI];16位相加INCSIINCSIINCDIINCDIMOV[BX],AX;相加结果送结果单元INCBXINCBXLOOPMADDB1;执行循环HLTCODEENDSENDMADDB1.5汇编源程序举例举例DATASEGMENT;数据段BINNUMDW4FFFHASCBCDDB5DUP(0)DATAENDSSTACKSEGMENTPARASTACK′STACK′;堆栈段DB200DUP(?)STACKENDSCODESEGMENT;代码段ASSUME:CS:CODE,DS:DATA,ES:DATA,SS:STACKBINASC:MOVAX,DATAMOVDS,AXMOVES,AXMOVCX,5XORDX,DXMOVAX,BINNUMMOVBX,10MOVDI,OFFSETASCBCD例:将二进制数转换成ASCII码的程序。编写程序,将一个字长的二进制数转换成一个ASCII码表示的字符串。二进制数放在BINNUM中,其转换结果放在ASCBCD中。1.5汇编源程序举例举例BINASC1:DIVBXADDDL,30HMOV[DI],DLINCDIANDAX,AXJZSTOPMOVDL,0LOOPBINASC1STOP:HLTCODEENDSEND例:将二进制数转换成ASCII码的程序。编写程序,将一个字长的二进制数转换成一个ASCII码表示的字符串。二进制数放在BINNUM中,其转换结果放在ASCBCD中。1.5汇编源程序举例举例DATASEGMENTASCSTGDB′5′,′A′,′6′,′1′BINDB2DUP(0)DATAENDSSTACKSEGMENTPARASTACK′STACK′DB100DUP(?)STACKENDSCODESEGMENTASSUME:CS:CODE,DS:DATA,SS:STACKASCB:MOVAX,DATAMOVDS,AXMOVCL,4MOVCH,CLMOVSI,OFFSETASCSTGCLDXORAX,AXXORDX,DXASCB1:LODSASCSTG例:ASCII码转换成二进制数的程序。将一个4位ASCII码数字转换成二进制数,ASCII码数字放在以ASCSTG为首地址的内存单元中(共有4位),转换结果放入以BIN为首地址的内存单元中。1.5汇编源程序举例举例ANDAL,7FHCMPAL,′0′JLERRORCMPAL,′9′JGASCB2SUBAL,30HJMPSHORTASCB3ASCB2:CMPAL,′A′JLERRORCMPAL,′F′JGERRORSUBAL,37HASCB3:ORDL,ALRORDX,CLDECCHJNZASCB1MOVWORDPTRBIN,DXHLTCODEENDSENDASCB例:ASCII码转换成二进制数的程序。将一个4位ASCII码数字转换成二进制数,ASCII码数字放在以ASCSTG为首地址的内存单元中(共有4位),转换结果放入以BIN为首地址的内存单元中。ThankYou!寻址方式本章结构2.4与转移地址有关的寻址方式2.3与数据有关的寻址方式2.1操作数类型2.2有效地址和段超越2.5寻址方式总结2.1操作数类型2.1.1立即数2.1.2寄存器操作数2.1.3存储器操作数2.1操作数类型指令格式:操作码操作数1,操作数2 ;注释每种计算机提供给用户使用一组指令集及其相关语法规则称为该计算机的指令系统。一条指令提供的信息:完成什么操作、操作数或操作数地址是什么。操作码域:指定要完成的操作。2.1操作数类型
操作数2:源操作数,表示参与指令操作的一个对象;操作数1:目的操作数,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果。分号后的内容是对指令的解释。例: MOVAH,10 ;(AH)=10LOGO2.1操作数类型
指令本身无需任何操作数或者所需操作数隐含约定的操作数;例:NOP、HLT
零操作数(地址)指令单操作数(地址)指令双操作数(地址)指令
指令中只有目的操作数或者隐含约定目的操作数;例:INCCX、PUSHAX
指令中指出参加操作的2个操作数的地址,操作后结果存入目标操作数中。例:MOVAX,[2000H]
2.1操作数类型2.1.1立即数8086的机器代码(MachineCode)格式2.1操作数类型2.1.1立即数操作码占1个或2个字节后面的各个字节指明操作数:“modregr/m”字节表明采用的寻址方式,“位移量”字节给出某些寻址方式需要的对基地址的偏移量,“立即数”字节给出立即寻址方式需要的数值本身。2.1操作数类型2.1.2寄存器操作数操作数的各个字段有多种组合,如表1所示r8——任意一个8位通用寄存器r16——任意一个16位通用寄存器reg——代表r8或r16seg——段寄存器CS/DS/ES/SSm8——一个8位存储器操作数单元m16——一个16位存储器操作数单元mem——代表m8或m16i8——一个8位立即数i16——一个16位立即数imm——代表i8或i16dst/src——目的操作数/源操作数表1.指令操作数的表达2.1操作数类型2.1.3存储器操作数存储器操作数的偏移地址可由以下三种成分组合偏移量+EA(有效地址)基址+変址=偏移量(位移量)(displacement)是存放在指令中的一个8位或16位的有符号数。基址是基址寄存器(BX,BP)中的内容。常用来指向数据段中数组或字符串的首地址。变址是变址寄存器(SI,DI)中的内容。常用来访问数组中的某个元素或字符串中的某个字符。EA可以由以上三个成分任意组合后提供。2.1操作数类型2.1.3存储器操作数如果操作数存放在存储区中,这样的操作数称为存储器操作数。
2.1操作数类型2.1.3存储器操作数计算机中操作数保存的地方1、指令中4、I/O接口寄存器中t2、CPU的寄存器中3、存储器中2.在指令中指定寄存器名.4.在访问I/O的专用指令中指定接口中寄存器的端口号。1.由程序员直接写在指令中3.两种情况(1)单个操作数可在指令中指定存放这个操作数的存储单元的地址.(2)以表格或数组的形式存放在存储器中的成组操作数需指定数据区的首(末)地址,作为地址指针
2.2有效地址和段超越当操作数存放在存储器中时,存储器存储单元的物理地址由两部分组成:偏移地址和段地址。在8086/8088的各种寻址方式中,寻找的存储单元所需的偏移地址成为有效地址(EA)。
存储器操作数寻址时,存储单元的物理地址的另一部分是段地址。
2.2有效地址和段超越若计算机工作在保护模式,段基址通过段寄存器中的段选择子从描述符中得到。当被访问的操作数的段基址不在约定使用的段寄存器中,而在其它的段寄存器中时,可以使用段跨越前缀指定其所在的段寄存器。段跨越前缀的表示形式:
ES:、CS:、SS:、DS:例:MOVAX,DS:[BP]MOVES:[BX],AX
2.2有效地址和段超越存储器操作数操作类型约定段寄存器允许指定的段寄存器偏移量1.指令CS无IP2.堆栈操作SS无SP3.普通变量DSES、SS、CSEA4.字符串指令的源串地址DSES、SS、CSSI5.字符串指令的目标串地址ES无DI6.BP作基址寄存器SSDS、ES、CSEA表3-1段基址和偏移量的约定情况
2.2有效地址和段超越(3)基址指针寄存器BP(2)通用寄存器BX(1)段寄存器CS、DS、ES和SS(4)変址寄存器SI和DI在实模式下提供有效地址需要使用的有关寄存器分别为:2.3与数据有关的寻址方式在8088/8086指令系统中,与数据有关的寻址方式可以分为7种,用于确定操作数地址,从而找到操作数。.
操作数采取哪一种寻址方式,会影响机器运行的速度和效率。指令系统设计了多种操作数的来源,寻找操作数的过程就是操作数的寻址方式。
数据寻址方式以MOVDST,SRC为例讨论。2.3与数据有关的寻址方式2.3.2寄存器寻址方式2.3.4寄存器间接寻址方式2.3.6基址变址寻址方式2.3.3直接寻址方式2.3.7相对基址变址寻址方式2.3.5寄存器相对寻址方式2.3.1立即寻址方式2.3与数据有关的寻址方式2.3.1立即寻址方式
操作:欲将一个常数送到寄存器中或者存储器中的一个单元;我们可以将操作数直接写在指令中,如MOVAH,10这种提供操作数的方式称为立即寻址方式,把该操作数称为立即数。
2.3与数据有关的寻址方式2.3.1立即寻址方式注意:立即寻址方式只能出现在源操作数的位置。指令的源操作数长度应与目的操作数长度一致。2.3与数据有关的寻址方式2.3.1立即寻址方式……ALOP06举例例1.
MOVAL,6 ;(AL)=6程序代码段所在存储器2.3与数据有关的寻址方式2.3.1立即寻址方式举例例2.
MOVAX,1234H;(AX)=1234H……AXOP341212342.3与数据有关的寻址方式2.3.2寄存器寻址方式操作数存放在寄存器中,由指令指定寄存器名的寻址方式。这种寻址方式不需要访问外部总线,存取速度较高。可用的寄存器:通用寄存器或段寄存器(CS不能用于DST)。对16位操作数,可以用AX,BX,CX,DX,SI,DI,SP和BP;对8位操作数,可以用AL,AH,BL,BH,CL,CH,DL,DH;对于386及其后继机型可以用EAX,EBX,ECX,EDX,ESI,EDI,ESP和EBP。2.3与数据有关的寻址方式2.3.2寄存器寻址方式举例例3.
MOVBX,AX ;(BX)
(AX)
;AX中的内容不变2.3与数据有关的寻址方式2.3.2寄存器寻址方式举例例5.
MOVAL,78H ;(AL)
78H例6.
MOVEAX,78H;(EAX)
78H2.3与数据有关的寻址方式2.3.2寄存器寻址方式上述指令中的DST均为寄存器寻址方式。存放在寄存器中的操作数称为寄存器操作数。双操作数指令中至少要有一个操作数使用寄存器寻址方式2.3与数据有关的寻址方式2.3.3直接寻址方式操作数的有效地址只包含位移量一种成分,位移量的值即操作数的有效地址。可以将该变量的有效地址直接写在指令中
直接寻址方式。用途:存取单个变量。通用格式:操作码DST,EA2.3与数据有关的寻址方式2.3.3直接寻址方式执行结果如图3-2(a)所示。举例例7.
MOVAX,[0078H];缺省段寄存器为DS。其功能与右面两条指令的功能等价:
MOVAX,[0078H]MOVAL,[0078H]MOVAH,[0079H]2.3与数据有关的寻址方式2.3.3直接寻址方式举例例7.
]50303007830079AHAL3050(DS)图3-2(a)MOVAX,[0078H]2.3与数据有关的寻址方式2.3.3直接寻址方式举例例7.
(DS)=3000H物理地址PA=16d
(DS)+EA=163000H+0078H=30078H字地址30078H中的内容:(30078H)=3050H执行结果是(AX)=3050H2.3与数据有关的寻址方式2.3.3直接寻址方式非默认段的情况如果操作数在附加段中,则应指定段跨越前缀如下:
MOVAX,ES:VAR或MOVAL,ES:[0078H]实际上只有在DEBUG环境下,才有[0078H]这样的表示。在汇编语言源程序中直接寻址方式都是用符号表示的。2.3与数据有关的寻址方式2.3.4寄存器间接寻址方式操作数在存储器中,而该操作数的有效地址放在BX、BP和SI、DI四个寄存器中提供给CPU的寻址方式。对于386以上CPU,这种寻址方式允许使用任何32位通用寄存器。若指令中使用BX、SI、DI,则默认与DS段寄存器配合;若使用BP,则默认与SS配合。BX、BP和SI、DI均允许使用段跨越。2.3与数据有关的寻址方式2.3.4寄存器间接寻址方式举例例9.
MOVAX,[BX] ;AX
(DS:[BX])注意它与寄存器寻址方式在形式上的区别:MOVAX,BX ;(AX)(BX)
源操作数的物理地址为:PA=(DS)×10H+(BX)2.3与数据有关的寻址方式2.3.4寄存器间接寻址方式举例例9.若(DS)=3000H,(BX)=78H,(30078H)=12H则:PA=3000H×10H+78H=30078H该指令的执行结果是(AL)=(30078H)=12H
2.3与数据有关的寻址方式2.3.4寄存器间接寻址方式举例例10.
MOVAX,[BP];AX(SS:[BP])若(SS)=2000H,(BP)=80H,则PA=(SS)×10H+(BP)=20080H
若(20080H)=5612H,则该指令的执行结果是(AX)=5612H。利用这种寻址方式再配合修改寄存器内容的指令可以方便地处理一维数组,如图3-3所示。2.3与数据有关的寻址方式2.3.4寄存器间接寻址方式举例图3-3寄存器间接寻址方式执行情况DSBXAL+X3XiX2X1X0X9寄存器间接寻址方式处理一维数组X[10]2.3与数据有关的寻址方式2.3.5寄存器相对寻址方式操作数的EA是一个基址(BX、BP)或变址寄存器(SI、DI)的内容和指令中给定的一个位移量(disp)之和(见教材图3.1(5))。EA=(基址<或变址>寄存器)+disp位移量可以是一个字节或一个字的带符号数。与段寄存器约定配合与寄存器间接寻址约定相同
]2.3与数据有关的寻址方式2.3.5寄存器相对寻址方式举例例11.
MOVAL,TABLE[BX]或MOVAL,[BX+TABLE]
其中TABLE为位移量的符号表示。 指令执行结果是:
AL←
(DS:[BX+TABLE]) 使用这种寻址方式可以访问一维数组,其中TABLE是数组首地址的偏移量,寄存器中存放数组元素的下标乘以元素的长度的积(一个元素占用的字节数),下标从0开始计数。2.3与数据有关的寻址方式2.3.5寄存器相对寻址方式举例例12.MOVAX,8[BX]
可以表示为:MOVAX,[BX+8]
若(DS)=3000H,(BX)=70H
(30078H)=1234H
则PA=10H×(DS)+(BX)+DISP
=30078H
该指令的执行结果是(AX)=1234H。 其中8[BX]为寄存器相对寻址方式,该指令执行情况如图3-4所示。2.3与数据有关的寻址方式2.3.5寄存器相对寻址方式举例DSBX+AXMOV
AX,[BX+8]+
34H12H8寄存器间接寻址方式处理一维数组图3-4寄存器相对寻址执行情况2.3与数据有关的寻址方式2.3.6基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。缺省使用段寄存器的情况由基址寄存器决定。允许使用段跨越前缀。使用段跨越前缀时的格式为:MOVAX,ES:[BX][SI]BXBPSIDIEA=+2.3与数据有关的寻址方式2.3.6基址变址寻址方式基址
BXBPEA=+变址
SIDI基址变址寻址方式组合基址EAXEBXECXEDXESPEBPESIEDIEA=+变址EAXEBXECXEDXEBPESIEDI80386以上32位基址变址寻址方式组合图3-52.3与数据有关的寻址方式2.3.6基址变址寻址方式举例例13.
MOVAL,[BX][SI] ;(DS:[BX+SI])→AL该指令可以表示为:
MOVAL,[BX+SI]
使用该寻址方式可以访问一维数组。用BX存放数组起始地址的偏移量,SI存放数组元素的下标乘以元素的长度,下标从0开始计数。则数组中任一元素的有效地址=(BX)+(SI)。因为数组的首地址存放在寄存器中,因此可以访问存储器中任意已知地址指针的数组.执行情况如图3-6所示。2.3与数据有关的寻址方式2.3.6基址变址寻址方式图3-6基址变址寻址方式执行情况DSBX+AL+SIXXBX存放数组起始地址的偏移量,SI存放数组元素的下标乘以元素的长度,下标从0开始计数。基址变址寻址方式访问一维数组2.3与数据有关的寻址方式2.3.7相对基址变址寻址方式有效地址分解成三个部分提供:
EA
+DISP基址寄存器変址寄存器DISP可以是一个字节、一个字的带符号数。缺省使用段寄存器的情况由基址寄存器决定。允许使用段跨越前缀。+=2.3与数据有关的寻址方式2.3.7相对基址変址寻址方式举例例14.MOVAL,ARY[BX][SI];(DS:[BX+SI+ARY])→AL可表示为:
MOVAL,ARY[BX+SI]
或MOVAL,[BX+SI+ARY]执行情况如图3-8所示。
2.3与数据有关的寻址方式2.3.7相对基址変址寻址方式举例例:相对基址变址寻址方式访问文件记录存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向第i个记录,变址寄存器则指向该记录中的第j个元素。(基址寄存器)×记录的长度作为记录指针(变址寄存器)×记录中元素的长度作为元素指针则(disp+(基址寄存器)+(变址寄存器))为文件中第Ai,j个元素的指针。2.3与数据有关的寻址方式2.3.7相对基址変址寻址方式设数组在内存中以行的形式存放。
ARY为数组起始地址的偏移量,基址寄存器为某行首与数组起始地址的距离,即行下标×一行占用的字节数,变址寄存器为某列与所在行首的距离即列下标×元素长度,若保持基址寄存器不变而变址寄存器改变,则可以访问同一行的所有元素;若保持变址寄存器不变而基址寄存器改变,则可以访问同一列的所有元素。相对基址变址寻址方式访问二维数组2.3与数据有关的寻址方式2.3.7相对基址変址寻址方式相对基址变址寻址方式访问二维数组图示图3-8相对基址变址寻址方式DSBX+AL+SIMOVAL,ARY[BX][SI]+XX2.4与转移地址有关的寻址方式2.4.1段内直接寻址2.4.2段内间接寻址2.4.4段间间接寻址2.4.3段间直接寻址2.4与转移地址有关的寻址方式本节讨论的寻址方式是用来确定转移及调用指令的转向地址。既根据目标地址所在的位置,用前面介绍的寻址方式将转移目标地址的地址提供给CPU。下面以8086/8088的无条件转移指令为例来说明。无条件转移指令格式:
JMP目标
功能:无条件转移到目标地址处执行指令。2.4与转移地址有关的寻址方式1、转移的目标地址有两类2、提供目标地址的方法有两类2.转移目标地址在本逻辑段外为段间转移—改变IP和CS的值实现。.
1.转移目标地址在本逻辑段内为段内转移—改变指令指针IP的值实现;1.直接寻址—目标地址直接写在指令中2.间接寻址—目标地址放在寄存器/存储器中与转移地址有关的寻址方式的功能2.4与转移地址有关的寻址方式2.4.1段内直接寻址格式:JMP标号(符号地址)其中DISP=转移目标有效地址–当前(IP)CPU通过把指令中给出的disp加到IP中得到目标地址的EA,送到(IP)。从而使IP指向目标指令地址,实现段内转移。
8位16位
(IP)EA=(IP)+DISP2.4与转移地址有关的寻址方式2.4.1段内直接寻址段转移与近转移)若位移量为16位,称为近转移,可以实现距离当前(IP)为±32K字节范围内的转移,格式:
JMPLAB或JMPNEARPTRLAB若位移量为8位,称为短转移,可以实现距离当前(IP)为[+127,-128]字节范围内的转移,格式:
JMPSHORTLAB2.4与转移地址有关的寻址方式2.4.2段内间接寻址方式程序转向的有效地址存放在一个寄存器或内存单元中,该寄存器号或内存地址按前面介绍的与操作数有关的寻址方式(立即寻址方式除外)获得。取到其中的有效地址送给IP,实现转移。指令格式及举例见表3-1。
2.4与转移地址有关的寻址方式2.4.2段内间接寻址方式格式举例注释JMP通用寄存器JMPBX16位转向地址在BX中JMP内存单元16位转向地址在VAR字型内存变量中16位转向地址在BX所指向的内存变量中JMPVARJMPWORDPTR[BX]表3-1段内间接寻址方式2.4与转移地址有关的寻址方式2.4.2段内间接寻址方式举例设:(DS)=2000H,(BX)=0300H
(IP)=0100H,(20300H)=0500H例1.JMPBX ;(IP)=(BX)=0300H例2.JMPWORDPTR[BX]CPU首先根据寻址方式计算存放转移目标地址的内存单元的地址:PA=(DS)×16+(BX)=20300H,从(PA)取转移目标地址的EA送到IP中,EA=(20300H)=0500H(IP)然后执行CS:500H处的指令,实现了段内间接转移。2.4与转移地址有关的寻址方式2.4.3段间直接寻址方式
指令中直接给出转向的4字节的偏移量和段基址,只需把它们分别送给IP和CS后即可实现段间转移。指令格式:JMPFARPTRLAB;(IP)←LAB的EA;(CS)←LAB的段基址字节0字节1字节2字节3字节4图3-11段间直接寻址方式操作码段基址高8位段基址低8位偏移量高8位偏移量低8位2.4与转移地址有关的寻址方式2.4.4段间间接寻址方式JMPDWORDPTR双字存储器操作数双字存储器操作数的低16位取代IP值,高16位取代CS值,从而实现段间转移。可以使用除立即寻址和寄存器寻址方式以外的其它与数据有关的寻址方式。例:若(DS)=2000H,(BX)=0300H,
(20300H)=0500H,(20302H)=6010H则:指令JMPDWORDPTR[BX]执行后,(CS)=6010H,(IP)=0500H,因此程序转到6010:0500处执行例题2.4与转移地址有关的寻址方式2.4.4段间间接寻址方式
上边介绍的与转移地址有关的寻址方式完全适用于386以上的实模式环境。保护模式下的虚拟8086方式转移地址的形成与此类似,只是32位的偏移量送给EIP,但高16位清0,这是因为段长不能超过64K的缘故。而段间转移的目标地址采用48位全指针形式,即32位的偏移量和16位的段选择子进行运算。2.5寻址方式小结立即寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址段内直接寻址
段内间接寻址
段间直接寻址段间间接寻址ThankYou!寻址方式本章结构3.4字符串操作3.3位操作指令3.1数据传送指令3.2算术运算指令3.532位CPU扩展的指令寻址方式本章要点8086全部指令按功能可分成六大类:数据传送指令、算术运算指令、逻辑指令、串操作指令、控制转移指令和处理机控制指令。本章主要介绍以下内容:1、数据传送指令2、算术运算指令3、位操作指令4、字符串操作指令5、32位CPU扩展的指令3.1数据传送指令3.1.1机械指令格式3.1.3堆栈操作指令3.1.5地址传送指令3.1.2通用数据传送指令3.1.6输入/输出指令3.1.4标志传送指令3.1数据传送指令
数据传送指令负责将数据、地址或立即数传送到寄存器或存储单元中。在8086/8088CPU指令系统中,数据传送指令共有14条分5组,它们是:(1)通用数据传送指令:MOV、XCHG、XLAT(2)堆栈操作指令:PUSH、POP(3)标志寄存器传送指令:LAHF、SAHF、PUSHF、POPF3.1数据传送指令(4)地址传送指令:LEA、LDS、LES(3)输入输出指令:IN、OUT其中除标志寄存器传送指令外,数据传送指均不影响任何标志位。3.1数据传送指令3.1.1机器指令格式LOGO
机器语言的一条语句,它是一组有意义的二进制代码,由操作码字段和操作数字段两个部分组成。
指令操作码字段操作数指令
表示该指令应进行什么性质的操作。
指出指令执行的参与者,也就是各种操作的对象。3.1数据传送指令3.1.1机器指令格式LOGO图3-1指令的一般格式3.1数据传送指令3.1.2通用数据传送指令LOGO通用数据传送指令负责CPU内部的寄存器以及内存单元之间的数据传递,是数据传送指令中使用最多的一组指令。该类指令主要包括:MOVXCHGXLATLOGO3.1数据传送指令一、基本的传送指令MOV(Move)
格式:MOVDEST,SRC;(DEST)←(SRC)
其中:(DEST)、(SRC)分别为源和目的操3.1.2通用数据传送指令LOGO3.1数据传送指令3.1.2通用数据传送指令
举例例MOVAL,BL;BL中的8位数据送ALMOVES,DX;DX中16位数据送ESMOVAX,[BX];
MOVCX,[1000H]MOVDX,5040;立即数5040送DX注:对段寄存器赋值时,只能通过寄存器赋值,不能用立即数直接赋值。3.1数据传送指令SRC可为:立即数、通用寄存器、存储器、段寄存器。
DEST可为:通用寄存器、存储器、段寄存器
3.1.2通用数据传送指令允许的操作数组合:3.1数据传送指令3.1.2通用数据传送指令允许的操作数组合:DEST和SRC可以有9种组合,如下图所示:图3-2MOV指令传送示意图3.1数据传送指令3.1.2通用数据传送指令(1)通用寄存器到通用寄存器如:MOV
AX,BX;(2)立即数到通用寄存器如:MOV
AX,03H;(3)立即数到存储单元
如:MOV
BYTEPTR[2000H],12H;3.1数据传送指令3.1.2通用数据传送指令(4)存储单元到通用寄存器如:MOV
AX,[2000H];(5)通用寄存器到存储单元如:MOV[2000H],AX;(6)通用寄存器到除CS外的段寄存器
如:MOV
DS,AX;3.1数据传送指令3.1.2通用数据传送指令(7)段寄存器到通用寄存器
如:MOV
AX,DS;(8)存储器到除CS外的段寄存器如:MOV
ES,[2000H];(9)段寄存器到存储器如:MOV
[2000H],DS;LOGO3.1数据传送指令二、交换指令XCHG格式:XCHGDEST,SRC;(DEST)<-->(SRC)功能:将两个操作数DEST与SRC的内容互换。允许的操作数组合:交换可以在通用寄存器之间或通用寄存器与存储器之间进行,但不能在两个存储单元之间直接进行,DEST与SRC可以为字或者是字节。3.1.2通用数据传送指令LOGO3.1数据传送指令3.1.2通用数据传送指令举例例XCHGAL,BL;AL和BL的内容互换
XCHGBX,CX;BX和CX的内容互换。
XCHG[1200H],CX;CX中的内容和1200H,;1201H两单元的内容互换LOGO3.1数据传送指令三、查表换码指令XLAT格式:XLAT ;AL←(BX+AL)表:≤256字节的数据区。
BXBX指向表的首地址
AL指向数据表某项地址(0~255)。执行XLAT时,将BX+AL指向字节单元中的值送AL。3.1.2通用数据传送指令LOGO3.1数据传送指令3.1.2通用数据传送指令举例例1:该指令操作数全为隐含,换码表首地址在BX中,欲读取数据表单元偏移量在AL中。例:MOVBX,1000HMOVAL,04HXLAT;AL←(BX+AL)=(1004H)=50HLOGO3.1数据传送指令3.1.2通用数据传送指令举例换码过程:3.1数据传送指令堆栈及堆栈操作指令3.1.3堆栈操作指令
堆栈操作指令堆栈是内存的一个逻辑段,当这个段被指定为堆栈后,可用堆栈操作指令对它进行特殊规则的访问,这个规则就是:不论入栈还是出栈,都只能从栈顶处进行,堆栈内数据遵循先进后出,后进先出的原则。堆栈的设置8086/8088中专门有2个寄存器用于堆栈操作:堆栈段寄存器SS和堆栈指针寄存器SP。
SS用来存放堆栈段的段基址,SP用于指示堆栈的顶部单元的段内偏移量,开始时堆栈内没有数据,栈顶就是栈底,故开始时要将栈底单元的偏移量赋给它,以指明栈低位置。3.1数据传送指令3.1.3堆栈操作指令堆栈段地址由SS段寄存器提供堆栈区操作数据地址由堆栈指针寄存器SP提供。堆栈按“后进先出”原则设计的数据区。SP的初值是指向的地址为栈底,进行堆栈数据操作后SP指向栈顶地址。必须为字操作数。3.1数据传送指令3.1.3堆栈操作指令1.入栈指令PUSH格式:PUSHSRC;SP←SP-2,(SP+1,SP)←(SRC)3.1数据传送指令3.1.3堆栈操作指令1SP←SP-1,调整堆栈指针,指向一个空地址(新栈顶)2(SP)←(SRCH),源操作数高字节送SP指向的单元;3SP←SP-1,调整堆栈指针,指向一个空地址SP;4(SP)←(SRCL),源操作数低字节送SP指向的单元。8088的入栈过程:3.1数据传送指令3.1.3堆栈操作指令1SP←SP-2,调整堆栈指针,指向一个空地址;
2(SP)←(SRC),源操作数(字)送SP指向的单元。8086的入栈过程:3.1数据传送指令3.1.3堆栈操作指令3.1数据传送指令3.1.3堆栈操作指令2.出栈指令POP格式:POPDEST;(DEST)←(SP+1,SP),SP←SP+2
;或(DEST)←(SP),SP←SP+23.1数据传送指令3.1.3堆栈操作指令1(DESTL)←(SP),源操作数低字节(SP)送目的;2SP←SP+1,调整堆栈指针SP;3(DESTH)←(SP),源操作数高字节(SP)送目的;4SP←SP+1,再调整堆栈指针SP。8088的入栈过程:3.1数据传送指令3.1.3堆栈操作指令1(DEST)←(SP),源字操作数(SP)送目的;2SP←SP+2,调整堆栈指针SP8086的出栈操作:3.1数据传送指令3.1.3堆栈操作指令举例例2:将例1堆栈内容,仍弹出给AX、BX。POPBXPOPAX3.1数据传送指令3.1.3堆栈操作指令举例例3:将例1堆栈内容,弹出给BX、AX,交换出栈。POPAXPOPBX3.1数据传送指令3.1.4标志传送指令
标志寄存器是一个存放条件标志、控制标志的寄存器,主要用于反映处理器的状态和运算结果的某些特征及控制指令的执行。标志传送指令主要用于对标志寄存器的内容进行读取和修改,共包括4条指令:LAHF、SAHF、PUSHF和POPF。3.1数据传送指令(1)LAHF读标志指令格式:LAHF执行操作:(AH)←(PSW的低8位)3.1.4标志传送指令3.1数据传送指令3.1.4标志传送指令
该指令的两个操作数均是隐含的,源操作数为标志寄存器的低字节,目的操作数为AH寄存器。其中,标志寄存器的低字节包含SF、ZF、AF、PF和CF,分别对应第7、6、4、2和0位,而第5、3、1位无定义。3.1数据传送指令(2)SAHF取标志指令格式:SAHF执行操作:(AH)←(PSW的低8位)3.1.4标志传送指令3.1数据传送指令3.1.4标志传送指令该指令的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届围场满族蒙古族自治县数学三年级第二学期期末质量检测模拟试题含答案解析
- 2026年生物制药行业创新研发动态与市场趋势报告
- 2026年半导体行业加盟战略与产业链布局报告
- 2026年健康医疗行业会员费市场调研
- 2026年环保检测行业政策影响分析报告
- 2026年汽车智能座舱产业政策研究报告
- 2026年文化旅游行业整合与创新动态报告
- 2026年采耳服务市场风险分析报告
- 2026年能源行业供应商比价与降本策略分析报告
- 2026年电子商务佣金趋势报告
- 《医疗器械经营质量管理规范》培训试题及答案
- 2026年电池PACK装配工考试试题(含答案)
- 中国海油2027届校园招聘笔试备考题库及答案解析
- 2026年林业部门招聘森林资源保护与利用专项试卷
- 2026秋新苏教版小学科学三年级上册全册教案
- 2026及未来5年中国中药香市场现状数据分析及前景预测报告
- 2026年西安铁路局人员招聘笔试备考题库及详细答案解析
- 2026年河南省巩义市高一化学上册期末考试检测卷含完整答案(全优)
- 2026年《中国慢性肾脏病临床管理指南(2026版)》
- 2026汽车玻璃行业发展现状分析及智能趋势与应用场景研究报告
- 2026光学薄膜产业现状分析及AR-VR驱动与镀膜技术创新
评论
0/150
提交评论