汇编指令无条件转移指令JMP

汇编指令无条件转移指令JMP

[汇编指令]无条件转移指令JMP

2009-08-16 18:43

无条件转移指令JMP

指令格式:JMP OPRD

其中OPRD为转移的目的地址。程序转移到目的地址所指向的指令继续往下执行。

指令功能:JMP指令将无条件地控制程序转移到目的地址去执行。当目的地址仍在同一个代码段内,称为段内转移;当目标地址不在同一个代码段内,则称为段间转移。这两种情况都将产生不同的指令代码,以便能正确地生成目的地址,在段内转移时,指令只要能提供目的地址的段内偏移量即够了;而在段间转移时,指令应能提供目的地址的段地址及段内偏移地址值。

本组指令对标志位无影响。

<1>段内直接转移指令:JMP NEAR 标号

即:JMP NEAR 标号; (IP)<--disp16+(IP)

JMP SHORT 标号; (IP)<--disp8+(IP)

<2>段内间接转移指令:JMP OPRD

例如:JMP BP; 转向(SS):(BP)

JMP JNEAR[BX]; 转向(CS):(BX)+JNEAR

JMP WORD PTR[BX][DI]; 转向(CS):(BX)+(DI)

<3>段间直接转移指令:JMP FAR 标号

由于标号之前用FAR说明为远的属性,因而只能是一条段间转移指令。执行该指令时,将把标号所在的段的值送CS,将标号在所属段内的偏移量送IP,从而形成新的转移地址CS:IP

<4>段间间接转移指令:JMP OPRD其中的OPRD为存储器双字操作数。段间间接转移只能通过存储器操作数来实现。

例如:指令JMP DWORD PTR[BX],其操作数是一个双字类型的存储器操作数,它指向数据段DS,段内偏移为(BX)。从这个DS:BX开始的前两个字节中,存放了目标地址的段内偏移值,后两个字节中,存放了目标地址所在的新的段的段基址,分别将它们送至IP及CS,便形成了新的转移地址

汇编实验五条件转移指令

汇编实验五条件转移指令

————————————————————————————————作者:————————————————————————————————日期: 1

实 验 报 告 ── 学年 第 学期 实 验 课 程 汇编语言 学 生 姓 名 123 实 验 项 目 条件转移指令 学 院 计算机科学技术 实 验 性 质 专业选修课 班 级 学 号 实 验 地 点 同 组 人 数 1 第 组 实 验 日 期 第周 星期 第 节 成 绩 5 环 境 参 数 Dosbox-0.74 Masm 5.0 一、实验目的及要求 二、实验原理、实验内容 三、实验仪器设备及材料 四、操作方法与实验步骤 五、实验数据记录及处理 六、实验结果分析及讨论 一、实验目的: 1.8088指令:JZ,JNZ,JC,JNC,CMP,SHR 。 2.程序:用字符搜索法确定字符串长度。 3.程序:16进制数化为ASCII 码的一般方法。 二:实验任务 1.自编程序:修改实验准备程序(二),使除了以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII 字符,07-0D 的控制字符用'.'代替。 源代码:

DATA SEGMENT DATA ENDS STACKS SEGMENT STACK STACKS ENDS CODE SEGMENT 'code' ASSUME CS:CODE,DS:DATA,SS:STACKS START: MOV AX,DATA MOV DS,AX MOV SI,0H MOV BL,10H LOP:MOV DL,[SI] ;先处理高四位 MOV CL,4H SHR DL,CL ;右移四位 CMP DL,0AH ;判断是‘0’-‘9’还是‘a'-’f‘ JC J1 ;是0-9 跳转 ADD DL,7H ;是a-f 要多加7 因为‘9’为 390h ‘A' 为41h 相差7h J1: ADD DL,30H ;以'0'为基址 MOV AH,2H ;输出高四位的ASCII码 INT 21H MOV DL,[SI] ;处理第四位 AND DL,0FH CMP DL,0AH ;同上

MCS-51指令详解

MCS-51指令详解 说明:为了使MCS-51单片机初学者快速入门,迅速掌握单片机指令含意、操作码、操作数及;对应地址,汇编语言怎样编写等,现按指令操作码按顺序编写,可对照本公司编写的<>一书第145页指令手册查看,更详细资料请阅第四章 MCS-51指令系统" 及第124页指令系统摘要。并在仿真器上装入;JJM.HEX文件,并对有关单元置数,用单步(F8)验证其正确性及其运行结果。 ORG 0000H NOP ;空操作指令 AJMP L0003 ;绝对转移指令 L0003: LJMP L0006 ;长调用指令

L0006: RR A ;累加器A内容右移(先置A为88H) INC A ; 累加器A 内容加1 INC 01H ;直接地址(字节01H)内容加1 INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1 ;(设R0=02H,02H=03H,单步执行后02H=04H) INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1 ;(设R1=02H,02H=03H,单步执行后02H=04H) INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少)

INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用 S0019: LCALL S001C ;长调用

关于第十讲控制转移类指令

第九讲控制转移类指令 教学方法: 讲授法 教学目的: 1、了解控制转移类指令的种类 2、掌握无条件转移指令的特点及应用 3、掌握调用指令的特点及应用 教学重点、难点: 各类指令操作功能循环、移位指令 条件转移指令的特点及应用 主要教学内容(提纲): 一、控制转移类指令的种类 二、无条件转移指令的特点及应用 三、调用指令的特点及应用 复习:逻辑操作指令,单字节:CLR,CPL,RL,RLC,RR,RRC 双字节:ANL,ORL,XRL。 讲授要点 §3-5 控制转移类指令 作用:改变程序计数器PC的值,从而改变程序执行方向。 分为四大类:无条件转移指令;条件转移指令;调用指令;返回指令。 一、无条件转移指令 LJMP addr16 AJMP addr11 SJMP rel JMP @A + DPTR LJMP addr16 ;长跳转 转移目的地址addr16 (PC);0000H ~ FFFFH,64KB AJMP addr11 ;绝对转移 转移目的地址的形成:先(PC)(PC)+ 2; 后PC15 ~ 11不变,PC10 ~ 0 addr10 ~ 0 64KB = 216 =25×211 = 32×2KB 转移目的地址与(PC)+ 2在同一个2KB范围内。

SJMP rel ;短转移,相对寻址。 转移目的地址= (PC)+ 2 + rel, 所以rel = 转移目的地址-(PC)-2 但,实际使用中常写成SJMP addr16,汇编时会自动转换出rel。 JMP @A + DPTR ;间接转移,散转移指令。 转移目的地址= (@A)+ (DPTR) 本指令不影响标志位,不改变@ A 及DPTR中的内容。常用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。 例1、设A中为键值,试编写按键值处理相应事件的程序段。 解:MOV DPTR,#KYEG MOV B,#03H MUL AB JMP @A + DPTR · KYEG:LJMP KYEG0 LJMP KYEG1 · 画图比较LJMP、AJMP、SJMP、JMP转移的起点和范围。 二、调用指令 LCALL addr16 ;长调用 ACALL addr11 ;绝对调用 LCALL addr16 ;转移范围64KB,不影响标志位。执行中自动完成如下过程:(PC)(PC)+ 3 (SP)(SP)+ 1 ((SP))(PC7 ~ 0),保护断点地址低字节; (SP)(SP)+ 2 ((SP))(PC15 ~ 8),保存断点地址高字节; (PC)addr16 ,目的地址送PC,转子程序。 例2、设(SP)= 07H,(PC)= 2100H,子程序首地址为3456H,执行: LCALL 3456H MOV A,20H ······ 画出执行过程示意图。 执行结果:(SP)= 09H,(09H)= 21H,(08H)= 03H,(PC)= 3456H

微机原理 debug指令详解

微机原理debug指令详解 一、DEBUG概述 DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。此外,DEBUG 还可以用于读写端口中的数值。 在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入内存中。DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码,使用两位数表示十六进制数据(0~9,A~F)。在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地址,地址的输入格式是: [段地址]: [位移]。如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。前100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。在DEBUG中,使用四位十六进制数表示地址(0~9,A~F)。 DEBUG输入数据时有两种方法: 提示方法和非提示方法。在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。执行后可以看到该地址中已有的内容及一个冒号提示符。此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。在非提示方法下,输入保持数据的内存地址以及要输入的数据。DEBUG的启动:进入DOS 状态下,键入DEBUG ?,按ENTER键,如: C:\>DEBUG ?,则屏幕显示:- 符号“-”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。 DEBUG的退出: 在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。 DEBUG的使用: 在DEBUG的提示符后输入DEBUG命令,按ENTER键。 二、DEBUG 命令详解 ★A命令 格式:A[地址] 功能:将指令直接汇编成机器码输入到内存中。 参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。 ★C命令 格式:C[源地址范围][目的地址] 功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容,若相同则不

汇编跳转指令

汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL、JNL、JNG、JG、JCXZ、JECXZ、JMP、JMPE 名称功能操作数操 作 码 模 数 寄存 器1 寄 存 器2 或 内 存 位 移 量 立 即 数 符 号 方 向 芯 片 型 号 16 位 32 位 JO 溢出跳转短$70 无无无无10 无无80 86 无无 JNO 不溢出跳 转 短$71 无无无无10 无无 80 86 无无 JB 低于跳转短$72 无无无无10 无无80 86 无无 JNB 不低于跳 转 短$73 无无无无10 无无 80 86 无无 JE 相等跳转短$74 无无无无10 无无80 86 无无 JNE 不等跳转短$75 无无无无10 无无80 86 无无 JBE 不高于跳 转 短$76 无无无无10 无无 80 86 无无 JA 高于跳转短$77 无无无无10 无无80 86 无无 JS 负号跳转短$78 无无无无10 无无80 86 无无 JNS 非负跳转短$79 无无无无10 无无80 86 无无 JP 奇偶跳转短$7A 无无无无10 无无80 86 无无 JNP 非奇偶跳 转 短$7B 无无无无10 无无 80 86 无无 JL 小于跳转短$7C 无无无无10 无无80 86 无无 JNL 不小于跳 转 短$7D 无无无无10 无无 80 86 无无 JNG 不大于跳 转 短$7E 无无无无10 无无 80 86 无无 JG 大于跳转短$7F 无无无无10 无无80 86 无无 JO 溢出跳转近$0F 80 无无无无10 无无 38 6 无 $6 6

巧记汇编语言中的转移指令

巧记汇编语言中的转移指令 8086汇编语言中的转移指令条数虽多,但都是以J字符打头,这是转移指令的特征,J即是英语JUMP 的缩写。 后面的字符大致可分为两类: 一、标志寄存器的标志位符号: C(进位标志位)、Z(零标志位) P(奇偶标志位)。 S(符号标志位)、O(溢出标志位)。 二、逻辑判断条件的英文缩写: N.非(NOT) E.等于(EQUAL) A.高于(ABOVE)用于无符号数的比较结果 B.低于(BELOW)用于无符号数的比较结果 G.大于(GREAT)用于带符号数的比较结果 L.小于(LESS)用于带符号数的比较结果 这些字符的组合即综述了相应的比较或运算结果。 例如:NC即为C标志位的否定,即标志位C=0 JNC即表示标志位C=0时转移。 NBE表示不低于等(即相当于“大于”) 利用这个规律,就可以非常简单地理解大多数条件转移指令的含义了。从另一个角度,这些指令还可以作如下分类: 一、以标志位的内容作为转移条件,有肯定的表示(标志位=1)和否定的表示(标志位=0): 1.肯定的表示: JC C=1 转移进位转移 JP P=1 转移偶转移 JS S=1 转移负转移 JZ Z=1 转移零转移 2.否定的表示: JNC C=0 转移非进位转移 JNP P=0 转移奇转移 JNS S=0 转称非负转移 JNZ Z=0 转移非零转移 要注意,对P(奇偶)标志位还加上奇(000)、偶(EVEN)字符缩写的表示方法(这是两个特例): JPO P=0 转移奇转移,相当于 JNP JPE P=1 转移偶转移,相当于 JP 二、以比较或运算结果作为转移条件,也分肯定的表示和否定的表示,不过还要区分是否是对带符号数进行操作: 1.肯定的表示: 用于无符号数: JA 高于 JAE 高于等于 JB 低于

第11讲 控制转移类指令(二)教案

第十一讲控制转移类指令 二、条件转移指令 实现按照一定条件决定转移的方向。分三类。 1、判零转移 JZ rel JNZ rel JZ rel ;若(A)= 0 ,则转移,否则顺序执行。 JNZ rel ;若(A)≠0,则转移,否则顺序执行。 转移目的地址= (PC)+ 2 + rel 不影响任何标志位。 例1、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。 解:MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1:MOVX A,@DPTR JZ LOOP2 MOV @R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2:SJMP LOOP2 2、比较转移指令 功能:比较二个字节中的值,若不等,则转移。 CINE A,#data,rel CJNE A,direct,rel CJNE @Ri,#data,rel CJNE Rn,#data,rel 该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。 转移目的地址= (PC)+ 3 + rel

若第一操作数内容小于第二操作数内容,则(C)= 1,否则(C)= 0。 该类指令可产生三分支程序: 即,相等分支;大于分支;小于分支。 例2、设P1口的P1.0 ~ P1.3为准备就绪信号输入端,当该四位为全1时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。 解:MOV A,P1 ANL A,#0FH CJNE A,#0FH,WAIT ;P1.0 ~ P1.3不为全1时,返回WAIT MOV A,R2 ······ 3、循环转移指令 DJNZ Rn,rel ;(二字节指令) DINZ direct,rel ;(三字节指令) 本指令也为双功能指令,即减1操作和判断转移操作。 第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。 转移目的地址= (PC)+ 2或3 + rel 例3、将8031内部RAM的40H ~ 4FH单元置初值#A0H ~ #AFH。 解:MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP:MOV @R0,A INC R0 INC A DJNZ R2,LOOP ······ 小结:1、无条件转移指令共有几条? 2、CJNE指令与DJNZ指令有何区别?

设计一条条件转移指令

实验报告 实验人:赵汝鹏学号: 09381052 日期: 2010-12-15 院(系):计算机科学系专业(班级):网络工程 实验题目:设计一条条件转移指令 一.实验目的 1.了解和掌握微程序控制器的组成和工作原理; 2.进一步了解和掌握计算机各部分的组成及相互关系; 3.了解微指令的执行过程,掌握微程序的设计方法,理解动态微程序设计的概念; 4.进一步认识和掌握计算机各指令的执行过程,搞清楚计算机的运行原理。 二.实验内容 设计一条指令,实现的功能是: 当DR=SR时,则原PC(IP)+OFFSET->PC; 当DRPC。 否则执行下条汇编指令。(注:OFFSET为位移量;ADDR为某内存单元地址) 三.实验器材 TEC-2实验计算机、电脑各一台 四.实验分析与设计 (2)指令功能 功能:设计一条指令,实现的功能是: 当DR=SR时,则原PC(IP)+OFFSET->PC; 当DRPC。 否则执行下条汇编指令。(注:OFFSET为位移量;ADDR为某内存单元地址) (3)设计分析 由于要根据DR与SR运算结果进行跳转,所以在110先让DR-SR产生DR与SR 的信息在状态寄存器。在111这里如果Z=1,则跳转至114进行下一步操作,否则 继续执行下一条;在112这里如果S=1,则转115进行下一步操作,否则执行下一 条。如果111与112都没有跳转,证明DR-SR>0,则让PC等于下一条指令的地址。 操作码选择DB,因为如此IR8-10位是011,CC非的值等于S非的值。

(4) 微程序 110:DR-SR 0000 0E01 9110 0088 111:PC->AR, 如果DR=SR转114 0045 0370 9030 5002 112:PC+1->AR,如果DRPC,转4A 0029 0300 B030 5400 114:IP+OFFSET->PC 0029 0300 30D6 5000 115:ADDR->PC 0029 0300 30F0 5000 (5) 加载到微控存程序段 A800 800:MOV R1, 900 802:MOV R2, 6 804:MOV R3, 110 806:LDMC 807:RET 808: G800 (6) 运行程序段 A820 820:MOV R7, 7 822:MOV R8, 8 824:MOV R9, 0 826:NOP 827:NOP 828:NOP 829:MOV R9, 1 82B:RET 82C:MOV R9, 2 82E:RET 82F:MOV R9, 3 831:RET 832: E826 DB78 0006 082F G820 第一种情况是DRSR

汇编指令无条件转移指令JMP

[汇编指令]无条件转移指令JMP 2009-08-16 18:43 无条件转移指令JMP 指令格式:JMP OPRD 其中OPRD为转移的目的地址。程序转移到目的地址所指向的指令继续往下执行。 指令功能:JMP指令将无条件地控制程序转移到目的地址去执行。当目的地址仍在同一个代码段内,称为段内转移;当目标地址不在同一个代码段内,则称为段间转移。这两种情况都将产生不同的指令代码,以便能正确地生成目的地址,在段内转移时,指令只要能提供目的地址的段内偏移量即够了;而在段间转移时,指令应能提供目的地址的段地址及段内偏移地址值。 本组指令对标志位无影响。 <1>段内直接转移指令:JMP NEAR 标号 即:JMP NEAR 标号; (IP)<--disp16+(IP) JMP SHORT 标号; (IP)<--disp8+(IP) <2>段内间接转移指令:JMP OPRD 例如:JMP BP; 转向(SS):(BP) JMP JNEAR[BX]; 转向(CS):(BX)+JNEAR JMP WORD PTR[BX][DI]; 转向(CS):(BX)+(DI) <3>段间直接转移指令:JMP FAR 标号 由于标号之前用FAR说明为远的属性,因而只能是一条段间转移指令。执行该指令时,将把标号所在的段的值送CS,将标号在所属段内的偏移量送IP,从而形成新的转移地址CS:IP <4>段间间接转移指令:JMP OPRD其中的OPRD为存储器双字操作数。段间间接转移只能通过存储器操作数来实现。 例如:指令JMP DWORD PTR[BX],其操作数是一个双字类型的存储器操作数,它指向数据段DS,段内偏移为(BX)。从这个DS:BX开始的前两个字节中,存放了目标地址的段内偏移值,后两个字节中,存放了目标地址所在的新的段的段基址,分别将它们送至IP及CS,便形成了新的转移地址

汇编指令1

汇编语言指令集 一、数据传输指令 1. 通用数据传送指令. MOV(MOVe) 传送字或字节. MOVS(MOVe String) 串传送指令 MOVSX先符号扩展,再传送. MOVZX先零扩展,再传送. PUSH把字压入堆栈. POP把字弹出堆栈. PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD先交换再累加.( 结果在第一个操作数里) XLAT(TRANSLATE) 字节查表转换. ── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535. 3. 目的地址传送指令. LEA (Load Effective Address)装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS (Load DS with pointer)传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES (Load ES with pointer)传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 标志传送指令. LAHF (Load AH with Flags)标志寄存器传送,把标志装入AH. SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器. PUSHF (PUSH the Flags)标志入栈. POPF (POP the Flags)标志出栈.

条件转移指令

条件转移指令 条件转移指令是指在满足一定条件时进行相对转移。 1.判A内容是否为0转移指令 JZ rel JNZ rel 第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。因此这第指令我们可以这样理解:JZ 标号。即转移到标号处。下面举一例说明: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值不等于0,则顺序执行,也就是执行 MOV R1,#00H指令。最终的执行结果是R1中的值等于0。 第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。把上面的那个例子中的JZ改成JNZ试试吧,看看程序执行的结果是什么? 2.比较转移指令 CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel

CJNE @Ri,#data,rel 第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就顺序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们可以将rel理解成标号,即:CJNE A,#data,标号。这样利用这条指令,我们就可以判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,否则CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。 例: MOV A,R0 CJNE A,#10H,L1 MOV R1,#0FFH AJMP L3 L1: JC L2 MOV R1,#0AAH AJMP L3 L2: MOV R1,#0FFH L3: SJMP L3 上面的程序中有一条指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则顺序执行(执行它的下面一条指令)。 分析一下上面的程序,如果(A)=10H,则顺序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将顺序执行,即执行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。 弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将

控制转移类指令

控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 [1]. 无条件转移指令(4条) 这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址) AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变 SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值 JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 这几条指令,如果要他细分析的话,区别较大,但初学者时,可以不理会那么多,统统理解成LJMP标号,也就是跳转到一个标号处,但事实上,JMP标号,在前面的例程中我们已接触过,并且也知道如何来使用了,AJMP和SJMP也是一样,那么这几条指令它们的区别何在呢?在于跳转的范围不一样。好比跳远,LJMP一下就能跳64K那么远(当然近了就更没关系了)。而AJMP最多只能跳2K距离,而SJMP则最多只能跳256这么远,原则上,所有用AJMP或SJMP的地方都可以用LJMP来替代。因此在初学者时,需要跳转时可以全用LJMP。 但是在查表时要注意会出错,因为他们的机器周期不一样,取得的数也不一样。

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

实验四条件转移指令 实验目的: 通过实验掌握下列知识: 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命令将此程序用https://www.360docs.net/doc/8e1347471.html,文件名存入磁盘。 3、用Q命令退出DEBUG。 4、在DOS命令状态下直接运行https://www.360docs.net/doc/8e1347471.html,命令文件,应在屏幕上显示出存从0000H开始的16个字节的容,若有错误,用DEBUG检查之。 5、自编程序:修改上面程序,使除以16进制数形式显示存容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用'.'代替。

(完整word版)汇编语言指令详解大全,推荐文档.doc

助记符指令说明字节数周期数 (数据传递类指令) MOV A, Rn 寄存器传送到累加器 1 1 MOV A, direct 直接地址传送到累加器 2 1 MOV A, @Ri 累加器传送到外部 RAM(8 地址 ) 1 1 MOV A, #data 立即数传送到累加器 2 1 MOV Rn, A 累加器传送到寄存器 1 1 MOV Rn, direct 直接地址传送到寄存器 2 2 MOV Rn, #data 累加器传送到直接地址 2 1 MOV direct , Rn 寄存器传送到直接地址 2 1 MOV direct , direct 直接地址传送到直接地址 3 2 MOV direct , A 累加器传送到直接地址 2 1 MOV direct , @Ri 间接 RAM 传送到直接地址 2 2 MOV direct , #data 立即数传送到直接地址 3 2 MOV @Ri, A 直接地址传送到直接地址 1 2 MOV @Ri, direct 直接地址传送到间接 RAM 2 1

MOV @Ri, #data 立即数传送到间接RAM MOV DPTR, #data16 16 位常数加载到数据指针 MOVC A, @A+DPTR 代码字节传送到累加器 MOVC A, @A+PC 代码字节传送到累加器 MOVX A, @Ri 外部 RAM(8 地址 ) 传送到累加器MOVX A, @DPTR 外部 RAM(16 地址 ) 传送到累加器MOVX @Ri, A 累加器传送到外部RAM(8 地址 ) MOVX @DPTR, A 累加器传送到外部RAM(16 地址 ) PUSH direct 直接地址压入堆栈 POP direct 直接地址弹出堆栈 XCH A,Rn 寄存器和累加器交换 XCH A, direct 直接地址和累加器交换 XCH A, @Ri 间接 RAM 和累加器交换 XCHD A, @Ri 间接 RAM 和累加器交换低 4 位字节 ( 算术运算类指令 ) 2 2 3 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 1 INC A累加器加11 1

无条件转移指令(共4条)

MCS-51的控制转移类指令,共17条,分为无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等四类。 无条件转移指令(共4条) LJMP addr16 ;PC〈——addr16 AJMP addr11 ;PC〈——PC+2 ,PC10-0〈——addr11 SJMP rel ;PC〈——PC+2 ,PC 〈——PC+rel JMP @A+DPTR ;PC〈——A+DPTR 第一条指令称为长转移指令(Long Jump); 第二条指令叫作绝对转移指令(Absolute Jump); 第三条指令称作短转移指令(Short Jump); 第四条指令是变址寻址转移指令(散转指令)。 显然,每条指令均以改变程序计数器PC(Program Counter)中的内容为宗旨。 (1)长转移指令(64KB范围内转移指令) 长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何 标志。由于addr16是一个16位二进制地址(地址范围为0000H—FFFFH),因此长转移指令一条可以在64KB范围内转移的指令。为了使程序设计方便易编,addr16常采用标号地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示,只有在上机执行前才被汇编(或代真)为1 6位二进制地址。长转移指令为三字节,双周期指令。上机试试吧!很直观的! For Example:LJMP F886H 注意:在下载的这个8051DEBUG软件中,不支持标号,且程序状态字PSW(P rogram State Word)中的D0位,即奇偶标志位P,与正确的正好相反,这一点是错误的,用的时候留意一下。 只要记好:累加器ACC中1的个数为奇数,则P=1;否则P=0。 (2)绝对转移指令(2KB范围内的转移指令) 绝对转移指令是一条双字节双周期指令,11位地址addr11(a10—a0)在指令中的分布是:a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是操作码。在程序设计中,11位地址也可以用符号表示,但在上机执行前必须按照上述指令格式加以代真。 绝对转移指令执行时分为两步: 第一步是取指令操作,程序计数器PC中内容被加1两次; 第二步是把PC加2后的高5为地址PC15—PC11和指令代码中低11位构成目

控制转移类指令分析

控制转移类指令分析 控制转移类指令分析 控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 [1].无条件转移指令(4条) 这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址) AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变 SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值 JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 这几条指令,如果要他细分析的话,区别较大,但初学者时,可以不理会那么多,统统理解成LJMP标号,也就是跳转到一个标号处,但事实上,JMP标号,在前面的例程中我们已接触过,并且也知道如何来使用了,AJMP和SJMP也是一样,那么这几条指令它们的区别何在呢?在于跳转的范围不一样。好比跳远,LJMP一下就能跳64K那么远(当然近了就更没关系了)。而AJMP最多只能跳2K距离,而SJMP则最多只

指令部件模块实验

太原师范学院 实验报告 Experimentation Report of Taiyuan teachers College 报告内容 一、实验目的四、实验方法 二、实验原理五、实验记录及数据处理 三、实验仪器及材料六、误差分析及讨论 系部计算机系年级 0903 课程组成原理 姓名XXX 同组者无日期 2011/6/8 项目指令部件模块实验 一、实验目的 1. 掌握指令部件的组成方式; 2. 熟悉指令寄存器的打入操作,PC计数器的设置和加1操作,理解跳转指令的实现过程。 二、实验要求 按照实验步骤完成实验项目,掌握数据打入指令寄存器IR1,PC计数器的重置,PC计数器自动加1和实现跳转指令的方法。 三、实验内容 1. 控制信号说明 信号名称作用有效电平 IR1CK IR1的工作脉冲上升沿有效 IR2CK IR2的工作脉冲上升沿有效 PCCK PC计数器的工作脉冲上升沿有效

EIR1 选通指令寄存器IR1 低电平有效 EIR2 选通指令寄存器IR2低电平有效 IR2-O IR2输出允许低电平有效 PC-O PC计数器内容输出允许低电平有效 ELP 74LS161控制信号高电平可重置PC值,低电平时PC值自动加1 JS0-JS1选择开关见下表 JZ 条件跳转为零跳转 JS1 JS0 功能 0 0 选择JZ,当通用寄存器为0时跳转 0 1 选择JC,当进位寄存器为0时跳转 1 0 选择JN,提供给用户自定义,JN=0跳转 1 1 重新设置当前PC指针,实现JMP指令 2. 实验准备 按启停单元中的运行按钮,使实验平台为运行状态。 把EIR1,EIR2,PC-O,IR2-O,ELP,JS0,JS1接入二进制拨位开关中。把IR1CK和IR2CK 接入脉冲单元PLS1,PCCK接入PLS2中。用长8位扁平电缆把PC-IN与CPT-B板上的二进制开关单元中J03相连(对应二进制开关H0~H7),PC-OUT用短8位扁平电缆连接地址总线AJ1,其他控制信号请按下表所示接线。 信号定义接入开关位号信号定义接入开关位号 IR1CK PLS1孔PC-O H17孔 IR2CK PLS1孔ELP H16孔 PCCK PLS2孔JS0 H15孔 EIR1 H20孔JS1H14孔 EIR2H19孔JZ H13孔 IR2-O H18孔 3. 实验一:PC计数器置数 二进制开关H0~H7作为数据输入,置为05H,对应开关如下表所示。 H7H6H5H4H3H2H1H0数据总线值 A7A6A5A4A3A2A1A08位数据 0 0 0 0 0 1 0 1 05H

jmp特性和案例分析

JMP特性和案例 鼠标操作事件: 随时随地响应您的操作 许多统计分析软件包对用户操作的响应都非常有限 -- 数据和结果都端坐在一旁 -- 偶而根据指令做出一些响应,描述结果的报表也相当死气沉沉。 JMP作为一套动态数据分析系统。任何在您的桌面显示出来的窗口都是互动的。数据,分析过程都可以根据您的需求即时作出变化。每一样东西在他们被关闭之前都是动态的,JMP会根据您鼠标点击的部位立即进行响应。 点击您的电子表格 数据表永远以您熟悉 的电子表格方式出现。 一切操作都不需重新 学习。

您可以随时呼出弹出菜单, 重新定义各种属性。 点击您的分析报告点击报 告的标题可以切换隐藏与展现 两种方式。点击弹出菜单图标 ()来发布指令。点击并拖 动图形的边角来改变它的大 小。双击报表的一行可以修改 它的格式,双击图形的轴线可 以修改它的坐标。 点击您的直方图使用“grabber”工 具来拖动您的直方图,当您左右拖动它时,直方图的间隔将立即改变。向左使间隔变宽,向右使间隔变窄。您也可以上下移动以改变视觉位置。

三维旋转图使用“Grabber“工具,三维图将跟随您的 鼠标进行实时的全方向旋转。 为了特殊操作而设置的工具集一共有9种工具以配合您可能用到的各种操作。“箭头”工具用于一般的选择,点击操作。您可以 使用“问号”工具点击任何地方以获取相关帮助。用“画刷”工具 来选择矩形区域中的数据点。用“绳套”工具来选取不规则区域中 的数据点。使用“grabber(手)"工具来移动物体。使用“裁剪” 工具来进行裁剪与粘贴。使用“发丝”工具来精确定位和获取精确 坐标值。使用“放大镜”来对图形进行缩放。使用“文本工具”来 加上各种文本,注释。 互动式图形探索: 获取数据点 如果在JMP数据表中的某一行被选中以高亮显示,与其相关的任何部分都会被同时以高亮显示。

控制转移类指令和位操作指令

控制转移类指令和位操作指令 (一).控制转移类指令 计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。 控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。 控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。下面我们将分类介绍。 1.无条件转移指令(4条) LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内 转移,称为长转移指令 AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移 SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号 数,范围-128~127,即可向后跳转128,向前可跳转 127 JMP @A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容 相 加后形成的新地址 例执行指令 LJMP 9100H 不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。 例程序 2000H MOV R0 , #10H ;10H→PC 2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC ┇┇ 2006H ┇ 2007H ┇ 从说明中可见,执行SJMP 03H 指令后,马上跳转到2007H地址执行程序。 2.条件转移指令(8条) 条件转移指令是根据某种特定条件转移的指令。条件满足时转移,条件不满足时则顺序 执行下面的指令。 JZ rel ;A=0转向PC+2+rel→PC,A≠0顺序执行 JNZ rel ;A≠转向PC+2+rel→PC ,A=0顺序执行

相关文档
最新文档