实验四---条件转移指令

合集下载

条件转移指令实验报告

条件转移指令实验报告

一、实验目的1. 理解条件转移指令的基本概念和作用。

2. 掌握条件转移指令在程序设计中的应用。

3. 通过实验加深对条件转移指令的理解和运用。

二、实验环境1. 硬件环境:计算机一台,编程软件(如Keil uVision、IAR EWARM等)。

2. 软件环境:适合单片机编程的编译器(如8051单片机编译器)。

三、实验内容本次实验主要涉及以下条件转移指令:1. 判A内容是否为0转移指令(JZ)。

2. 判A内容是否不等于0转移指令(JNZ)。

3. 比较转移指令(CJNE)。

四、实验步骤1. 准备工作- 在编程软件中创建一个新的项目,并设置好单片机的型号和编译器。

- 编写程序框架,准备实验代码。

2. 编写程序- 使用JZ指令实现一个简单的判断逻辑,例如:当R0寄存器的值等于0时,转移到标号L1,否则执行后续指令。

- 使用JNZ指令实现相反的逻辑,即当R0寄存器的值不等于0时,转移到标号L1,否则执行后续指令。

- 使用CJNE指令实现两个数的比较,并转移到相应的标号。

例如,将R0寄存器的值与立即数data进行比较,如果相等则执行后续指令,如果不相等则转移到标号L1。

3. 编译程序- 使用编译器对编写的程序进行编译,生成可执行文件。

4. 仿真运行- 在编程软件中加载可执行文件,进行仿真运行。

- 观察程序运行结果,验证条件转移指令是否按照预期工作。

5. 结果分析- 分析实验结果,确保条件转移指令按照预期执行。

- 对比JZ、JNZ和CJNE指令的执行效果,加深对它们之间差异的理解。

五、实验结果与分析1. JZ指令实验结果- 当R0寄存器的值为0时,程序转移到标号L1,执行相应指令。

- 当R0寄存器的值不为0时,程序顺序执行后续指令。

2. JNZ指令实验结果- 当R0寄存器的值不为0时,程序转移到标号L1,执行相应指令。

- 当R0寄存器的值为0时,程序顺序执行后续指令。

3. CJNE指令实验结果- 当R0寄存器的值与立即数data相等时,程序顺序执行后续指令。

带符号数条件转移指令

带符号数条件转移指令

5.寄存器相对寻址
——操作数的有效地址是一个基址或变址寄存器的内容和指令中 指定的8位或16位位移量之和。
指令 寄存器号 位移量 寄存器 基或变地址 EA 段寄存器 段基址 物理地址 存储器 操作数
例如:MOV
AX,30H[BP]
若 (BP)=1000H,(SS)=2000H,(21030H)=3050H 则物理地址=20000H+1000H+30H=21030H, (21030H) (AX)=3050H (AX)
2.段内间接寻址
—— 转向的有效地址是一个寄存器或一个存储单元的内容, 这内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取 得,然后用得到的转向有效地址来取代IP寄存器的内容。
指令 数据寻址方式 寄存器或内存单元 转向有效地址 IP寄存器
说明: (1)这种寻址方式和以下二种段间寻址方式都不能用于条件 转移指令,而无条件转移指令JMP和调用指令CALL则可用4种寻 址方式中的任意一种。 (2)汇编格式:JMP BX JMP WORD PTR [BX] 其中:WORD PTR用以指出[BX]寻址所取得转向地址是一个字的 有效地址。 (3)以上两种寻址方式都是段内转移,所以直接把求得的有 效地址送到IP寄存器就可以了。计算物理地址公式为: 物理地址:PA=16×(CS)+ EA
6.基址变址寻址
——操作数的有效地址是一个基址寄存器和一个变址寄存器的 内容之和,基址寄存器名和变址寄存器名均由指令指定。
指令 基址寄存器 变址寄存器 变化寄存器 段寄存器 段基址 变基址 EA 基址寄存器 基地址 物理地址
存储器 操作数
例如:MOV
AX, [BP][SI]
若 (BP)= 1000H,(SI)= 3000H (SS)= 2000H,(24000H)= 3050H 则物理地址= 20000H+1000H+3000H=24000H, (24000H) (AX) (AX) = 3050H

2、条件转移指令

2、条件转移指令

进位标志为累加位(暂存位)
内部RAM位寻址区128单元 为存储位 1. 位传送指令(2条) MOV C, bit ;bit 可直接寻址位 C←(bit) MOV bit,C ;C 进位位 (bit) ← C 例:将位地址20H的一位数传送到位地址30H中: MOV C,20H MOV 30H,C
布尔变量操作类指令
空操作指令
N量操作类指令(17条)
位传送:
(MOV——2条)
位清零/置位:
(CLR,SETB——4条)
位逻辑与/或/非运算:(ANL,ORL,CPL——6 条) 位条件转移: (JC,JNC,JB,JNB,JBC——5条)
软件:布尔变量操作类指令
注意:操作对象 硬件:布尔处理机
子程序调用与返回指令(4条)
两条调用指令 (1)绝对调用指令 ACALL addr11 (2)长调用指令 LCALL addr16 两条返回指令 RET RETI
断点保护:
PC=(PC)+2; PC=(PC)+3; 修改SP,分别放入PC低、高 8位 构造目标地址:
PC10~0=addr11; PC=addr16
条件转移指令
JZ,JNZ,CJNE,DJNZ——8条 1、累加器判零转移指令(2字节指令) JZ rel JNZ rel 2、数值比较指令 CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel
条件转移指令
3、减1条件转移指令 (1)寄存器减1条件转移 DJNZ Rn,rel (2)直接寻址单元减1条件转移指令 DJNZ direct,rel 区别:自减1,不等于0转移, 目标地址:+2+rel +3+rel

条件跳转指令实验报告(3篇)

条件跳转指令实验报告(3篇)

第1篇一、实验目的本次实验旨在通过编程实践,了解和掌握条件跳转指令的基本原理和应用,熟悉汇编语言中常用的条件跳转指令,并能够根据程序需求合理运用这些指令实现程序的逻辑控制。

二、实验环境1. 操作系统:Windows 102. 汇编语言编译器:MASM3. 开发环境:Visual Studio 2019三、实验内容本次实验主要涉及以下内容:1. 条件跳转指令的分类及功能介绍2. 条件跳转指令的应用示例3. 编写一个简单的条件跳转程序,实现特定功能四、实验步骤1. 了解条件跳转指令条件跳转指令是汇编语言中的一种控制指令,根据指定的条件执行跳转操作。

常见的条件跳转指令包括:- 跳转如果等于(JE):当比较结果为零时跳转到指定位置。

- 跳转如果不等于(JNE):当比较结果不为零时跳转到指定位置。

- 跳转如果小于(JL):当比较结果小于时跳转到指定位置。

- 跳转如果不小于(JGE):当比较结果不小于时跳转到指定位置。

- 跳转如果小于等于(JLE):当比较结果小于等于时跳转到指定位置。

- 跳转如果不大于(JG):当比较结果不大于时跳转到指定位置。

2. 编写条件跳转程序以下是一个简单的条件跳转程序示例,该程序用于判断两个整数的大小,并输出相应的信息。

```assembly.datanum1 DWORD 10num2 DWORD 20result BYTE ?.codemain PROC; 初始化寄存器MOV EAX, num1MOV EBX, num2; 比较两个整数CMP EAX, EBX; 如果 num1 等于 num2,则输出 "Equal"JE Equal; 如果 num1 不等于 num2,则判断 num1 是否小于 num2JNE NotEqual; 如果 num1 小于 num2,则输出 "Less than"JL LessThan; 如果 num1 不小于 num2,则输出 "Greater than"JG GreaterThanEqual:MOV result, 'E' ; 等于JMP EndNotEqual:MOV result, 'N' ; 不等于JMP EndLessThan:MOV result, 'L' ; 小于JMP EndGreaterThan:MOV result, 'G' ; 大于End:; 输出结果MOV AL, resultCALL WriteCharCALL Crlf; 结束程序MOV EAX, 0retmain ENDPEND main```3. 编译与运行程序使用MASM和Visual Studio 2019编译上述程序,生成可执行文件。

实验4分支结构(精)

实验4分支结构(精)

实验四分支结构程序设计实验一、实验目的1.掌握分支结构程序设计的基本设计方法;2.掌握条件转移指令和无条件转移指令的使用方法; 3.掌握指令对标志寄存器中各标志位的影响情况;4.掌握多分支结构程序设计的三种方法:树型结构法、地址常数表法和指令常数表法。

二、实验要求1.学会使用DEBUG 的T 命令,跟踪检查指令对标志位的影响情况; 2.学会使用DEBUG 中的P 命令,对INT 指令的跟踪方法; 3.学会利用设置断点调试程序的方法;4.了解大写、小写字母及数字在计算机内的表示方法及转换方法。

三、实验内容1.编写程序,已知在DATA 开始的内存单元中,连续存放着三个一位十六进制数,找出其中最大数及最小数,存放在指定的内存单元中。

2.编写程序,从键盘输入若干个任意字符,如果是小写字母a ~z 之间的字符,请将它们转换成相应的大写字母,若为其它字符,则保持不变,将转换后的新字符保存在指定的存储单元中。

四、解题思路1.先对DATA 内存单元连续存放三个一位十六进制数。

先对DATA 内存单元里的前两个数据比较,较大的数据再和第三个数据比较,从而得到最大数据存到MAX 内存单元里。

把两次比较得到的两个较小的数据进行比较,从而得到最小数据存到MIN 内存单元里。

两个无符号数据比较后,用JA/JNBE、JAE/JNB/JNC/、JB/JNAE/JC和JBE/JNA来判别两数的大小关系,这些条件转移指令是把进位标志CF 和零标志位ZF 结合起来判别的。

2.先开辟20个字节的内存单元DATA 用来存储输进来字符串和修改后的字符串。

对字符串的输入是以‘#’为结束字符的,当字符的个数少于20时,只要输入的字符串是以‘#’结尾,就代表字符串输入结束(其中结束字符‘#’也是字符串中的一个字符存储到内存单元里)。

每次输入一个字符,就对其进行判别。

若输入的字符在字符‘a ’到‘z ’之间,那么就对其进行转换成对应的大写字母(方法把小写字母的值减去32即可),然后再存到指定的内存单元中;否则,直接把输入的字符存到指定的内存单元中去。

汇编语言条件转移指令

汇编语言条件转移指令

汇编语言条件转移指令汇编语言中的条件转移指令是用于根据特定条件来改变程序的执行流程的指令。

这些指令根据条件的真假来决定是否进行转移,并根据转移的属性(如距离和方向)来选择要执行的下一条指令。

条件转移指令根据不同的条件进行分组,常见的条件转移指令有以下几种:1.无条件转移指令:无条件转移指令是指无论条件如何都会进行转移的指令。

其中,常见的无条件转移指令有“跳转指令”(JMP)和“保存返回地址指令”(CALL)。

-跳转指令(JMP):用于无条件地跳转到程序指定的地址。

-保存返回地址指令(CALL):用于调用子程序,并将返回地址保存在堆栈中,方便进行返回。

2.条件转移指令:条件转移指令是根据一个或多个特定条件的真假来进行跳转的指令。

常见的条件转移指令有以下几种:-等于指令(JE):如果两个操作数相等,则转移。

-不等于指令(JNE):如果两个操作数不相等,则转移。

-大于指令(JG):如果第一个操作数大于第二个操作数,则转移。

-大于等于指令(JGE):如果第一个操作数大于等于第二个操作数,则转移。

-小于指令(JL):如果第一个操作数小于第二个操作数,则转移。

-小于等于指令(JLE):如果第一个操作数小于等于第二个操作数,则转移。

除了上述指令之外,还有其他一些条件转移指令,用于根据不同的条件进行转移。

指令的转移属性根据跳转的相对距离和方向来表示,可以分为短转移和远转移。

-短转移:距离较近,可以直接使用短转移指令实现。

例如,JMP指令可以实现短转移。

-远转移:距离较远,需要使用远转移指令实现。

例如,调用远转移指令(CALL),可以实现近距离和远距离的跳转。

总结起来,汇编语言中的条件转移指令用于根据特定条件来决定是否进行转移,并根据转移的属性来选择要执行的下一条指令。

这些指令可以帮助程序根据条件的不同来实现不同的功能和逻辑。

条件转移指令

条件转移指令

区别: (1)无条件转移是无条件的,不作任何判断就转向 目的单元. (2)有条件转移只能在-128~+127个字节范围 内转移,而无条件转移则无此限制.
例1:完成如下判断 1 X≥0 Y= 0 X<0 … MOV AL,X CMP AL,0 JGE BIG MOV AL,0 JMP FIN BIG:MOV AL,1 FIN:MOV Y,AL …
向前跳转 JMP ... NEXT: ... 向后跳转 NEXT: ... ... JMP NEXT ;IP减 NEXT ;IP加
例:求下面两条转移指令的转移地址A10和A20分 别是多少? (1) CS:0110 EB F7 JMP A10 CS: (2) CS: CS:0110 EB 09 JMP A20 下一条指令的IP=0110+2=0112 (1) A10的地址= 0112 + -9 0109H (F7) + (2) A10的地址= 0112 9 011BH
四、程序转换指令
1.无条件转移指令 地址开始的指令。 段内转移指令:只改变指针IP的内容. 段间转移指令:改变CS和IP的内容. JMP 无条件地转移到指令指定的地址去执行从该
(1)段内直接近转移指令 格式:JMP NEAR PTR OPR 或 JMP OPR (2)段内直接短转移指令 格式:JMP SHORT OPR ;OPR为标号名 执行的操作:(IP)←下一条指令(IP)+8位位移量 ;OPR为标号名 执行的操作:(IP)←下一条指令(IP)+16位位移量
(3)有符号数条件转移指令 指令 描述 标志测试 SF=OF且ZF=0 SF=OF或ZF=1
JG/JNLE 大于(或不小于且不等于)转移 (用于比较两个有符号数a,b,a>b时转移) JGE/JNL 大于等于(或不小于)转移

汇编条件转移指令

汇编条件转移指令

汇编条件转移指令1. 指令简介在汇编语言中,条件转移指令用于根据某个条件是否满足来决定是否跳转到某个指定的目标地址。

条件转移指令根据条件码寄存器中的标志位来进行判断,根据不同的条件码进行跳转或不跳转。

条件转移指令可以根据标志位的值来实现各种条件的判断,例如比较两个数的大小、判断某位是否为1等。

2. 有符号数的比较和跳转条件转移指令可以用于有符号数的比较和跳转。

在进行有符号数的比较时,需要使用特定的条件码,例如OF、SF、ZF等。

下面是一些常用的有符号数比较和跳转的条件码及其含义:•JO:溢出时跳转•JNO:不溢出时跳转•JS:结果为负时跳转•JNS:结果为非负时跳转•JE/JZ:结果为零时跳转•JNE/JNZ:结果不为零时跳转•JL/JNGE:结果为小于时跳转•JLE/JNG:结果为小于等于时跳转•JG/JNLE:结果为大于时跳转•JGE/JNL:结果为大于等于时跳转例如,我们可以通过如下汇编代码实现有符号数的比较和跳转:MOV AX, 10CMP AX, 20JL Less ; 如果AX小于20,则跳转到Less标签处在上面的例子中,如果AX的值小于20,则跳转到Less标签处继续执行代码。

3. 无符号数的比较和跳转与有符号数类似,条件转移指令也可以用于无符号数的比较和跳转。

在进行无符号数的比较时,需要使用特定的条件码,例如CF、ZF等。

下面是一些常用的无符号数比较和跳转的条件码及其含义:•JC:进位时跳转•JNC:不进位时跳转•JAE/JNB:大于等于时跳转•JB/JNAE:小于时跳转•JBE/JNA:小于等于时跳转•JA/JNBE:大于时跳转例如,在对无符号数进行比较时,可以使用如下汇编代码:MOV AX, 10CMP AX, 20JAE GreaterEqual ; 如果AX大于等于20,则跳转到GreaterEqual标签处在上面的例子中,如果AX的值大于等于20,则跳转到GreaterEqual标签处继续执行代码。

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

实验四条件转移指令
实验目的:
通过实验掌握下列知识:
1、8086指令:JZ,JNZ,JC,JNC,CMP,SHR。

2、程序:用字符搜索法确定字符串长度。

3、程序:16进制数化为ASCII码的一般方法。

实验容及步骤:
一、用字符搜索法确定字符串长度:
1、用A命令在100H开始的存处键入下列程序:
JMP START ;无条件调至Start
偏移地址为102 DB 'This is the program to measure' ;定义一个字符串长度为30 DB 'the length of a string!$' ;定义字符串,长度为23 不算字符串结束符$
START: MOV BX,102 ;容为102赋给bx
MOV AL,24 ;24赋给al
XOR CL,CL ;cl清零
LOP: CMP AL,[BX] ;地址[0102]的容和24表示的字符$比较大小
JZ EXIT ;遇到$,调至exit,程序结束
INC BX ;bx自增1
INC CL ;cl自增1
JMP LOP ;无条件转移至lop
EXIT: INT 3
2、用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?
二、16进制数化ASCII码的一般方法(显示存容)
1、用A命令在100H处键入下列程序:
MOV SI,0 ;将容为0的十六进制数赋给si
MOV BL,10 ;将容为10的十六进制数赋给bl
LOP: MOV DL,[SI] ;将地址为[0]单元的容赋给dl
MOV CL,4 ;将4赋给cl
SHR DL,CL ;dl的容逻辑右移4次,最低位进入cf
CMP DL,0A ;dl的容和0a比较大小
JC J1 ;判断有无进位,有了转向j1
ADD DL,7 ;无进位,将7和dl的容相加
J1: ADD DL,30 ;将30和dl的容相加
MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容
MOV DL,[SI] ;将[0]的容赋给dl
AND DL,0F ;dl的容和0f相加
CMP DL,0A ;dl的容和0a比较大小
JC J2 ;判断有无进位,有了转向j2
ADD DL,7 ;无进位,将dl的容和7相加放入dl中
J2: ADD DL,30 ;有进位,将dl的容和30相加放入dl中
MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容
MOV DL,20 ;将20赋给dl 输入一个空格字符
MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容
INC SI ;si自增1
DEC BL ;dl自减1
JNZ LOP ;判断结果,若为0调至lop
INT 20 ;中断程序
将十六进制数AB A先显示再让B显示再有空格的显示所以执行后执行前结果一样了
0-9 A-F十六进制数转换为ASCII码31-39 41-46
2、用N,W命令将此程序用文件名存入磁盘。

3、用Q命令退出DEBUG。

4、在DOS命令状态下直接运行命令文件,应在屏幕上显示出存从0000H开始的16个字节的容,若有错误,用DEBUG检查之。

5、自编程序:修改上面程序,使除以16进制数形式显示存容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用'.'代替。

没有加 MOV DL,20 ;将20赋给dl 输入一个空格字符MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容这段代码的显示
三、综合程序(选做):测量一字符串长度,并用16进制数显示之
程序:
JMP START ;无条件跳转至Start
DB 'This is a program to measure the length of a string。

' ;定义一字符串
DB 0D,0A ;0D代表回车 0A代表换行
DB 'the length of the string is: $' ;定义一字符串以 $ 结束START: MOV AH,9 ;显示字符串
MOV DX, 102 ;102赋给dx
INT 21 ;dos功能调用:显示dl寄存器的容
MOV BX, 101 ;101赋给bx
MOV AL,'$' ;将$ 赋给al
MOV DH,FF ;ff赋给dh
LOP: INC BX ;bx自增1
INC DH ;dh自增1
CMP AL,[BX] ;第一个字符串和$比较大小
JNZ LOP ;如果不相等,调至lop
以上语句是测字符串的长度
以下语句是以十六进制数显示
MOV CH,2 ;2赋给ch
MOV CL,4 ;4赋给cl
LOP1: ROL DH,CL ; dh循环左移4为
MOV DL,DH ;dh的容赋给dl
AND DL,0F ;dl的容和0f相与
ADD DL,30 ;dl的容加30 下面语句是把十六进制数转化为ASCII码
CMP DL,3A ;dl的容和3a比较大小
JC J ;dl小于3a的话调至j
ADD DL,7 ;dl的容加7
J: MOV AH,2 ;显示一个字符
INT 21 ;dos功能调用
DEC CH ;ch自减1
JNZ LOP1 ;ch若不为0调至lop1
INT 20 ;程序中止
键入此程序,存入???.COM文件中并在DOS命令状态下直接运行之,若未出现预期结果,用DEBUG检查有否错误?
实验报告要求:
1、自编程序草稿及调试后的正确程序。

2、实验体会。

相关文档
最新文档