第09章 转移指令的原理

合集下载

控制转移类指令PPT课件

控制转移类指令PPT课件

微机原理
高于与大于、低于与小于
• 两无符号数比较称 —— 高于、低于 与标志位CF有关 JA/JNBE、 JAE/JNB、 JB/JNAE、 JBE/JNA Above、Below、Not、Equal
• 两有符号数比较称 —— 大于、小于 与标志位OF,SF有关 JG/JNLE、 JGE/JNL 、 JL/JNGE、 JLE/JNG Greater、Less、Not、Equal
条件转移指令的执行流程
微机原理
条件满足 ?
Y,转移
N
顺序执行下一条指令
目标处执行
控制转移类指令
微机原理
有条件转移指令的英文符号
• Zero ——目的操作数减源操作数为0(ZF = 0) • Equal ——目的操作数等于源操作数(ZF = 0) • Above —— 目的操作数高于源操作数(CF = 0) • Below ——目的操作数低于源操作数(CF = 1) • Greater ——目的操作数大于源操作数(OF ⊕ SF = 0) • Less ——目的操作数小于源操作数(OF ⊕ SF = 1) • Carry —— 两无符号运算后有进位(CF = 1) • Overflow ——两有符号运算后有溢出(OF = 1) • Sign —— 两有符号运算后有符号(SF = 1) • Parity —— 奇偶位为偶(PF = 1) • Not —— 不是
控制转移类指令
微机原理
JXX指令与状态标志位 —— ZF、CF
•与ZF有关的条件转移指令
JE/JZ —— 两数相等/两数相减不为零(ZF = 0) JNE/JNZ —— 两数有等/两数相减为零(ZF = 1)
•与CF有关的条件转移指令
JAE/JNB —— 高于或等于/不低于(CF = 0) JNC —— 无进位/无借位(CF = 0) JB/JNAE —— 低于/不高于也不等于(CF = 1) JC —— 有进位/有借位(CF = 1)

三菱PLC传送指令的原理与应用

三菱PLC传送指令的原理与应用

三菱PLC传送指令的原理与应用一、PLC传送指令的概述PLC(Programmable Logic Controller,可编程逻辑控制器)是一种专门应用在工业控制系统中的数字电子设备。

在工业自动化过程中,PLC可以接受各种输入信号,并通过输出信号来控制机械设备和工艺过程。

PLC的传送指令是PLC程序中的基本指令之一,用于实现数据在不同存储区之间的传递。

二、PLC传送指令的原理PLC传送指令的原理是数据的读取、存储和传输。

PLC内部有多个存储区,包括输入存储区(I区)、输出存储区(O区)、中间存储区(M区)和特殊存储区(S区)。

传送指令根据指定的源地址和目标地址,将源地址存储区的数据读取到指定的目标地址存储区中。

三、PLC传送指令的应用PLC传送指令在工业控制系统中有广泛的应用,常用于数据传输和复制。

下面列举了几种常见的应用场景:1.数据传输:PLC传送指令可以将一个存储区的数据传送到另一个存储区,实现数据的传输和共享。

例如,将传感器测量的数据传送到控制算法所需的存储区,或将控制逻辑生成的输出数据传送到控制执行器所需的存储区。

2.数据复制:PLC传送指令可以将一个存储区的数据复制到多个目标地址存储区,实现数据的复制和分发。

例如,在多个输出设备之间复制相同的输出数据,或在多个控制算法之间复制相同的输入数据。

3.数据整理:PLC传送指令可以根据特定的逻辑条件,选择性地传送数据。

例如,根据某个开关的状态,选择性地传送不同的输入数据,或根据某个变量的值,选择性地传送不同的输出数据。

4.数据处理:PLC传送指令可以结合其他指令和运算符,对传送的数据进行处理和计算。

例如,将传输的数据与常量进行比较,根据比较结果选择性地传送不同的数据,或将传输的数据进行数学运算,得到新的结果。

5.数据备份:PLC传送指令可以将一个存储区的数据备份到另一个存储区,实现数据的备份和恢复。

例如,在控制系统发生故障或数据丢失时,可以通过将备份数据传送回原来的存储区,恢复系统的正常运行。

《控制转移指令》幻灯片

《控制转移指令》幻灯片
;低4位清零,DX = ×××0H
MOV BL,AH ;AH→BL
SHL AX,CL ;AX逻辑左移4位,相当于AX低4位
;清零,AX = ×××0H
SHR BL,CL ;BL逻辑右移4位,相当于AH=0×H
OR DL,BL
;现DL的高4位是原来DL的低4位,
;现DL的低4位是原AH的高4位
所以,完成将DX,AX组成的双字逻辑左移4位。
3.6 控制转移类指令
1、无条件转移指令 2、条件转移指令 3、循环控制指令 4、调用和返回指令
5
用于实现分支转移、循环控制、过程调用等
常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET 一般了解: INT n/IRET INTO LOOPZ / LOOPNZ
控制转移类指令通过改变IP〔和CS〕值, 实现程序执行顺序的改变
功能
JS dst JNS dst
结果为负数转移 结果为正数转移
JZ dst JNZ dst
结果为零转移 结果不为零转移
JP dst JNP dst
奇偶校验结果为偶转移 奇偶校验结果为奇转移
JC dst JNC dst
结果有进位(借位)转移 结果无进位(借位)转移
JO dst JNO dst
结果溢出转移 结果不溢出转移
《控制转移指令》幻灯片
本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢!
移位指令小结
指令 逻辑左移指令SHL 逻辑右移指令SHR 算术左移指令SAL 算术右移指令SAR 循环左移指令ROL 循环右移指令ROR 带进位位循环左移指令RCL 带进位位循环右移指令RCR

控制转移类指令

控制转移类指令

13
(2)RET imm16指令
带立即数的返回指令,中的16位立即数称为弹出值,RET指令 在完成返回操作后,还须作SP←SP+imm16,即删除栈中 imm16个字节的内容。
例:下列程序段表示由于在RET指令中规定了弹出值,使控制 从子程序返回后栈顶位置恢复到正常状态。
;主程序 MOV AX,N1 PUSH AX MOV AX,N2 PUSH AX CALL PROG_A MOV SUM,AX
例: JMP EBX
;段内转移,EIP=EBX
JMP FWORD PTR [EBX]
;段间转移,目标地址为[EBX]指向的48位虚拟地址,
;CS=其中的高16位,EIP=其中的低32位
2009年6月2日星期二
4
在64位模式下,指令指针为RIP。JMP指令的执行分为相对转移和绝对 转移两种情况:
若为相对转移,则用RIP寄存器与机器码中的位移量字段相加的和 修改RIP值,此时位移量字段不能超过32位,并将其符号扩展为 64位再相加;
指令格式:RET 或 RETimm16 用以返回到调用这个子程序的断点处,作为子程
序或过程的最后一条指令,。 若是段内返回,则把栈顶的一个字弹出至IP,
恢复调用时断点处的偏移地址; 若为段间返回,则除了弹出IP外,还要从当
前栈顶继续弹出一个字到CS,恢复断点处的 段地址。
2009年6月2日星期二
CALL WORD PTR [BX] ;EA在字存储单元中
2009年6月2日星期二
10
⑶段间直接调用(CALL FAR PTR DST)
操作:PUSH CS
;CS入栈
PUSH IP
;IP入栈
(IP)←偏移地址 ;IP由指令中的偏移地址取代

第九章 转移指令的原理

第九章 转移指令的原理

问题9.1
9.2 jmp指令

无条件转移指令

它指出两种信息:

转移的目的地址 转移的距离
9.3 依据位移进行转移的jmp指令


jmp short 标号
段内短转移,它对IP的修改范围是-128~127。 也就是说,它向前转移时可以最多越过128个 字节,向后转移时最多越过127个字节。 标号:指代码段中的标号,指明了指令要转移 的目的地,转移指令执行后,CS:IP指向标号处 的指令
9.8 LOOP 指令

LOOP指令是循环指令,所有的循环指令 都是短转移,在对应的机器码中包含转 移的位移,而不是目的地址。对IP的修 改范围是 -128 ~ 127。
LOOP 指令


LOOP
操作:

标号
1、(CX) = (CX) – 1 2、如果(CX) ≠0, (IP) = (IP) + 8位位移
寻址方式:
立即数寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址

第九章 转移指令的原理
转移指令


可以修改IP,或同时修改CS和IP的指令统 称为转移指令。 转移指令就是可以控制CPU执行内存中某 处代码的指令。
转移指令

段内转移:只修改IP,例如 jmp ax
实验9 学习在屏幕上显示字符
mov ax, 4c00h int 21h end start
code ends
9.9 根据位移进行转移的意义

方便程序段在内存中的浮动装配
9.10 编译器对转移位移超界的 检测

jmp short 标号 jmp near 标号 loop 标号 jczx 标号

转移指令的原理课件.doc

转移指令的原理课件.doc

第九章转移指令的原理1. 可以修改IP,或同时修改CS和IP 的指令统称转移指令。

概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。

2.8086CPU的转移行为有以下几种:(1) 只修改IP 时,称为段内转移。

例如:jmp ax(2) 同时修改CS和IP 时,成为段间转移。

例如:jmp 1000:03. 由于转移指令对IP 值修改范围的不同,段内转移又分为:短转移和近转移。

(1) 短转移IP 的修改范围是-128~127(2) 近转移IP 的修改范围是-32768~327674.8086CPU的转移指令分为以下几类:(1) 无条件转移指令(如:jmp)(2) 条件转移指令(3) 循环指令(如:Loop)(4) 过程(5) 中断这些转移指令的前提条件可能不同,但转移的基本原理是相同的。

5. 操作符offset 是一个伪指令,它的功能是取得标号的偏移地址。

案例:将s 处的一条指令复制到s0处assume cs:codesgcodesg segments: mov ax,bx ;mov ax,bx 占两个字节mov si,offset s ; 得到标号s 所在的偏移地址赋值给simov di,offset s0 ; 得到标号s0所在的偏移地址赋值给dimov ax,cs:[si]mov cs:[di],axs0: nop ;nop 占一个字节nopcodesg endsend6.jmp 为无条件转移,可以只修改IP,也可以同时修改CS和IP 的值jmp 指令要给出两个信息:(1) 转移的目的地址。

(2) 转移的距离(段间转移,段内转移的短转移和近转移)7.jmp short 标号(转到标号处执行)这种指令实现的是段内短转移。

jmp 指令中的" 标号"是代码段中的标号,指明了指令要转移的目的地,转移指令结束,CS:IP 指向标号处的指令。

8.CPU在执行jmp 指令时并不需要指明转移的目标地址。

转移指令的原理

转移指令的原理

转移指令的原理转移指令的原理1.0 操作符offset操作我offset在汇编语⾔中是由编译器处理的符号,伪指令,它的功能是取得标号的偏移地址将start的代码复制到s0中去assume cs:codecode segmentstart: mov ax, bx ;这⾥占两个字节mov si, offset start ;将start的偏移地址送⼊si中 0000Hmov di, offset s0 ;将s0的偏移地址送⼊di中mov ax, cs:[si] ;通过物理地址将数据送⼊ax,在通过ax送到di中mov cs:[di], axs0: nop ;nop 占⼀个字节nopmov ax, 4c00Hint 21Hcode endsend start1.1 Jmp指令jmp为⽆条件跳转指令,只可以修改ipjmp指令需要给出两种信息转移的地址转移的距离(段内转移,段内短转移,段内近转移)assume cs:codecode segmentstart: mov ax, 0jmp short sadd ax, 1s: inc axmov ax, 4c00Hint 21Hcode endsend startjmp short 标号(转移到标号处执⾏命令)这种jmp格式指令实现的是段内短转移,它对ip的修改范围为-128~127,也就是说,它向前可以越过128个字节,向后的话最多可以越过127个字节assume cs:codecode segmentstart: mov ax, 0jmp short ptr sdb 256 dup(0) ;这⾥定义256个空字节 short是跳不过去的,编译不会通过,可以改成near ptr, far ptrs: inc axmov ax, 4c00Hint 21Hcode endsend start汇编与机器码的对照可以看到在汇编指令中出现的idata,不论它是⼀个数据还是偏移地址,它都会在对应的机器指令中出现,因为它是cpu执⾏的机器指令,他必须要处理的数据或地址,下图是上⾯程序对应的机器代码CPU是如何进⾏转移的尼?通过以上可以CPU 不需要⽬的地址也可以实现对地址的修改ip指向03H 将指令读取到指令缓存区,ip⾃增2变成05H,执⾏执⾏后,EB是jmp的机器码,向后在跳3个字节,ip等于08H,这个时候执⾏inc ax将ax⾃增1jmp short 标号的功能是(ip)= (ip)+8位偏移 8位位移是由程序在编译的时候算出的jmp near ptr 标号说明,段内近转移 16位位移16位位移的范围是-32768~327671.2 转移指令的⽬的地址之前的jmp,其机器码中并没有转移的⽬的地址,⽽是相对于当前ip的转移偏移jmp far ptr 标号实现的段间转移,⼜称段转移far ptr 指明了指令中标号的段地址和偏移地址改变了CS:IPassume cs:codecode segmentstart: mov ax, 0jmp far ptr sdb 256 dup(0)s: inc axmov ax, 4c00Hint 21Hcode endsend startjmp far ptr可以看出机器码是包含要跳转的地址,没有相对于当前ip的计算转移偏移1.3 jmp 寄存器相当于 jmp near ptr 标号1.4 转移地址在内存中的jmpjmp word ptr 内存单元地址功能:内存单元存储的⼀个字就是转移的⽬的地的偏移地址因为word是16位的只能完成段内转移,进⾏16位位移代码⽰例mov ax, 1234Hmov ds:[0], axjmp word ptr ds:[o] ;这⾥跳转的为CS:1234Hjmp dword ptr 内存单元地址(段间转移)功能:从内存单元地址存放2个字,⾼地址对应段地址,低地址对应偏移地址因为dword是32位的可以完成段间转移CS=内存单元地址+2IP= 内存单元地址代码⽰例mov ax, 1234Hmov ds:[0], axmov ds:[2], 0jmp word ptr ds:[0] ;这⾥跳转的为CS:IP = 0000:1234H1.5 jcxz 指令 jmp cx is zerojcxz 如果cx为0则跳转是⼀个有条件的跳转指令,所有的有条件转移指令都是短转移,对应的机器码包含转移的位移,⽽不是⽬的地址,对IP的修改都是-128~1271.6 loop指令loop为循环指令,所有循环都是短转移,对应的机器码是转移的位移,⽽不是物理地址cx为0 则向下执⾏在内存2000H段中查找第⼀个值为0的字节,找到后将偏移地址放⼊dx中assume cs:codecode segmentstart: mov ax, 2000Hmov ds, axmov bx, 0s: mov cl, [bx]mov ch, 0jcxz okinc bx ;⾃增1 去找下⼀个内存单元的数据loop sok: mov dx, bxmov ax, 4c00Hint 21Hcode endsend start1.7 根据位移进⾏转移的意义前⾯讲到:jmp short 标号jmp near ptr 标号jcxz 标号loop 标号⼏种指令,他们对ip的修改都是根据转移⽬的地址和起始地址之前的位移进⾏的,他们对应的机器码不包含转移⽬的地的地址,⽽是包含到⽬的地的位移距离这样的设计,⽅便了程序段在内存中的浮动装配如果这些指令码中是包含物理地址,则就对程序段在内存中的偏移地址有了严格的限制1.8 编程题学蒙蔽先停停。

汇编条件转移指令

汇编条件转移指令

汇编条件转移指令汇编语言是一种底层的计算机语言,它直接操作计算机硬件,因此在编写高效的程序时,掌握汇编语言是非常重要的。

条件转移指令是汇编语言中的一种重要指令,它可以根据特定的条件来改变程序的执行流程。

本文将介绍汇编条件转移指令的基本概念、语法和使用方法。

一、基本概念条件转移指令是一种根据特定条件来改变程序执行流程的指令。

在程序执行过程中,如果满足特定条件,就会跳转到指定的地址继续执行,否则就会继续执行下一条指令。

条件转移指令通常用于实现程序的分支和循环结构。

二、语法格式条件转移指令的语法格式如下:```Jcc destination```其中,Jcc表示条件转移指令的助记符,cc表示条件码,destination表示跳转的目标地址。

条件码是由前缀字母J和后缀字母S、Z、P、O、C、N等组成的,它们分别表示以下条件:- JS:符号位为1(即负数)- JZ:零标志位为1- JP:奇偶标志位为1- JO:溢出标志位为1- JC:进位标志位为1- JN:负数标志位为1三、使用方法条件转移指令的使用方法如下:1. 判断条件在使用条件转移指令之前,需要先判断特定条件是否满足。

条件通常是通过比较指令来实现的,比如CMP指令可以比较两个操作数的大小关系,并设置相应的标志位。

2. 编写条件转移指令根据需要跳转的条件,选择相应的条件转移指令,并将跳转的目标地址作为操作数填写到指令中。

3. 执行条件转移指令当条件转移指令被执行时,会根据特定条件判断是否跳转到目标地址。

如果条件满足,则跳转到目标地址继续执行,否则继续执行下一条指令。

四、示例代码下面是一个简单的示例代码,演示了如何使用条件转移指令实现一个简单的分支结构:```MOV AX, 5CMP AX, 10JL less_thanMOV BX, 10JMP endless_than:MOV BX, 5end:```该代码首先将AX寄存器的值设置为5,然后使用CMP指令比较AX的值和10的值。

指令系统转移指令

指令系统转移指令
test dl,0ffh ;使CF=0,同时设置PF标志 jpe done ;DL中“1”的个数为偶数 ;正好CF=0,转向done stc ;DL中“1”的个数为奇数,设置CF=1 done: …… ;完成
2. 比较无符号数高低
无 符 号 数 的 大 小 用 高 ( Above ) 、 低 (Below)表示,需要利用CF确定高低、 利用ZF标志确定相等(Equal) 两数的高低分成4种关系,对应4条指令
⑴ JZ/JE和JNZ/JNE 利用零标志ZF,判断结果是否为零(或相等)
⑵ JS和JNS 利用符号标志SF,判断结果是正是负
⑶ JO和JNO 利用溢出标志OF,判断结果是否产生溢出
⑷ JP/JPE和JNP/JPO 利用奇偶标志PF,判断结果中“1”的个数是偶是奇
⑸ JC/JB/JNAE和JNC/JNB/JAE 利用进位标志CF,判断结果是否进位或借位
JB(JNAE):目的操作数(<)源操作数 JNB(JAE):目的操作数(>=)源操作数 JBE(JNA):目的操作数(<=)源操作数 JNBE(JA):目的操作数(>)源操作数
3. 比较有符号数大小
判 断 有 符 号 数 的 大 ( Greater ) 、 小 ( Less ) , 需 要 组 合 OF 、 SF 标 志 、 并 利 用ZF标志确定相等与否 两数的大小分成4种关系,分别对应4条指 令
目标地址的寻址范围:段内寻址
段内转移——近转移(near)
在 当 前 代 码 段 64KB 范 围 内 转 移 代
( ±32KB范围)
码 段
不需要更改CS段地址,只要改变IP偏
移地址
段内转移——短转移(short)
代 码

微机原理与接口技术:转移指令

微机原理与接口技术:转移指令

说明转移范围,以当前 IP 为中心,转移范围-32768~+32767。
说明:在编程时 NEAR 与 SHORT 通常省略,编译时由汇编程序自己计算。如果用了
NEAR 或 SHORT,在编译时有时会提示不正确的属性限制。所以 JMP LABEL 是最常见
的形式。
由于 LABEL 对应一条指令,是这条指令的符号地址,所以以上三种 JMP 形式又称为
表 3-1 条件转移指令
指令名称 进位转移 无进位转移 等于或为零转移 不等于或非零转移 奇偶校验为偶转移 奇偶校验为奇转移 结果为负转移 结果为正转移 溢出转移 不溢出转移 大于则转移 大于或等于则转移 小于则转移 小于或等于则转移 大于则转移 大于或等于则转移 小于则转移 小于或等于则转移 CX内容为0转移
JMP WORD PTR[BX+DI],从[BX+DI]指明的内存区域连续取出两个字节传送给 IP,程序转 移到 CS:IP 处继续执行。操作数可以采用各种寻址方式。
以上两种 JMP 形式又称为段内间接转移,编程时要注意操作数必须是 16 位。
【例题 3-17】

MOV DI, 0
JMP DONE
JMP FAR NEXT JMP 8000:2000H JMP DWORD PTR [DI]
2.条件转移指令
条件转移指令先测试条件,若条件成立则执行转移操作;若不成立则不转移并顺序执行 下一条指令。所有的条件转移指令转移范围-128~+127,属于段内短转移,都不影响状态标 志位。
指令格式: JCC OPRD 功能:若条件成立则转移到 OPRD 处执行,IP IP+位移量。 说明:J 是 JUMP 的缩写,CC 表示转移的条件,OPRD 通常是标号。

汇编语言第九章转移指令的原理

汇编语言第九章转移指令的原理

汇编语⾔第九章转移指令的原理转移指令:可以修改IP,或者同时修改CS和IP的指令称为转移指令。

只修改IP时,称为段内转移,段内转移根据IP的修改范围⼜分为短转移(short)和近转移(near);短转移IP的修改范围为8位补码表⽰的范围:-128~127.近转移IP的修改范围为16位补码表⽰的范围:-32768~32767(向前为负,向后为正)同时修改IP和CS时,称为段间转移,⼜称远转移(far)。

转移指令分类:1. ⽆条件转移指令,jmp,其他转移指令⼤多可以基于jmp写出2. 有条件转移指令,jcxz3. 循环转移指令,loop4. 过程5. 中断操作符offset:offset的功能是获取标号的偏移地址EA,标号指的是s、start、data⼀类的名称。

⽆条件转移指令jmp:jmp给出的两种信息:转移的⽬的地址,由标号给出转移的距离(段间转移,段内短转移short,段内近转移near)1. 短转移、近转移jmp指令jmp short 标号(该指令本⾝占两个字节)翻译成机器码为 EBXX,XX为转移位移量的补码表⽰,向前为负向后为正。

没有表达出绝对的⽬的地址,只给出了相对的位移。

位移量XX = 标号处的地址 - jmp指令后⼀个字节的地址,short指明位移量为8位。

(IP)=(IP)+ XX()8位位移类似的还有 jmp near ptr 标号(也可写成jmp s 省略near ptr)(该指令本⾝占三个字节)翻译成机器码为 E9XXXX 其位移量⽤两个字节表⽰,ptr可以看作是长度声明。

(IP)=(IP) + XXXX 16位位移2.远转移jmp指令jmp far ptr 标号(该指令本⾝占五个字节)翻译成机器码为 EAXXXX YYYY,XXXX为偏移地址,前两个X为低位,后两个X为⾼位;YYYY 为段地址,前两个Y为低位,后两个Y为⾼位。

向前转移:编译器中有⼀个地址计数器AC,编译器读到标号s时记下AC的值as,读到jmp时记下AC的值aj,再⽤aj - ac算出位移量disp-128 < disp < 127 时,近转移、远转移统统转化成短转移,机器码为EB disp(占两个字节)disp超出上述范围,得⽤16位补码表⽰时,短转移将产⽣编译错误,近转移和远转移正常执⾏向后转移:向后转移时,编译器先读到jmp指令,记下aj,但没有as,⼀时⽆法计算位移量disp,这时会对jmp指令进⾏⼀个预处理,预处理不管转移类型,统⼀当作短转移,但预留的空间不同对于短转移,编译器⽣成EB和1个nop指令,相当于预留⼀字节,⽤于存放8位disp对于近转移,编译器⽣成EB和2个nop指令,相当于预留两字节,⽤于存放16位disp对于远转移,编译器⽣成EB和4个nop指令,相当于预留四字节,⽤于存放段地址和偏移地址当编译器往后读到as时,计算disp = as - aj-128 < disp < 127 时,近转移、远转移统统转化成短转移,机器码为EB disp,多余的预留空间闲置disp超出上述范围,得⽤16位补码表⽰时,短转移将产⽣编译错误,近转移和远转移正常执⾏,在预留的位置添上相应代码即可3.转移信息在寄存器或者内存中的jmp指令jmp 16位寄存器(只能是16位寄存器,因为相当于mov ip ,res,寄存器位数要对应)。

程序转移机制_实验报告(3篇)

程序转移机制_实验报告(3篇)

第1篇一、实验目的1. 理解程序转移机制的基本原理和实现方式;2. 掌握条件转移和无条件转移的实现方法;3. 熟悉堆栈寄存器的使用,实现子程序调用和返回;4. 通过实验加深对程序执行流程和CPU工作原理的理解。

二、实验原理程序转移机制是计算机组成原理中一个重要的概念,它涉及到CPU如何根据指令的要求改变程序执行的顺序。

程序转移主要包括条件转移和无条件转移两种类型。

1. 条件转移:根据程序执行过程中某些条件的满足与否,决定是否改变程序执行的顺序。

例如,比较指令后,根据比较结果选择不同的转移地址。

2. 无条件转移:不依赖于任何条件,直接改变程序执行的顺序。

例如,跳转指令(JMP)和调用指令(CALL)。

程序转移的实现主要依赖于PC(程序计数器)寄存器,它用于存储下一条指令的地址。

在执行指令时,CPU会根据指令的要求改变PC的值,从而实现程序转移。

三、实验内容1. 手动实现子程序调用转移(1)实验步骤① 初始化系统,进入手动模式;② 将子程序的入口地址存入PC寄存器;③ 执行调用指令,将调用地址压入堆栈;④ 执行子程序,执行完毕后,从堆栈中弹出返回地址,恢复PC寄存器的值。

(2)实验现象通过实验,观察到CPU能够根据指令的要求改变程序执行的顺序,实现了子程序调用和返回。

2. 手动实现子程序返回转移(1)实验步骤① 初始化系统,进入手动模式;② 将子程序的入口地址存入PC寄存器;③ 执行调用指令,将调用地址压入堆栈;④ 执行子程序,执行完毕后,从堆栈中弹出返回地址,恢复PC寄存器的值;⑤ 执行返回指令,CPU根据返回地址继续执行程序。

(2)实验现象通过实验,观察到CPU能够根据指令的要求从堆栈中弹出返回地址,实现子程序返回转移。

3. 编程实现OUT寄存器交替显示11和55(1)实验步骤① 初始化系统,进入手动模式;② 编写汇编代码,实现OUT寄存器交替显示11和55;③ 编译汇编代码,生成可执行文件;④ 运行可执行文件,观察OUT寄存器输出结果。

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

问题9.1分析
(1)s和s0处的指令所在的内存单元的地址是 多少? cs:offset s 和cs:offset s0。 (2)将s处的指令复制到s0处,就是将 cs:offeet s 处的数据复制到cs:offset s0处; (3)段地址已知在cs中,偏移地址offset s和 offset s0已经送入si和di中; (4)要复制的数据有多长? mov ax,bx指令的长度为两个字节,即1个字。


当(cx)=0时,什么也不做(程序向下执行)。
9.7 jcxz指令

我们从 jcxz的功能中可以看出,指令 “jcxz 标号”的功能相当于: if((cx)==0) jmp short 标号;
(这种用C语言和汇编语言进行的综合描 述,或许能使你对有条件指令理解得更 加清楚。)
9.8 loop指令
9.3 依据位移进行转移的jmp指令

实际上,指令“jmp short 标号”的功能 为(IP)=(IP)+8位位移。
(1)8位位移=“标号”处的地址-jmp指令 后的第一个字节的地址; (2)short指明此处的位移为8位位移; (3)8位位移的范围为-128~127,用补码表 示 (如果你对补码还不了解,请阅读附注2) (4)8位位移由编译程序在编译时算出。
内存单元地址可用寻址方式的任一格式给出。
9.6 转移地址在内存中的jmp指令
示例:
mov ax,0123H mov ds:[0],ax jmp word ptr ds:[0] 执行后,(IP)=0123H mov ax,0123H mov [bx],ax jmp word ptr [Байду номын сангаасx] 执行后,(IP)=0123H
(1)16位位移=“标号”处的地址-jmp指令 后的第一个字节的地址; (2)near ptr指明此处的位移为16位位移, 进行的是段内近转移; (3)16位位移的范围为 -32769~32767,用补码表示; (4)16位位移由编译程序在编译时算出。

9.4 转移的目的地址在指令中的jmp指令
9.3 依据位移进行转移的jmp指令
比如:程序9.1 assume cs:codesg codesg segment start:mov ax,0 jmp short s add ax,1 s:inc ax codesg ends end start

左面的程序执行后, ax 中的值为 1 ,因为执行 jmp short s 后 ,越过了 add ax,1 ,IP 指向了标 号 s处的 inc ax。也就是 说,程序只进行了一次 ax加1操作。
9.4 转移的目的地址在指令中的jmp指令

“0B 01 BD 0B” 是目的地址在指令中的存储 顺序,高地址的“BD 0B”是转移的段地址: 0BBDH,低地址的“0B 01” 是偏移地址: 010BH。 对于“jmp X 标号”格式的指令的深入分析 请参看附注3。

9.5 转移地址在寄存器中的jmp指令
9.6 转移地址在内存中的jmp指令
(2) jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处开始存放着两个字, 高地址处的字是转移的目的段地址,低地址处 是转移的目的偏移地址。 (CS)=(内存单元地址+2) (IP)=(内存单元地址) 内存单元地址可用寻址方式的任一格式给出。
执行后, (CS)=0 (IP)=0123H CS:IP 指向 0000:0123。
执行后, (CS)=0 (IP)=0123H CS:IP 指向 0000:0123。
9.7 jcxz指令

jcxz指令为有条件转移指令,所有的有条件转 移指令都是短转移,在对应的机器码中包含转 移的位移,而不是目的地址。对IP的修改范围 都为-128~127。
9.6 转移地址在内存中的jmp指令
示例:
mov mov mov jmp ax,0123H ds:[0],ax word ptr ds:[2],0 dword ptr ds:[0] mov mov mov jmp ax,0123H [bx],ax word ptr [bx+2],0 dword ptr [bx]

前面讲的jmp指令,其对应的机器码中并 没有转移的目的地址,而是相对于当前 IP的转移位移。
指令 “jmp far ptr 标号” 实现的是段间转移,又称为远转移。

9.4 转移的目的地址在指令中的jmp指令

指令 “jmp far ptr 标号” 功能如下:
(CS)=标号所在段的段地址; (IP)=标号所在段中的偏移地址。 far ptr指明了指令用标号的段地址和偏移地 址修改CS和IP。

指令格式:jmp 16位寄存器
功能:IP =(16位寄存器) 这种指令我们在前面的课程(参见2.11节) 中已经讲过,这里就不再详述。

9.6 转移地址在内存中的jmp指令

转移地址在内存中的jmp指令有两种格式:
(1) jmp word ptr 内存单元地址(段内转移) 功能:从内存单元地址处开始存放着一个字, 是转移的目的偏移地址。
9.2 jmp指令

jmp为无条件转移,可以只修改IP,也可 以同时修改CS和IP; jmp指令要给出两种信息:
转移的目的地址 转移的距离(段间转移、段内短转移,段内 近转移)


9.3 依据位移进行转移的jmp指令

jmp short 标号(转到标号处执行指令)
这种格式的 jmp 指令实现的是段内短转移,它 对IP的修改范围为 -128~127,也就是说,它向 前转移时可以最多越过128个字节,向后转移 可以最多越过127个字节。

我们在Debug中将程序9.3翻译成为机器码, 看到的结果如图:
9.4 转移的目的地址在指令中的jmp指令

如图中所示: 源程序中的db 256 dup (0),被Debug解释为相 应的若干条汇编指令 。这不是关键,关键是, 我们要注意一下jmp far ptr s所对应的机器码: EA 0B 01 BD 0B ,其中包含转移的目的地址。

loop指令为循环指令,所有的循环指令 都是短转移,在对应的机器码中包含转 移的位移,而不是目的地址。
对IP的修改范围都为-128~127。


指令格式:loop 标号 ((cx))=(cx)-1,如果(cx)≠0,转移到标号 处执行。
9.8 loop指令

loop 标号 指令操作:
(1)(cx)=(cx)-1; (2)如果(cx)≠0,(IP)=(IP)+8位位移。

9.3 依据位移进行转移的jmp指令

还有一种和指令“jmp short 标号”功能 相近的指令格式: jmp near ptr 标号 它实现的时段内近转移。 指令“jmp near ptr 标号”的功能为: (IP)=(IP)+16位位移。

jmp near ptr 标号

指令“jmp near ptr 标号”的说明:
引言

8086CPU的转移指令分为以下几类: 无条件转移指令 (如:jmp) 条件转移指令 循环指令(如:loop) 过程 中断
9.1 操作符offset

操作符offset在汇编语言中是由编译器处理的 符号,它的功能是取得标号的偏移地址。 比如下面的程序:
assume cs:codesg codeseg segment


我们看下面的程序
程序9.3
assume cs:codesg codesg segment start:mov ax,0 mov bx,0 jmp far ptr s db 256 dup (0) s: add ax,1 inc ax codesg ends end start
9.4 转移的目的地址在指令中的jmp指令

问题9.1完整程序
assume cs:codesg codesg segment s: mov ax,bx ;(mov ax,bx 的机器码占两个字节) mov si,offset s mov di,offset s0 mov ax,cs:[si] mov cs:[di],ax s0: nop ;(nop的机器码占一个字节) nop codesg ends ends
第九章 转移指令的原理
目录



9.1 操作符offset 9.2 jmp指令 9.3 依据位移进行转移的jmp指令 9.4 转移的目的地址在指令中的jmp指令 9.5 转移地址在寄存器中的jmp指令 9.6 转移地址在内存中的jmp指令 9.7 jcxz指令 9.8 loop指令 9.9 根据位移进行转移的意义 9.10 编译器对转移位移超界的检测

那么,CPU根据什么进行转移呢?

没有了目的地址,CPU如何知道转移到 哪里呢?
我们做下小小的修改~

9.3 依据位移进行转移的jmp指令

这说明在机器指令中并不包含转移的目的地址。 如果机器指令中不包含目的地址的话,那么, 也就是说 CPU不需要这个目的地址就可以实 现对IP的修改。


小B可能会问:“老师,那么具体是如何修改 的呢?”
9.3 依据位移进行转移的jmp指令

jmp short s指令的读取和执行过程:




(1)(CS)=0BBDH,(IP)=0006,CS:IP指向EB 03(jmp short s的机器码); (2)读取指令码EB 03进入指令缓冲器; (3)(IP)=(IP)+所读取指令的长度=(IP)+2=0008,CS:IP 指向add ax,1; (4)CPU指行指令缓冲器中的指令EB 03; (5)指令EB 03执行后,(IP)=000BH,CS:IP指向inc ax。
相关文档
最新文档