条件转移指令表
- 格式:doc
- 大小:115.50 KB
- 文档页数:3
1. 通用数据传送指令.MOV 传送字或字节.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 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.—— 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 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入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 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器. PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令—————————————————————————ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令—————————————————————————AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL四、串指令—————————————————————————DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复. REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复. REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令—————————————————————————1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z). JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令—————————————————————————DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段. ASSUME 建立段寄存器寻址. ENDS 段结束.END 程序结束.。
我现将指令系统中各种助记符得英文全名写出来,各种助记符得记忆就会变得很简单o(∩_∩)o、、、在这之前,先说一下寄存器:数据寄存器分为:AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有得I/O指令都使用这一寄存器与外界设备传送数据、BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)与串处理指令中用作隐含得计数器、DH&DL=DX(data):数据寄存器,常用于数据传递。
她们得特点就是,这4个16位得寄存器可以分为高8位: AH, BH, CH, DH、以及低八位:AL,BL,CL,DL。
这2组8位寄存器可以分别寻址,并单独使用。
另一组就是指针寄存器与变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前得堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS得一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目得变址寄存器,可用来存放相对于ES 段之目得变址指针。
指令指针IP(Instruction Pointer)标志寄存器FR(Flag Register)OF(overflow flag)DF(direction flag)CF(carrier flag)PF(parity flag)AF(auxiliary flag)ZF(zero flag)SF(sign flag)IF(interrupt flag)TF(trap flag)段寄存器(Segment Register)为了运用所有得内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。
SUBI Rd,K 立即数减 ICALL间接调用(128KB) SBC Rd,Rr 带进位减CALL k 长调用(4M)SBCI Rd,K 带进位立即数减 RET子程序返回 SBIW Rd,K 立即数减法 RETI中断返回 AND Rd,Rr 逻辑与CPSE Rd,Rr 比较相等跳行 ANDI Rd,K 直接数逻辑与 CP Rd,Rr 比较OR Rd,Rr 逻辑或CPC Rd,Rr 带进位比较 ORI Rd,K 直接数逻辑或 CPI Rd,K 带直接数比较 EOR Rd,Rr 异或 SBRC Rd,b 寄存器位被清零跳行 COM Rd 取二进制反码 SBRS Rd,b 寄存器位置位跳行 NEG Rd 二进制补码 SBIC P,b I/O 寄存器的位清零跳行 SBR Rd,K 寄存器位置位 SBIS P,b I/O 寄存器的位置位跳行 CBR Rd,K 清除进位标志 BRBS S,k SREG 中的位被置位转移 INC Rd 加 1 BRBC S,k SREG 中的位被清除转移 DEC Rd 减 1 BREQ k 相等转移 TST Rd 测试零或负 BRNE k 不相等转移 CLR Rd 清除寄存器 BRCS k 进位位置位转移 SER Rd 置位寄存器所有位 BRCC k 进位位清除转移 MULRd,Rr 乘法BRSH k 高于等于转ADD Rd,Rr 加法RJMPADC Rd,Rr 带进位加法 IJMP 算术和逻辑指令条件转移指令相对转移(-2K K 2K) 间接跳转(128KB) ADIW Rd,K 直接数加法 JMP k 长跳转(4M) SUB Rd,Rr 减法RCALL k 相对调用(-2K K 2K)寄存器和操作码BRLO k 低于转移(无符号) Rd :寄存器文件中的目的(或源)寄存器 BRMI k 负数转移 Rr : 寄存器文件中的源寄存器 BRPL k 正数转移R :指令执行后的结果 BRGE k 大于或等于转移(带符号) K :常数项或字节数据(8 位) BRLT k 小于转移(有符号) k :程序计数器的常量地址数据 BRHS k 半进位标志置位转移 b :在寄存器文件中或 I/O(3 位)中的位 BRHC k 半进位标志被清除转移 s : 在状态寄存器 (3 位)中的位 BRTS k T 标志被置位转移 X,Y,Z:间接地址寄存器 BRTC k T 标志被清除转移 P :I/O 口地址BRVS k 溢出标志被置位转移 q :直接寻址的偏移(6 位) BRVCk溢出标志被转移清除状态寄存器BRIE k 全局中断被使能转移 SREG: 状态寄存器 S :N ⊕V,符号测试位 BRID k 全局中断被禁止转移C :进位标志位 H :半进位标志位 状态寄存器(SREG)和布尔格式Z :零标志位 N :负数标志位 I T H S V N Z C V :2 的补码溢出指示位 7 6 5 4 3 2 1 0 T :用于 BLD 和 BST 指令传送位 I :全局中断使能禁止标志位标志: =/0/1/-; = 由指令引起的有效标志AVR C 高级语言的效率 执行同功能的程序,8MHzAVR224MHz C51不再有作废的产品; 不需要 5 分钟的紫外线擦除时间; 再也用不着因为掩模而无法入睡了;没有 10 周订货交货时间; 添加新特性易如反掌; 容易调试; 容易在线升级,几秒钟搞定;。
汇编条件转移指令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标签处继续执行代码。
51单片机条件转移指令51单片机是一种常用的单片机芯片,它的条件转移指令在编程中起着重要的作用。
条件转移指令是根据特定的条件来决定程序的执行路径,使得程序具备一定的智能性和灵活性。
下面我们来详细介绍51单片机的条件转移指令以及它们的使用方法和注意事项。
51单片机的条件转移指令主要有以下几种:条件跳转指令、循环控制指令和中断指令。
这些指令可以根据特定的条件来改变程序执行的顺序和逻辑,实现程序的分支和循环控制。
首先,我们来介绍条件跳转指令。
条件跳转指令一般用于根据某个条件来跳转到不同的程序地址。
其中比较常见的有“跳转指令”、“条件判断指令”和“条件转移指令”等。
跳转指令可以根据某个条件来跳转到指定的程序地址,比如“跳转到某个子程序”或“跳转到某个循环体”。
条件判断指令可以根据特定的条件来执行跳转或继续执行下一条指令,比如“如果某个条件成立,就跳转到某个程序地址;否则继续执行下一条指令”。
条件转移指令一般用于根据某个条件转移到不同的程序地址,比如“如果某个条件成立,就转移到某个程序地址;否则继续执行下一条指令”。
其次,我们介绍循环控制指令。
循环控制指令一般用于实现程序的循环执行,其中比较常见的有“循环指令”和“计数器指令”等。
循环指令可以通过设置循环条件来实现程序的循环执行,比如“当某个条件成立时,就一直循环执行某段程序”。
计数器指令一般通过设置一个计数器来实现程序的循环执行,比如“循环执行某段程序一定的次数”。
最后,我们介绍中断指令。
中断指令主要用于处理外部的中断事件,比如“按键中断”和“定时器中断”等。
中断指令可以在程序执行的过程中,根据外部中断事件的发生来中断当前的执行流程,执行中断服务程序,处理完中断事件后,再返回到原来的程序地址继续执行。
在使用51单片机的条件转移指令时,需要注意以下几点。
首先,要根据具体的需求选择合适的条件转移指令,合理组织程序的逻辑结构。
其次,要注意条件转移指令的执行过程中是否会对程序的性能和时序等方面造成影响。
内容目录计算机寄存器分类简介计算机寄存器常用指令一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
.4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。