80X86汇编语言电子教案(3-2-转移指令)

合集下载

80X86汇编语言指令集

80X86汇编语言指令集

80X86汇编语⾔指令集8086/8088汇编语⾔指令集数据传送指令集MOV功能: 把源操作数送给⽬的操作数语法: MOV ⽬的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压⼊或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址⾄寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加⼀或减⼀语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取⼆进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: ⾮压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执⾏BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定⽅向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: ⽐较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执⾏语法: JMP 地址JXX功能: 当特定条件成⽴则跳往指定地址执⾏语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成⽴B: BELOW,当C=1时成⽴C: CARRY,当弁时成⽴ CXZ: CX寄存器的值为0(ZERO)时成⽴E: EQUAL,当Z=1时成⽴G: GREATER(⼤于),当Z=0且S=0时成⽴L: LESS(⼩于),当S不为零时成⽴N: NOT(相反条件),需和其它符号配合使⽤O: OVERFLOW,O=1时成⽴P: PARITY,P=1时成⽴PE: PARITY EVEN,P=1时成⽴PO: PARITY ODD,P=0时成⽴S: SIGN,S=1时成⽴Z: ZERO,Z=1时成⽴LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址 LOOPNE(Z) 地址标志位: ⽆CALL,RET功能: ⼦程序调⽤,返回指令语法: CALL 地址 RET RET n标志位: ⽆INT,IRET功能: 中断调⽤及返回指令语法: INT n IRET标志位: 在执⾏INT时,CPU会⾃动将标志寄存器的值⼊栈,在执⾏IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: ⽆CMPSB,CMPSW,CMPSD功能: 字符串⽐较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载⼊或存贮指令语法: LODSB LODSW STOSB STOSW标志位: ⽆REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S⽽定EMC 汇编语⾔指令集符号解说:1.符号‘R’:代表⼀般⽤途寄存器中的其中⼀个。

80X86汇编语言程序设计 第二章⑧.8086 8088指令系统(五)转移指令

80X86汇编语言程序设计 第二章⑧.8086 8088指令系统(五)转移指令

80X86汇编语言程序设计第二章8086/8088寻址方式和指令系统-(五)转移指令1.无条件转移指令(没有条件碰到就转)(1)无条件段内直接转移指令格式:JMP 标号这条指令使控制无条件地转移到标号地址处。

例如:NEXT:MOV AX,CX……JMP NEXT ;转到NEXT处……JMP OVER ;转到OVER处……OVER: MOV AX,1无条件段内直接转移指令格式如下:由操作码和地址差值构成。

指令的操作码| 地址差地址差:是程序中该无条件转移指令的下一条指令的开始地址到转移目标地址(标号所指定的开始地址)的差值。

因为,在执行无条件段内转移指令时,实际的动作是把指令中的地址差加到指令指针IP上,使IP之内容为目标地址,从而达到转移的目的。

段内无条件直接转移指令中的地址差可用一个字节表示,也可用一个字表示。

如果地址差只要用一个字节表示,就称为短转移;如果地址差要用一个字表示,就称为近转移。

段内短跳转:(-128~127)JMP SHORT QUEST段内近跳转:(64KB)JMP NEAR PTR PROG(2)无条件段内间接转移指令格式:JMP OPRD这条指令使控制无条件地址转移到由操作数OPRD的内容给定的目标地址处。

操作数OPRD可以是通用寄存器,也可以是字存储单元。

(3)无条件段间直接转移指令格式:JMP FAR PTR 标号这条指令使控制无条件地转移到标号所对应的地址处。

标号前的符号“FAR PTR”向汇编程序说明这是段间转移。

例如:JMP FAR PTR EXITEXIT是定义在另一个代码段中的标号。

无条件段间直接转移指令的具体动作时把指令中包含的目标地址的段值和偏移分别置入CS和IP。

这种在指令中直接包含转移目标地址的转移方式称为绝对转移。

(4)无条件段间间接转移指令格式:JMP OPRD这条指令使控制无条件地转移到由操作数OPRD的内容给定的目标地址处。

操作数OPRD必须是双字存储单元。

资料:经典的80x86指令系统(指令大全)

资料:经典的80x86指令系统(指令大全)

80x86指令系统80x86的指令系统可以分为以下6组:数据传送类指令算术指令逻辑指令串处理指令控制转移指令处理机控制指令1、数据传送指令数据传送类指令负责把数据、地址或立即数传送到寄存器或存储单元中。

它又可以分为五种:1.1、通用数据传送指令MOV 传送MOVSX 带符号扩展传送MOVZX 带零扩展传送PUSH 进栈POP 出栈PUSHA 所有寄存器进栈POPA 所有寄存器出栈XCHG 交换(1)MOV传送指令格式为:MOV DST,SRC执行操作:(DST)<——(SRC)MOV指令可以在CPU内或CPU和存储器之间传送字或字节,MOV指令不影响标志位(2)MOVSX带符号扩展传送指令格式为:MOVSX DST,SRC执行操作:(DST)<——符号扩展(SRC)该指令的源操作数可以是8位或16位的寄存器或存储单元的内容,而目的操作数则必须是16位或32位寄存器,传送时把源操作数扩展送入目的寄存器。

MOVSX不影响标志位(3)MOVZX带零扩展传送指令格式为:MOVZX DST,SRC执行操作:(DST)<——零扩展(SRC)MOVSX和MOVZX指令与一般双操作数指令的差别是:一般双操作数指令的源操作数和目的操作数的长度是一致的,但MOVSX和MOVZX的源操作数长度一定要小于目的操作数长度(4)PUSH进栈指令格式为:PUSH SRC执行操作:16位指令:(SP)<——(SP)-2((SP)+1),(SP))<——(SRC)32位指令:(ESP)<——(ESP)-4((ESP)+3),(ESP)+2),(ESP)+1)(ESP))<——(SRC)(5)POP出栈指令格式为:POP DST16位指令:(DST)<——((SP)+1),(SP))(SP)<——(SP)+232位指令:(DST)<——((ESP)+3),(ESP)+2),(ESP)+1)(ESP))(ESP)<——(ESP)+4堆栈是一种“后进先出”方式工作的一个存储区,它必须存在于堆栈段中,因而其段地址存放于SS寄存器中。

80X86汇编语言电子教案(2-全部)

80X86汇编语言电子教案(2-全部)

要求1了解计算机系统的基本构成2的编程结构特别是CPU内部的寄存器组以及存储器的编址与寻址等相关内容119714004它是位微处理器21972800816KB319748080它是为多种应用而设计的第二代微处理器也是第一个通用的微处理器寻址能力达64KB11978年Intel8086它是一个位微处理器有条地址线寻1MB2Intel 8088是3802861982位微处理器有址线寻址空间16MB180386位操作通用位拥有根数据线条寻址空间高达4GB配有少量高速缓存2804868KB1月推出数据线位地址线位内部寄存器32位具有两个独立的超高速缓存2月推出数据线位地址线位内部寄存器位一两大部分硬件三个主要组成部分用连接软件系统软件软件是为了运行管理和维护计算机而编制的各种程序的总和系统软件核心是操作系统OS的任务是执行存放在存储器中的指令序列一CPU除了要完成算术逻辑操作外还需要负之间的数据传送任务开始为了使存储器速度更好地与运算器的速度相匹配在芯片中引入了高速缓冲存储器其就功能而言还是属于存储器除了有高速缓冲存储器之外主要有以下三部分组成ALU控制逻辑工作寄存器ALU进行算术和逻辑运算控制逻辑负责对全机的控制工作包括从存储器中取指指令的译码分析从存储器中取操作数发出执行指令的所有命令结果存入存储器以及对总线和的传送控制等工作寄存器息包括操作数地址操作数及运算的中间结果等二80寄存器可以分为的寄存器的寄存器在汇编程序设计时用到的寄存器的寄存器一般应用程序中不用而由系统程序所用的寄存器例如80386的系统地址寄存器控制寄存器测试寄存器等本节只介绍程序可见的寄存器的寄存器可以分为通用寄存器专用寄存器和段寄存器SS FS GSEAX EDX EFLAGS8086 / 8088它位的1通用寄存器位通用寄存器有数据寄存器AX BX CX DX 一般可用于传送和暂存数据保存算术逻辑运算中的操作数和运算结果可以存放地址位存器它们均有各自的名称可独立存取这样能有效地处理字和字节信息指针及变址寄存器SP BP SI DI存放某个存储单元地址的偏移或存放数据但是只能以字16位为单位使用堆栈指针寄存器以及其后继机型具有图中所示的完整的寄存器其通用寄存器有EBX ECX EDX ESP EBP EDI它们可以保存不同宽度的数据例数据AX数据AH AL保存数据及其后继机型中所有的通用寄存器可以存放数据也可以存放地址2专用寄存器的专用寄存器包括IP SP FLAGS 给出将要执行的指令在代码段中的偏移SP它用来存放栈顶的偏移地址FLAGS标志寄存器又称程序状态寄存器PSW 主要用于反映CPU的状态和运算结果的某些特征位专用寄存器EIP ESP EFLAGS位寄存器中标志寄存器的内容图中未标明的位暂不用奇偶标志15 12 11 10 9 8 7 6 5 4 3 2 1 0…32…IOPL NT VM RF AC VIF VIP ID 应用程序不必关心或修改这些位的状态因而我们不再对这些标志位加以说明下面介绍以下一些标志位的作用操作数低1表示有符号数运算结果意义但其值是确定的同样的无符号数运算时OF SF 无实际意义但其值也是确定的无符号运算时OF 无实际意义这时计算机是按有符号运算来标志有符号数补码运算时如下情况1正数正数负数负数负数正数否则OF 01运算结果型标志OF0 SF0 CF 1 AF 1 ZF0 PF1 0FFFFH8000H有符号OF 1 SF0 CF 1 AF0 ZF0 PF1 8576 在计算机中的8位表示85补01010101B 55H76补01001100B 4CH补码的表示范围85+76=161>127超出范围OF12状态控制标志DF在串处理指令中控制处理信息的方向使用TF用于调试时的单步操作正常工作不产生陷阱每条指令执行后产生陷阱由系统控制计算机IF中断请求屏蔽位3段寄存器段寄存器也是一种专用寄存器它们专用于存储器寻址用来直接或间接地存放段地址的段寄存器有及其后继机型增加了两个附加段寄存器有关段寄存器的使用见下节内容存储器是用来存放程序数据的记忆装置一存储单元的地址和内容D存储器以字节8bit为单位存储信息7456一存储单元的地址D每个字节单元有一个地址从编号顺序加为了正确地存放或取得信息每一个字节单元给以一个唯一的存储器地址称为物理地址在机器里地址是用来表示的它是无符号整数地址的十六进制数D地址用二进制无符号数表示写成十六进制D位二进制无符号数可表示216个地址十六进制表示用四位0000H ~ FFFFH0000000100020003……000E000F00100011……001E001F00200021……002E002FFFE0FFE1……FFEE FFEFFFF0FFF1……FFFE FFFF位它可访问的字00000H FFFFFH位它可访问的地000000H FFFFFFH8038680486位它可访问的地址单元范围为00000000H FFFFFFFFHPentium 的地址总线宽度为位它可访问的地址单元范围为000000000H FFFFFFFFFH8086/8088 位字80386Pentinum 机的字长位双字由个字节组成的字为D位字由连续的两个字节组成低位字节存入低地址高位字节存入高地址高高低低原则双字四倍字单元地址依照原则存储字节我们已经学习了存储单元的编址那么存储单元的内容如何表示呢二存储单元的内容存储单元中存放的信息称为该存储单元的内容表示为地址例如存储单元的存放形式如右56780H34H 则可以表示为56780H34H若地址为56781H的字节存储单元的内容为56H则可以表示为56780H字5634H可见同一地址既可以是字节地址也可以是字地址甚至是双字地址等这要根据实际使用时数据的位数确定中的内容我们也采用这种表示方式如R二实模式下存储器寻址只能在实模式下工作外其他微处理器均可在实模式或保护模式下工作1MB位其最大1MB实际上实模式就是为而设计的工作方式实模式要解决的问题是位字长的机器提供位地址解决的方法为存储器的分段寻址1存储器地址的分段分段管理目的D20位字长可表示的地址范围为0000H ~FFFFH64K位的地址空间呢分段管理原理D1逻辑段号逻辑段内地址分段原则1每个逻辑段的起始地址必须是的倍数即从小段开始2每个逻辑段的最大长度为64K分段实质将位来表示例如20的表示12345H10000H2345H 1000H162345H 12340H0005H 1234H160005H 12345H 1000H2345H1234H0005H位物理地址段地址每一小段的位起始地址段值段基址段内偏移地址段内相对于段起始地址的位偏移量段内偏移有效地址EA逻辑地址段地址偏移地址位物理地址分段管理的特点♦存储单元物理地址具有唯一性例题3017000A单元地址是多少若段地址和偏移地址是3015 3010007A呢解3017000A3017A3015002A3017A3010007A3017A2段寄存器的引用采用存储器地址分段寻址程序设计中不使用物理地址只需采用段值和偏移来指定需要存取的存储单元808680286中的段寄存器有四个如下代码段存放当前正在运行的程序数据段存放当前运行程序所用的数据堆栈段定义了堆栈所在的区域段寄存器是一个辅助的数据区X86的段寄存器有六个如下包括上述四个段寄存器附加段是一个辅助的数据区附加段是一个辅助的数据区除非专门指定一般情况下各段在存储器中的分配是由操作系统负责的每个段可以独立占用区各段也允许重叠8086♦64KB那么就要在两个或多个数据段中存取数据当需要改变被访问数据段时内的段值通常情况下在指令中不指明所需的段寄存器这由段寄存器的引用约定来保持程序设计与执行的一致性所谓段寄存器引用约定就是相对于不同的存储器操作引用相应的段寄存器形成物理地址例如取指令在代码段中寻址CS IP堆栈操作在堆栈段中寻址SS或SS BP源数据串在数据段中寻址DS SI目的数据串在附加段中寻址ES DI其他数据存取通常在数据段中寻址DS EA另外程序员有权选择段寄存器即使用段超越前缀例如在存取一般存储器操作数时段寄存器不一定是DS它可以是CS ES SS二保护方式下存储器寻址1实模式下的寻址空间为1MB而供16MB80386及其后继机型均提供大的地址空间系统首先要解决的问题是如何寻址2引出保护模式更重要的原因是为支持多任务处理在保护方式下机器可提供多任务的管理机多道运行的程序之间必须相互隔离使得一个应用程序的缺陷或故障不会破坏系统也不会影响其他引入保护模式保护方式存储器寻址简介1逻辑地址实模式地址段址偏移编程时未直接给定存储单元的物理地址物理地址通过计算得到保护方式地址选择器偏移选择器存放在段寄存器中但不直接表示段基地址而是由操作系统通过一定的方法取得段基址再加偏移得到物理地址在保护方式下计算物理地址更复杂+段基地址2描述符其内容由系统设置不由用户建立作用描述段的大小段在中的位置控制和状态信息组成基地址界限访问权附加字段四部分其中1基地址指定段的起始地址2界限存放段的长度3访问权段在系统中的功能并给出该段的一些控制信息4附加段表示该段的一些属性保护方式下的地址转换可以大致描述如下系统按选择器的内容根据指定的途径可以找到所选段对应的描述符值确定所要找的存储单元所在的段再加上逻辑地址中指定的偏移地址就可以找到相应的存储单元我们以后所讲的内容都是基于实模式下的编程。

第三章80X86指令系统1(2)

第三章80X86指令系统1(2)
4
特点:
• 可以进行8位、16位的无符号数和带符号数的加法运算;
• 源操作数和目标操作数不能同时为存储器, 不能为段寄存器; • 指令影响标志位的情况: OF=1,溢出 CF=1,溢出
其他条件标志(SF,AF,PF,ZF)根据定义设定。
5

MOV AL, 7EH MOV BL, 5BH ADD AL, BL
19
5、CMP(Compare) 比较指令
格式:CMP dest,src ; B/W dest - src
结果不送,置标志。
影响标志:A、C、O、P、S、Z。
src: 立即数,寄存器,存储器。 dest:寄存器,存储器。 例: CMP AL,0AH CMP CX, DI ;寄存器与立即数比较 ;寄存器与寄存器比较
18
4、NEG (Negate) 求补指令
格式: NEG dest ;B/W, dest ← 0 - dest dest : 寄存器 、存储器。 操作: 把操作数按位求反后末位+1。
影响标志:A、C、O、P、S、Z。
CF: 操作数为0时求补,CF=0 ; 否则总是CF=1. 否则OF=0.
OF: 对-128 或-32768求补,OF=1; 例: NEG AL ADD AL, 100
类型举例:
ADC CX, 300 ADC AL, BL ADC DX, COUNT[SI] ADC BLOCK[DI], BX ;寄存器+立即数+CF ;寄存器+寄存器+CF ;寄存器+存储器+CF ; 存储器 +寄存器+CF
7
用途举例: 计算两个多字节数相加 3B74AC60F8H + 20D59E36C1H=? 两个多字节数存放在: 开始 DATA1,DATA2的开始单元。

第三章80X86指令系统(3)

第三章80X86指令系统(3)

使用相对寻址方式,范围-128~+127个字节
即条件转移指令都是“直接短转移” 不满足条件时: IP 不变,顺序执行下一条指令
22
注意几点: ① 所有条件转移指令都是相对转移形式,
范围(-128~+127)。
当需往一个较远地方进行条件转移时, 选用条件转移转到附近一个单元, 然后,再用无条件转移转到较远的目的地。 ② 条件转移指令中,相当一部分指令是在比较完二个数大 小后,根据结果而决定是否转移, ③条件转移指令不影响标志位
JMP指令的操作:无条件地将控制转移到指令中规定的目的地
目标地址可以是:直接方式/间接方式给出。
JMP指令不影响标志位。 转移分成两类:段内或段间转移。 无条件转移指令有五种格式: 段内直接短转移
段内直接近转移
段内间接转移 段间直接远转移 段间间接转移
2
(2)、Jcc 条件转移指令
LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ CALL, RET
循环控制 过程调用
中断指令
INT, INTO, IRET
7
(二) 控制转移指令(Control transfer instructions)
1、转移指令 转移指令将程序控制从一处转换到另一处的最直接方法。 在CPU内部,转移是通过将目标地址传送给CS:IP来实现的。 注意:CS—段地址 IP—偏移量
格式:JMP NEAR PTR OPR OPR—在汇编语言中使用符号地址。
在机器语言中存放位移量D16
位移量D16 = 符号地址的偏移地址 - 当前IP的值 执行操作: IP ← IP 当前 +D16 NEAR近属性标号 位移量为D16范围:-32768~+32767H,占有两个字节。 而指令本身占有三个字节。可以转移到段内的任一位置。 过程:如同SHORT,只是位移量为D16范围-32768~+32767H,

80X86的指令系统

80X86的指令系统
使片内Cache无效,不写回主存 使片内Cache无效,写回主存 分页式存储器管理中,高速缓冲后援 寄存器TLB中的某项无效
<>
SETA/SETNBE opr
SETAE/SETNB opr
SETB/SETNAE opr
SETBE/SETNA opr
SETE/SETZ opr
SETNE/SETNZ opr
Reg,mem
Reg1=reg2*imm Reg=mem*imm
将EAX的符号位D31扩展到EDX
<>
BT opr1,opr2 BTC opr1,opr2 BTR opr1,opr2 BTS opr1,opr2
将opr1中的第opr2位送CF 将opr1中的第opr2位送CF,并取反该位 将opr1中的第opr2位送CF,并复位该位 将opr1中的第opr2位送CF,并置位该位
Reg,mem
<>
CMPXCHG opr1,opr2
算 CMPXCHG8B 术 mem64 运 算 IMUL 指 reg1,reg2,imm 令 IMUL 组 reg,mem,imm
CDQ
Opr1-opr2,若ZF=1,opr1=opr2,否则,累 加器=目的操作数。 EDX,EAX-mem64,相等,则EDX,EAX送 mem64,否则,mem64送EDX,EAX
汇编语言程序设计
80X86的指令系统
Intel公司在成功推出8086/8088CPU之后,陆续推出 80286、80386、80486和Pentium(80586)CPU,其指令系 统在8086/8088的基础上,又扩充了一些指令。
80X86指令系统一般不作为课堂讲述的主要内容,因 此,只给出部分指令的汇总格式,不具体说明、分析指 令的格式、功能及使用方法。

第三章 汇编语言80X86的指令系统和寻址方式

第三章 汇编语言80X86的指令系统和寻址方式

第3章 80x86指令系统和寻址方式
《汇编语言》
对同一类型指令,执行速度: 寄存器操作数 立即数操作数 存储器操作数



mov mov mov
AL , BL AL , 0 AL , [ BX ]


17
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2
80x86寻址方式
3.2.1 寻址、寻址方式的概念
18
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2.2 80X86的指令格式
指令助记符 [ 操作数1 [ , 操作数2 [ , 操作数3 ] ] ] [;注释]
指令助记符体现该指令的功能,它对应一条二进 制编码的机器指令。 指令的操作数个数由该指令确定,可以没有操作 数,也可以有一个、二个或三个操作数。
指令系统的基本概念
指令系统
计算机的指令系统就是指该计算机能够执行
的全部指令的集合。 每种计算机都有它支持的指
令集合。 16位8086指令系统是整个Intel 80x86 系列微处 理器指令系统的基础。
2
第3章 80x86指令系统和寻址方式
《汇编语言》
3.1.2
指令格式
指令由操作码和操作数两部分组成。
双操作数: 指令中给出两个操作数。
7
第3章 80x86指令系统和寻址方式
《汇编语言》
① 无操作数: 指令只有一个操作码,没有操作数。
有两种可能: ▲ 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 ▲ 操作数隐含在指令中。 如 STC , CLC等处理机控制命令。
AAA , DAA等调整指令。
1) 立即寻址方式

80x86汇编语言程序设计 概述及解释说明

80x86汇编语言程序设计 概述及解释说明

80x86汇编语言程序设计概述及解释说明1. 引言1.1 概述在计算机科学领域中,汇编语言是一种与计算机硬件直接交互的低级语言。

它通过使用特定的指令集和对应的操作码,与硬件进行通信和控制。

80x86汇编语言是一种针对Intel 8086微处理器系列的汇编语言。

本文将介绍80x86汇编语言程序设计的基本概念、语法规则以及开发环境与工具。

1.2 文章结构本文将按照如下结构进行介绍:- 引言部分(当前部分)将提供关于文章内容和结构的总体说明。

- 在第二部分中,我们将概述汇编语言的基本概念,并详细介绍80x86架构。

- 第三部分将重点介绍程序开发环境与工具,包括常用的编译、链接和调试工具,并提供搭建开发环境的指南。

- 第四部分将涵盖80x86汇编语言的基本概念和常用语法指南,包括数据类型和寻址方式、寄存器和标志位、以及指令集和汇编指令格式等内容。

- 第五部分我们将通过程序设计实例分享一些技巧,包括简单程序示例及解释、循环结构及优化技巧分享,以及数组与字符串处理技巧。

- 最后,在结论部分将总结回顾本文的主要内容,并对80x86汇编语言程序设计在未来的发展提出展望,同时引出一些问题供读者思考。

1.3 目的本文的目的是为读者提供一个全面且系统性的80x86汇编语言程序设计概述与解释说明。

通过阅读本文,读者将了解到80x86汇编语言的基本概念和语法规则,并掌握相关开发环境和工具的使用。

同时,通过实例和技巧分享,读者能够加深对80x86汇编语言程序设计的理解,并应用于实际项目中。

我们希望读者能够通过本文学习到更多关于80x86汇编语言程序设计方面的知识,并在日后的学习与工作中能够灵活运用这些知识。

2. 80x86汇编语言程序设计概述2.1 汇编语言简介汇编语言是一种低级的计算机编程语言,它使用助记符来代表计算机的机器指令。

与高级编程语言相比,汇编语言更接近计算机底层硬件的操作,可以对计算机进行更细粒度的控制和优化。

80x86汇编指令详解

80x86汇编指令详解

80x86汇编指令详解(上)2008年01月15日星期二 15:0580x86指令系统,指令按功能可分为以下七个部分。

(1) 数据传送指令。

(2) 算术运算指令。

(3) 逻辑运算指令。

(4) 串操作指令。

(5) 控制转移指令。

(6) 处理器控制指令。

(7) 保护方式指令。

3.3.1数据传送指令数据传送指令包括:通用数据传送指令、地址传送指令、标志寄存器传送指令、符号扩展指令、扩展传送指令等。

一、通用数据传送指令1 传送指令传送指令是使用最频繁的指令,格式:MOV DEST,SRC功能:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。

传送指令允许的数据流方向见图3 11。

图 3.11 传送指令数据流由上图可知,数据允许流动方向为:通用寄存器之间、通用寄存器和存储器之间、通用寄存器和段寄存器之间、段寄存器和存储器之间,另外还允许立即数传送至通用寄存器或存储器。

但在上述传送过程中,段寄存器CS的值不能用传送指令改变。

例 3.12CPU内部寄存器之间的数据传送。

MOV AL,DH ;AL←DH(8位)MOV DS,AX ;DS←AX(16位)MOV EAX,ESI ;EAX←ESI(32位)例 3.13CPU内部寄存器和存储器之间的数据传送。

MOV [BX],AX ;间接寻址(16位)MOV EAX,[EBX+ESI] ;基址变址寻址(32位)MOV AL,BLOCK ;BLOCK为变量名,直接寻址(8位)例 3.14立即数送通用寄存器、存储器。

MOV EAX,12345678H ;EAX←12345678H(32位)MOV [BX],12H ;间接寻址(8位)MOV AX,1234H;AX←1234H(16位)使用该指令应注意以下问题:·源和目的操作数不允许同时为存储器操作数;·源和目的操作数数据类型必须一致;·源和目的操作数不允许同时为段寄存器;·目的操作数不允许为CS和立即数;·当源操作数为立即数时,目的操作数不允许为段寄存器;·传送操作不影响标志位。

80x86汇编语言程序设计资料.

80x86汇编语言程序设计资料.

2、设计单元电路
设计单元电路的一般方法和步骤如下: (1) 根据设计要求和已选定的总体方案原理框图,确定对各 单元电路的设计要求,拟定主要单元电路的性能指标、与前后 级之间的关系、分析电路的构成形式。应注意各单元电路之间 的相互配合,注意各部分输入信号、输出信号和控制信号的关 系。 (2) 拟定好各单元电路的要求后,按信号流程顺序分别设计 各单元电路。 (3) 选择单元电路的组成形式。一般情况下,应查阅有关资 料,以丰富知识,开阔眼界, 从已掌握的知识和了解的各种电路中选择一个合适的电路。 如确实找不到性能指标完全满足要求的电路时,也可选用与设 计要求比较接近的电路,然后调整电路参数。 在单元电路的设计中特别要注意保证各功能块协调一致地 工作。
课题二 简易信号发生器设计
一、设计目的 1、掌握信号发生器的设计方法和测试技术。 2、了解单片函数发生器IC8038的工作原理和 应用。 3、学会安装和调试分立元件与集成电路组成 的多级电子电路小系统。
二、设计技术指标与要求 1、 设计要求 1、电路能输出正弦波、方波和三角波等三种波形; 2、输出信号的频率要求可调; 3、拟定测试方案和设计步骤; 4、根据性能指标,计算元件参数,选好元件,设计电 路并画出电路图; 5、测量输出信号的幅度和频率; 、写出设计报告。 扩展要求:输出信号的幅度和频率要求连续可调,幅 度范围为0-5V,频率范围100Hz-10KHz。 2、 技术指标 频率范围:100Hz-1KHz,1Kz-10KHz;输出电压:方波 VP-P≤24V,三角波VP-P=6V,正弦波VP-P=1V;方波tr小 于1uS。
课题三 音响放大器的设计
一、设计目的 1、解集成功率放大器内部电路工作原理 2、掌握其外围电路的设计与主要性能参 数测试方法 3、掌握音响放大器的设计方法与电子线 路系统的装调技术

80X86指令系统解析

80X86指令系统解析
31
指令执行前堆栈段 指令执行后堆栈段 低 地 址 (SP) → 07 21 (SP) →
出栈方向 低地址
07 21
(AX) = ?
(AX)=2107
32
3.3.3 地址传送指令
• 1. 取有效地址指令 • 格式:LEA REG,MEM • 功能:将源操作数的有效地址传送到通用 寄存器,操作数REG为16位或32位通用寄 存器,源操作数为16位或32位存储器操作 数。 • 执行的操作:(REG) ← (MEM)
18
• 例3.7 假设指令:MOV AX, [BX+SI+200H], 在执行时,(DS)=3000H,(BX)=2100H, (SI)=0010H,内存单元32310H的内容为 5678H。问该指令执行后,AX的值是什么?
19
• 解:根据相对基址加变址寻址方式的规则,在执 行本例指令时,源操作数的有效地址EA为: EA=(BX)+(SI)+200H= 2100H+0010H+200H=2310H • 该操作数的物理地址应由DS和EA的值形成,即: • PA=(DS)*16+EA= 3000H*16+2310H= 32310H. 所以,该指令的执行效果是:把从物理地址为 32310H开始的一个字单元中的值传送给AX寄存 器。执行后(AX) =5678H
25
3.3.2 堆栈操作指令
• • • • 1. 入栈指令 1) 源操作数入栈 格式:PUSH SRC 功能:将源操作数压入堆栈,源操作数允 许为16位或32位通用寄存器、存储器和立 即数以及16位段寄存器
26
• 执行的操作: • 16位指令:(SP) ← (SP) -2 • ((SP)+1,(SP)) ← (SRC) • 32位指令:(ESP) ← (ESP) -4 • ((ESP)+3, (ESP)+2,(ESP)+1,(ESP)) ← (SRC)

80X86汇编语言电子教案(3-2-全部)

80X86汇编语言电子教案(3-2-全部)

POP BX 执行后 (BX) = 2107H
POP BX 执行过程堆栈图示
—白燕—
例:假设一个指令序列: PUSH X ; X 必须是字变量 PUSH ES POP Y ; Y 必须是字变量 执行前:(X)=1234H, (SS)=0FFA0H,
ES)=2367H, (SP)=0100H,
试画出堆栈的变化情况
—白燕—
答案: 地

初始堆栈:
由 (SP)=100H



栈底


PUSH X
(SP)=00FEH 34H
12H
100H

(X)=1234H
栈底

PUSH ES
(SP)=00FCH 67H
23H
(SP)= 00FEH 34H
ES=(2367H)
12H

栈底

POP Y
Y 67H
23H
—白燕—
5 PUSHA/PUSHAD

MOV BX, OFFSET BLOCK
LEA BX, BLOCK
操作数 长度
16 16 32 32
地址 长度 16 32 16 32
执行的操作
计算所得的16位有效地址存入16位目的寄存器32 位有效地址 截取低16位存入16位目的寄存器 16位有效地址 零扩展后存入32位目的寄存器 计算所得的32位有效地址存入32位目的寄存器
必须注意
存入寄存器的值是由SRC计算出的有效地址 值 而不是该地址所在的存储单元的内容
—白燕—
下面举例说明LEA BX, BLOCK 与MOV BX, BLOCK的区别
例 假设BLOCK的偏移量是0100H BLOCK =3412H

汇编语言讲义第三章80x86的指令系统

汇编语言讲义第三章80x86的指令系统
(load EA)
LEA
将存储器操作数的有效地址传送至指 定的16位寄存器中
LEA r16,mem ;r16←mem的有效地址EA
例10
指针传送指令
LDS r16,mem
;r16←mem,
;DS←mem+2
LDS指令将主存中mem 指定的字送至r16, 并将mem的下一字送 DS寄存器
LES r16,mem
进位标志操作指令
用于任意设置进位标志
CLC ;复位进位标志:CF←0
STC
;置位进位标志:CF←1
CMC ;求反进位标志:CF←~CF
方向标志操作指令
串操作指令中,需要使用
CLD ;复位方向标志:DF←0 每次
操作使变址寄存器增大
STD ;置位方向标志:DF←1每次操
作使变址寄存器增大
中断标志操作指令
– 低8位传送:LAHF和SAHF – 16位传送:PUSHF和POPF
标志低字节进出AH指令
LAHF
;AH←FLAGS的低字节
LAHF指令将标志寄存器 的低字节送寄存器AH
SF/ZF/AF/PF/CF状态标 志位分别送入AH的第 7/6/4/2/0位,而AH的 第5/3/1位任意
SAHF
;FLAGS的低字节←AH
MOVSX带符号扩展传送指令(386及后继机型用)
传送指令: MOVSX DST, SRC
执行操作: (DST) 符号扩展(SRC)
MOVSX reg1,reg2 MOVSX reg, mem 注意:
* 原操作数可以是8位或16位,目的操作数必须是16 位或32位寄存器
(3)MOVZX带零扩展传送指令(386及后继机型用) * 不管源操作数的符号位是否为1,高位均扩展为零

80x86汇编课程设计

80x86汇编课程设计

80x86汇编课程设计一、教学目标本课程的教学目标是使学生掌握80x86汇编语言的基本语法、指令系统、编程方法和调试技巧。

通过本课程的学习,学生将能够:1.理解汇编语言的基本概念和特点,包括寄存器、内存、栈等概念。

2.掌握80x86汇编语言的指令系统,包括数据传输、算术运算、逻辑运算、控制流等指令。

3.学会使用汇编语言编写程序,包括程序的框架、调试和优化。

4.能够运用汇编语言解决实际问题,提高计算机的运行效率。

二、教学内容本课程的教学内容主要包括以下几个部分:1.汇编语言的基本概念和特点,如寄存器、内存、栈等。

2.80x86汇编语言的指令系统,包括数据传输、算术运算、逻辑运算、控制流等指令。

3.汇编语言的编程方法,包括程序的框架、调试和优化。

4.汇编语言在实际问题中的应用,如性能优化、嵌入式系统等。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,包括:1.讲授法:讲解汇编语言的基本概念、指令系统和编程方法。

2.案例分析法:分析典型的汇编语言程序,让学生了解汇编语言在实际问题中的应用。

3.实验法:让学生动手编写汇编语言程序,培养实际操作能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用权威、实用的汇编语言教材,为学生提供系统性的学习资料。

2.参考书:提供汇编语言相关的高级参考书籍,帮助学生深入理解知识点。

3.多媒体资料:制作课件、视频等多媒体资料,提高学生的学习兴趣。

4.实验设备:准备计算机实验室,让学生进行汇编语言编程实践。

五、教学评估本课程的评估方式将包括平时表现、作业和考试等几个方面,以确保评估的客观性和公正性,并全面反映学生的学习成果。

具体评估方式如下:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和理解程度,占总评的20%。

2.作业:布置相应的汇编语言编程作业,评估学生的编程能力和应用能力,占总评的30%。

80X86汇编语言电子教案(1-全部)

80X86汇编语言电子教案(1-全部)

第版温冬婵编著清华大学出版社IBM PC汇编语言程序设计沈美明等清华大学出版社汇编语言程序设计教程杨季文等清华大学出版社学时一计算机语言发展简史机器语言真正唯一能让直接识别的语言它是二进制编码表示的机器指令的集合及一组使用机器指令的规则能直接识别并遵照执行的指令称为机器指令目的程序或目标程序直接执行CPU其不尽相同1用(2200H)+(2201H)结果存放在中的程序片段用进制表示将中的数送到将(AL)+(2201H)和数送到将(2202H)优点目标程序小执行速度快效率高缺点表达的意义不直观编写阅读调试较困难高级语言面向人的语言有多种类型优点便于阅读易学易用不涉及硬件具有通用性缺点目标代码冗长占用内存多从而执行时间长效率不高不能对某些硬件进行操作汇编语言是一种符号语言与机器语言一一对应使用助记符表示相应的操作并遵循一定的语法规则与机器语言有类似的优缺点但比机器语言更易于为人们所理解汇编语言源程序下面是两个小例子例编写的例是用汇编语言编写的它们完成相同的功能即把a b的内c并在屏幕上显示出来CPU直接识别并执行这些程序通称为源程序因此所有源程序都必须翻译成目标程序后CPU执行高级语言程序汇编语言程序与机器语言程序的关系则专门负责完成将汇编语言源程序翻译成目标程序二汇编语言相对于高级语言的特点汇编语言是面向机器的语言它的指令语句与机器指令一一对应是机器指令的符号表示因此对于不同类型的CPU要求使用不同的汇编语言和汇编程序保持了机器语言的优点捷的特点可有效地访问控制计算机的各种硬件设备如磁盘存储器CPU端口等目标代码简短占用内存少执行速度快的程序设计语言硬件的功能并提高编程质量三汇编语言的应用对软件的执行时间或存储容量有较高要求的场合例如实时控制系统智能化仪器仪表及高性能软件需要提高大型软件性能的场合例如某些快速处理位处理等高效程序用汇编语言编写的与硬件关系密切要直接有效控制硬件的场合经常与高级语言配合使用是否采用汇编语言编程主要权衡软件的开发时间及软件的质量四为什么要学习汇编语言汇编语言是低级语言它能为程序员提供最广阔的编程舞台学好汇编语言就能够站在计算机运行程序的角度从计算机硬件的角度了解认识计算机系统它是嫁接软件和硬件的桥梁•学好汇编语言对今后可能涉及的计算机特别是单片机系统开发有极大帮助五如何学好汇编语言在接下来的学习过程中学习汇编语言程序设计和学习高级语言程序设计有所不同汇编程序更不能编写自己的应用程序为我们要为今后的编程作一个充分的知识储备例如的编程结构指令系统寻址方式指令功能和操作对象伪指令格式等所以希望同学们要有一定耐心把每节课内容学到手在理解的基础上记忆需要强调的是更重要的是记忆换句话说对于正确的东西暂时不能理解的也要记下来因为疑团总是在后面解开六学习目标及要求掌握汇编语言程序设计的基本概念机的基本结构编程结构掌握Intel 80X86CPU的指令系统及寻址方式学会使用DOS和BIOS功能调用及高级汇编语言技术掌握使用汇编语言设计编写调试和运行程序的方法汇编语言预备知识的复习通过前面的讲解我们知道计算机只能识别以二进制形式存在的机器语言无论是高级语言还是汇编语言最终都要转换为机器语言即二进制形式而且计算机内部数据的存放和运算都是二进制形式要学习汇编语言必须首先了解二进制而我们的惯性思维是十进制本节我们要复习1进位计数制2不同基数的数之间的转换特别是二进制十进制二进制十六进制之间的转换3不同基数的数的运算4机器数的表示重点掌握有符号数的补码表示一数制进制数a其含义为·r十进制1012.34 = 110+ 2 10+ 3 10+ 4二进制基数为2逢二进一= 1 2+ 1 + 1十六进制基数为16逢十六进一1001, 0001, 1000, 0111= 9 + 1 16+ 8 16+ 7 16八进制基数为8逢八进一例若要写一个八进制数197对否例同样的一串数字101若表示的数制不一样其含义也不一样如下101D=101B=101O=那么如何区分它们呢现对常用进制数归纳总结如下01070909,a,b,c,d,e,f,在计算机中为了区分不同数制的数据采用以下方法DO二进制转换直接计算求和1降幂法例27D = ? B2除法转换整数部分由除法得到的余数顺序产生由低到高的各位数码直至商为乘法转换小数部分由乘法得到整数顺序产生由高到低的各位数码直至小数部分为0例如12位一组用十六进制数码表示反之十六进制每位扩展为4位二进制数码十六进制与二进制的转换表见书P4表1.11+1=0 进位1三运算逻辑运算按位操作运算NOT运算AND A B A ∧B 运算ORA B A ∨B 运算XOR∀B例X=00FFH Y=5555H求四数机器数的表示计算机中的数用二进制表示分为符号数有符号数的符号也用二进制位表示例如8位二进制符号位=01有符号数的补码表示1正数的补码形式绝对值的二进制数形式符号位02负数的补码形式2n绝对值的补码n80X86中为机器字长快速得到负数补码的两种方法a先得出其绝对值对应的二进制形式然后对该二进按位变反最后再将1b先得出其绝对值对应的二进制形式然后将该二进制最右边为的位不变其所有左边位按位变反例位[-46]=1[46]= 0010 1110按位求反1101 0010 0D2H2[46]1101 0010 0D2H所以[-46]=11010010B0D2H特殊值的补码= 1111 1111 =0FFH例写出下列数据的补码表示12[-39H]3[26 ]4例试比较两个二进制数01111111B的大小例写出下列数据的补码表示12[-39H]3[26 ]4例试比较两个二进制数01111111B的大小解有符号数2数的符号扩展无符号数只要在最高位前添足够的0即可有符号数补码形式表示进行符号位的扩展时在最高位前添足符号位正数添0负数添1例如0D2H8位补码视为有符号数则其符号扩展为FFD2H16位视为无符号数则其符号扩展为00D2H16位3数的表示范围补码的表示范围-位无符号数4补码的加法和减法补码表示的数具有以下特性求补例如[117]补的补码例下列各数均为十六进制表示的位二进制数请说明当它们分别被看做用补码表示的带符号数或无符号数时它们所表示的十进制数是什么1D8 2FF解1有符号数[11011000]即是的补码无符号数2162有符号数-1无符号数255求补运算在补码的加减运算中很有用加法规则[X+Y]减法规则[X-Y]符号位参加运算能自动得到正确补码结果例如十进制32257 1110 0111 25的补码(1)0000 01115BCD码采用二进制编码的十进制简称BCD码BCD码位二进制数编码表示1位十进制数常用的是8421BCD码6字符表示法码表示字符见书 1.3五数据种类计算机中若干位二进制信息可表示一个存储单元地址I/O程序和数据在汇编语言程序中有指令操作码操作数等数值数据如二进制数十进制数十六进制数逻辑数据逻辑变量通常按位定义码等表示的信息其位数一般是的倍数因此汇编语言的基本数据类型有位半字节字节字双字四倍字字符串BCD码等1位计算机存储信息的基本单位2半字节4个连续的二进制数位组成可以表示1个8421码1位十六进制数3字节连续的二进制数位组成字节最低位(右边)称为第0位最高位左边称为第7位7 6 5 4 3 2 1 0一个字节可以表示4字2个连续字节组成一个字5双字2个连续字组成低16位为低字高16位为高字6四字4个连续字组成7字符串由字符构成的一个线形数组通常每个字符用一个字节表示其它的多倍字和多倍字节的数据作业P14 1.1 (1) (3) 1.4 (1) (3)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指令对一定操作对象进行何种操作的命令
指令系统CPU的指令集合称为指令系统一指令集说明
学习要求
指令的基本功能
七转移
一般情况下指令是顺序地逐条执行的但实际上程序不可能全部顺序执行而经常需要改变程序的执行流程
的转向地址
的内容是否重置划分为
特点EIP CS
特点EIP CS
按照转移目的地址的方式分为直接转移和间接转移寻址转移地址包含在指令中
寻址转移地址用操作数表示
例JMP AGAIN 直接寻址JMP WORD PTR TABLE[BX] 间接寻址
转移地址的寻址方式分为
1段内直接寻址转移地址在指令中
2段内间接寻址转移的有效地址在寄存器或存储单元中3段间直接寻址转移地址在指令中
4段间间接寻址转移的有效地址在存储单元中
1
转向的有效地址

例-32768 ~ +32767
或2G386及后继
-128 ~ +127
2
转向的有效地址是一个寄存器或存储单元的内容可用除立即数以外的任何一种数据寻址方式得到

3
用指令中提供的转向段地址和偏移地址取代CS IP 或EIP

code1 segment
4用存储器中的两个相继字的内容取代IP 或EIP 存储单元的地址可用除立即数和寄存器以外的任何一种数据寻址方式得到
物理地址= 16d 例
段址
偏移地址偏移地址段址
1无条件转移指令2条件转移指令3条件设置指令4循环指令
5子程序调用和返回指令6
中断调用和返回指令
2. 无条件转移指令格式JMP OPRD
1直接转移
无条件段内直接转移指令对应的机器指令格式为
到转移目标地址的差值由汇编程序在汇编时计算出节字或双字来表示
例字节
短转移
字或双字
386及后继
近转移
直接短转移
JMP 位偏移量一个字节

短转移标号
表示程序中一条指令的位置
-128 127直接近转移JMP 位一个字或位双字
386及后继机型
2间接近转移JMP
的内容字或双字给定目标地址
M字或双字
例JMP CX (IP)(CX)
WORD PTR1234H
3直接远转移JMP
机器指令格式为
IP EIP 4间接远转移JMP
的寻址方式确定它使用存储器寻址方式
别测试条件每一种条件转移指令都有它的测试条件
满足则转向指定地址否则继续执行下条指令
注意
条件转移只能使用段内直接转移
在中只提供短转移格式目标地址应在
本条转移指令下一条指令地址的-128+127个字节的范围内只能使用段内直接寻址的位位移量-128~127
在386及后继机型中除短转移格式外还提供了近转移格式位移量可以是16位因此它可以转移到段内的任何位置
条件转移不提供段间转移格式需要则要结合指令所有的条件转移指令都不影响条件码
1根据单个条件标志的设置情况转移
CF=1 (JB JNAE)
CF=0 (JNB JAE)
2比较两个无符号数并根据比较结果转移
CF ZF=1
> JNBE(JA) CF ZF=0
3比较两个有符号数并根据比较结果转移
OF)ZF=1
> JNLE(JG) OF)ZF=0
4测试则转移该组指令只提供位偏移
CX=0
ECX=0
指令助记符的含义
不小于有符号数
不低于无符号数
1. X>50转到TOO_HIGH
X-Y溢出转到OVERFLOW否则|X-Y|RESULT X为有符号数
MOV AX, X
αβ是双精度数分别存于中
>βX否则转Y
无条件转移和条件转移指令的区别
JMP的执行是无条件的
位判断转移即转移是有条件的
操作码只有一个条件转移指令的操作码多
跳转的范围远可以进行段内和段间转移
只能在一个段内转移
的操作数使用的寻址方式多既允许直接寻址又允许间接寻址
只能使用直接寻址
4条件设置指令
及后继机型提供的一组指令它可以将某条指令的运算结果存入某个单元以便在其后使用
指令格式为
DST可使用寄存器或任一种存储器寻址方式
DST 只能是字节单元
根据所指定的条件码情况若满足则目的
1否则清0
指令本身不影响条件码

1根据单个条件标志值把目的字节置
SETZ或SETE
SETNZ或SETNE
SETS DST
SETP或SETPE
SETNP或SETPO
SETC或SETNAE
SETNC或SETAE
2比较两个无符号数并根据比较结果转移
测试条件
DST CF ZF=1
> SETNBE(SETA) DST CF ZF=0
3比较两个有符号数并根据比较结果转移
测试条件
OF)ZF=1 > SETNLE(SETG) DST (SF OF)ZF=0
5循环指令
注意
位位移量-128~127
执行步骤
计数寄存器)(
检查是否满足测试条件
(IP)/(EIP) (IP)/(EIP) +8位位移量的符号扩展实行循环
不满足则不变退出循环
循环指令LOOP
测试条件(
为零或相等时循环指令LOOPZ(LOOPE)
测试条件ZF=1计数寄存器
不为零或不相等时循环指令LOOPNZ(LOOPNE)
测试条件ZF=0计数寄存器
注意
1若地址长度为位则计数寄存器为CX否则为ECX 2循环指令的下一条指令地址与转向地址之间的位移量-128+127之间
3循环指令不影响条件码
说明
位地址偏移指针的情况下以为计数器在采用位地址偏移的扩展情况下以ECX 为计数器由于在实方式下通常采用位指针一般仍为计数器
个字之和结果存入TOTAL
4查找字符串中有无空格字符有则将第一个空
格的序号送至AX否则将AX
(CX) 0,ZF=0
退出循环是因为吗
令如何书写代码5请测试存储器中首地址为字数组中正数
0负数的个数分别存放在DI SI AX中
……
转移指令均不影响标志
条件中的标志均由已执行指令序列影响产生
段内转移IP EIP段间转移更新CS 和IP EIP
直接转移相对地址量或直接段地址和偏移地址在指令中
间接转移使用操作数寻址方式操作数作为转移地址
指令适用于所有转移地址寻址方式条件转移指令和循环指令只能采用段内直接
转移808680286或近转移80386及后继寻址方式因此转移范围受到限制如转移目标超出范围必须使用无条件转移
及后继的几点说明
在实方式下80386 位操作数也可以使用位形式表示的存储单元地址
位操作数的扩展32位存储器操作数的有效地址是对位操作数有效地址的扩展所以80386
位操作指令的扩展80386
效地址寻址方式是对16
的扩展
相同扩展形式的指令的段内偏移可达位采用
内偏移时段间转移的目的地址采用位全指针形式表示在实方式下最大的段长仍是64KB因此即使段内偏移用位表示实际的偏移值禁止超过64KB在保护方式下及后继的段可超过64KB段内转移可达4GB
七处理机控制与杂项操作
标志位操作指令
清进位标志指令
执行操作
置进位标志指令
执行操作
进位标志取反指令
执行操作
清方向标志指令
执行操作
置方向标志指令
执行操作
清中断允许标志指令CLI
执行操作
置中断允许标志指令STI
执行操作
影响指定标志
无操作
停机
换码
等待
封锁
界限
建立堆栈帧
释放堆栈帧
作业P112 3.33。

相关文档
最新文档