单片机汇编语言指令查表
- 格式:doc
- 大小:423.04 KB
- 文档页数:11
下面是汇编语言实现楼宇对讲功能的查表实例:当单片机外部系统发来不同的指令时,便启动查表功能,实现不同的操作,如单片机接收到的指令保存在RXD中,RXD+1保存指令终止符号,如要实现某个操作,外部发来0XA0操作符到RXD中,0XFF到RXD+1中,即开启查表,开始执行下列程序:MOV A,(RXD_Buf+1)CJNE A,RXD_Buf,Exit_Receive_Msg_Proc如果为退出指令,则退出MOV B,RXD_BufJmpX_By_Ins Division_Instruction,Run_Instr_Addr子程序;==================================Division_Instruction:DB00H,01H,03H,05H,06H,07H,09H,0AH,13H,14H,15H,16HDB28H,29H,2AH,2CH,2EH,30H,31H,33H,35H,FAH;FLAG OF END;==================================Run_Instr_Addr:LJMP Call_By_Manger;00H;LJMP Put_Down_Hook;01H;LJMP Put_Off_Hook;03H;LJMP Disable_Calling;05H;LJMP Enable_Get_Msg;06H;LJMP There_Are_Msg;07H;LJMP Call_By_Door;09H;LJMP FeedBack_Alarm;0AHLJMP Put_Off_Hook_For_Out;13H;LJMP Set_Up_Fortify_By_GLC;14H;LJMP Disable_Alarm_By_GLC;15H;LJMP Reset_Divi_Password;16H;LJMP Calling_By_T_Main;28H;LJMP Hook_On_By_Brother;29H;LJMP Hook_Off_By_Brother;2AH;LJMP Hook_On_By_T_Main;2CH;LJMP Calling_By_Brother;2EH;LJMP Define_Baud_Rate;30HLJMP GLC_Proced_Alarm;31HLJMP Graphic_Msg_In_Main;33HLJMP Rst_Standart_Rate;35HReturn_Main_Body_For_Divi_Ins:LJMP Exit_Receive_Msg_Proc;FAHJmpX_By_Ins MACRO I_Table,F_TableMOV DPTR,#I_Table将指令表首地址赋给DPTRLCALL DPTR_Comp_B调用MOV A,R05此时R05表示查找到的位置MOV B,#03LJMP指令占三个字节MUL ABMOV DPTR,#F_Table将功能地址赋给DPTR,加上要跳转的位置JMP@A+DPTR找到相应的LJMP子程序,开始执行ENDM;=============================DPTR_Comp_B:;INPUT INSTRUCTION CODE,RETURN R7---INSTRUCTION SEQUENCEMOV R05,#0从头开始查表Comp_Next_DPTR:CLR AMOVC A,@A+DPTR将指令表首地址赋给ACJNE A,B,Chk_End_Flag此时B为接收的指令,如A0H,不相等,跳转,如果找到,则退出SJMP Exit_DPTR_CompChk_End_Flag:CJNE A,#FAH,Comp_INC_DPTR A不是跳出指令,跳转,往下查表SJMP Exit_DPTR_CompComp_INC_DPTR:INC DPTR位置加1INC R05SJMP Comp_Next_DPTR查找下一个Exit_DPTR_Comp:RET;=====================================。
动态显示字符"8051AF";============================== ;定义显示缓冲区DISP1 EQU 40HDISP2 EQU 41HDISP3 EQU 42HDISP4 EQU 43HDISP5 EQU 44HDISP6 EQU 45H;============================== ORG 0000HLJMP START;============================== ORG 0050HSTART:MOV SP,#060H ;初始化堆栈指针;初始化显示缓冲区MOV DISP1,#0FhMOV DISP2,#0AhMOV DISP3,#01hMOV DISP4,#05hMOV DISP5,#00h;MOV A,#80H ;8255方式控制字MOV DPTR,#0FF23H ;8255控制口地址MOVX @DPTR,A ;初始化8255 MAIN:ACALL DISPLAYSJMP MAIN;============================== DISPLAY:MOV R0,#DISP1MOV R2,#0FEH ;字控制MOV R3,#06HDLOOP:MOV A,@R0MOV DPTR,#LEDMAP ;取七段码表首地址MOVC A,@A+DPTRCPL AMOV DPTR,#0FF21H ;8255 PB口地址MOVX @DPTR,AMOV A,R2MOV DPTR,#0FF20H ;8255 PA口地址RL A ;显示位左移MOV R2,AINC R0ACALL DLYDJNZ R3,DLOOPRET;==============================DLY: ;延时子程序MOV R7,#02HDLY1: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DLY1RET;==============================LEDMAP: ; 数码管七段显示码表(共阴)db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h db 00H;==============================END1到100数码管显示ORG 0000HABIT EQU 20H ;个位数存放处BBIT EQU 21H ;十位数存放处TEMP EQU 22H ;计数器寄存器START:MOV P2,#0FFHMOV TEMP,#0 ;初始化计数器STLOP:ACALL DISPLAYINC TEMPMOV A,TEMPCJNE A,#100,NEXT ;=100重来MOV TEMP,#0NEXT:LJMP STLOP;显示子程序DISPLAY: mov p0,0ffhMOV A,TEMP ;将temp中的十六进制数转换成10进制 MOV B,#10 ;10进制/10=10进制DIV ABMOV BBIT,A ;十位在aMOV ABIT,B ;个位在b;p0口接段码a,b,c,d,e,f,g, p2口接位码,选哪个数码管显示 MOV DPTR,#TAB ;指定查表启始地址MOV R0,#4DPL1:MOV R1,#250 ;显示1000次DPLOP:MOV A,ABIT ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码MOV P1,A ;送出个位的7段代码CLR P2.0 ;开个位显示ACALL D1MS ;显示1msSETB P2.0MOV A,BBIT ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码MOV P1,A ;送出十位的7段代码CLR P2.1 ;开十位显示ACALL D1MS ;显示1msSETB P2.1DJNZ R1,DPLOP ;100次没完循环DJNZ R0,DPL1 ;4个100次没完循环RET;1MS延时(按12MHZ算);====================================================D1MS:MOV R7,#80DJNZ R7,$RET;7段数码管各划的数字排列表TAB:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0F8h,80h,90h ;不带小数点0 1 2 3 4 5 6 7 8 9END步进电机驱动,按键改变转动方向;==============================; 1 2 3 4 5 6 7 8;P1.0: H H H L L L L L;P1.1: L L H H H L L L;P1.2: L L L L H H H L;P1.3: H L L L L L H H; 9 1 3 2 6 4 C 8KEYIN BIT P3.4 ;定义按键输入FLAG BIT 00H;==============================ORG 0000HLJMP START;==============================ORG 0050HSTART:MOV SP,#060H ;初始化堆栈指针MOV P1,#08HMOV R2,#00HCLR FLAGMOV DPTR,#MOV_TABLEMAIN:ACALL KEYPROCJB FLAG,MAIN1INC R2ACALL MOVESJMP MAINMAIN1:DEC R2ACALL MOVESJMP MAIN;============================== MOVE: ;运转控制MOV A,R2ANL A,#07HMOVC A,@A+DPTRMOV P1,AACALL DLYRET;===========MOV_TABLE:DB 09H,01H,03H,02H,06H,04H,0CH,08H ;============================== KEYPROC:JB KEYIN,KEY_DONEACALL DLYACALL DLYJB KEYIN,KEY_DONECPL FLAGJNB KEYIN,$KEY_DONE:RET;============================== DLY: ;延时子程序MOV R7,#0AHDLY1: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DLY1RET;==============================END左右循环点亮ORG 0000HLJMP STARTORG 0030HSTART: MOV R1,#00HDJNZ R1,$MOV SP,#60HLOOP: MOV A,#0FEHLOOP_1: MOV P1,ACALL DELAYRL ACJNE A,#7FH,LOOP_1 ;0111 1111 LOOP_2: MOV P1,ACALL DELAYRR ACJNE A,#0FEH,LOOP_2 ; 1111 1110 SJMP LOOPDELAY: MOV R0,#00HL1: MOV R1,#00H L2: DJNZ R1,L2 DJNZ R0,L1 RETEND所有灯循环点亮ORG 0000HLJMP MAINORG 0100HMAIN:MOV P1,#0FFHLCALL DELAYMOV P1,#00HLCALL DELAYLJMP MAINDELAY:MOV R7,#0D1:MOV R6,#0D2:DJNZ R6,D2DJNZ R7,D1RETEND产生方波/*用定时器T0产生50HZ的方波。
3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。
3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。
3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。
3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。
3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。
(3)将累加器内容送片外RAM 的7BH 单元。
(4)将累加器内容送片外RAM 的007BH 单元。
(5)将ROM007BH 单元内容送累加器。
3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。
计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。
MCS-51单片机汇编语言指令格式:操作符目的操作数,源操作数指令中的常用符号Rn: n=(0~7),表示当前工作寄存器R0~R7中的一个Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器dir : 8 位直接字节地址(片内RAM 和SFR )#data: 8位立即数,即8位常数。
可以为2进制(B)、10进制、16进制(H)、字符(‘ ’)#data16: 表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFHaddr16 : 表示16位地址addr11 : 表示11位地址rel : 相对偏移量(为一字节补码)用于相对转移指令中bit :位地址,在位地址空间中。
$: 表示当前指令的地址。
寻址方式1、立即寻址指令中直接给出操作数的寻址方式。
在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。
立即寻址中的数,称为立即数。
例如指令:MOV A,#30H2、直接寻址操作数的地址直接出现在指令中。
寻址对象:①内部数据存贮器:使用它的地址。
②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。
3、寄存器寻址操作数存放在寄存器中。
寻址对象:A,B,DPTR,R0~R7 。
B 仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。
A 可以寄存器寻址又可以直接寻址,直接寻址时写作ACC例如:MOV A,R0 ;R0→A,A、R0均为寄存器寻址,机器码E8MUL AB ;A*B→BA,A、B为寄存器寻址,机器码A4MOV B,R0 ;R0→B,R0为寄存器寻址,B为直接寻址机器码88F0,其中F0为B的字节地址(见表1-2)PUSH ACC ;A的内容压入堆栈机器码C0E04、寄存器间址操作数存放在以寄存器内容为地址的单元中。
汇编语言的所有指令数据传送指令集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而定对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。
汇编语言指令与c51单片机指令的异同处系别:机电系测控一班姓名:陈瑞关日宏郝秀辉魏文阳前言 (10)一、汇编语言 (11)1.概括: (11)3.汇编语言优缺点 (12)4.汇编语言指令:一、数据传输指令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)标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈 (13)二、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAA 加法的十进制调整.压缩的BCD码加法十进制调整指令SUB (SUBtract)减法.SBB (SuVtrach with borrow)带借位减法.DEC (DECrement)减 1.NEC (NEGate)求反(以 0 减之).CMP (CoMPare)比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAS 减法的十进制调整.压缩的BCD码减法十进制调整指令MUL (unsinged MULtiple)无符号乘法.IMUL (sIgned MUL tiple)整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV (unsigned DIVide)无符号除法.IDIV (sIgned DIVide)整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW (Count Byte to Word)字节转换为字. (把AL中字节的符号扩展到AH中去) CWD (Count Word to Doble word)字转换为双字. (把AX中的字的符号扩展到DX 中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL (SHift logical Letf)逻辑左移.SAL 算术左移.(=SHL)SHR (SHift logical Right)逻辑右移.SAR 算术右移.(=SHR)ROL (Rotate Left )循环左移.ROR (Rotate Right)循环右移.RCL (Rotate Left through Carry)通过进位的循环左移.RCR (Rotate Right through Carry)通过进位的循环右移.以上八种移位指令,其移位次数可达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 (CoMPare String)串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS (SCAn String)串扫描指令.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS (STOre into String)保存串.是LODS的逆过程.REP (REPeat)当CX/ECX<>0时重复.REPE/REPZ (REPeat while Equal/Zero)当ZF=1或比较结果相等,且CX/ECX<>0时重复. REPNE/REPNZ (REPeat while Not Equal/Zero)当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 (SeT Direction flag)置方向标志位.CLD (CLear Direction flag)清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.8088 汇编跳转cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主程序nop 无作用,英文“no operation”的简写,意思是“do nothing”call 调用子程序je 或jz 若相等则跳jne或jnz 若不相等则跳jmp 无条件跳jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳pop 出栈push 压栈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而定 (15)二、C51汇编语言 (29)1.概括: (29)2.特点: (30)3.C语言优缺点 (30)C语言的优点 (30)C语言的缺点 (32)4.C51语言指令 (32)数据传送类指令 (32)程序调用及返回指令表 (35)无条件转移指令表 (36)条件转移指令 (36)位操作指令 (36)程序存储器取数据指令 (38)堆栈操作指令 (38)数据交换指令 (38)算术运算指令表 (39)三、异同处: (40)前言漫步在繁华的现代化的大都市的大街上,随时都可以看到街上有很多可以用卡取钱的机器(ATM自动柜员机),十字路口的交通灯。
目录表1 寻址方式与相应的寻址空间 (2)1.1数据传送指令MOV (2)1.2程序存储器取数据指令MOVX,MOVC (3)1.3 数据交换指令XCH,XCHD,SWAP (3)1.4 逻辑运算指令ANL,ORL(按位进行) (4)续表1.4 逻辑运算指令XRL CLR CPL RL RLC RR RRC(按位进行) (5)1.5 控制转移指令LJMP AJMP SJMP JMP JZ JNZ CJNE (6)续表1.5 控制转移指令DJNZ LCALL ACALL RET RETI NOP (7)1.6 布尔处理(位操作)指令CLR SETB CPL ANL ORL (8)续表1.6 布尔处理(位操作)指令JC JNC JB JNB JBC (9)1.7堆栈操作指令PUSH POP (10)2.MCS-51系列单片机算术运算指令表ADD ADDC SUBB INC DEC MUL DIV DA (10)表1 寻址方式与相应的寻址空间1.1数据传送指令MOV方式 利用的变量 使用的空间寄存器 R0∽R7,A ,B ,CY ,DPTR直接寻址 direct片内RAM 低128字节特殊功能寄存器SFR寄存器间址 @Ro ,@R1 SP @R0,@R1,@DPTR片内RAM 片外RAM立即数 #data程序存储器 基址加变址 @A+PC @A+DPTR程序存储器 相对寻址 PC+rel程序存储器位寻址bit片内RAM 的20H ∽2FH 部分SFR目的操作数汇编指令机器码功能字节数 机器周期A 累加器 立即数送AMOV A ,#data 74H data data 传至A 2 1 内部RAM 或SFR 内容送AMOV A ,direct E5H direct(direct)传至A2 1 寄存器内容送AMOV A ,Rn (n=0∽7) E8H ∽EFH 11101rrr (Rn)传至A 1 1 内部RAM 内容送A MOV A ,@Ri (i=0,1) 1110011i((Ri))传至A 1 1 Direct内部RAM 或SFR立即数送内部RAM 或SFR MOV direct ,#data 75H direct data data 传至direct 3 2 内部RAM 和SFR 直接直接传送 MOV direct ,direct 85H direct direct (direct)传至direct 3 2 累加器内容送内部RAM 或SFR MOV direct ,AF5H direct(A)传至direct 2 1 寄存器内容送内部RAM 或SFR MOV direct ,Rn (n=0∽7) 10001rrr direct (Rn)传至direct 2 2 内部RAM 内容送内部RAM 或SFRMOV direct ,@Ri (i=0,1) 1000011i direct ((Ri))传至direct 2 2 Rn 寄存器立即数送寄存器 MOV Rn,#data (n=0∽7) 01111rrr data data 传至Rn 2 1 内部RAM 或SFR 内容送寄存器MOV Rn,direct (n=0∽7) 10101rrr direct (direct)传至Rn 2 2 累加器内容送寄存器MOV Rn,A (n=0∽7) 11111rrr (A)传至Rn 1 2 @Ri 内部RAM立即数送内部RAMMOV @Ri,#data (i=0,1) 0111011i data data 传至(Ri) 2 1 内部RAM 或SFR 内容送内部RAMMOV @Ri,direct (i=0,1) 1010011i direct (direct)传至(Ri) 2 2 累加器内容送内部RAM MOV @Ri,A (i=0,1) 1111011i(A)传至(Ri) 1 1 DPTR 16位立即数传送指令MOV DPTR,#data1690H dataH dataLdata16传至DPTR321.2程序存储器取数据指令MOVX ,MOVC1.3 数据交换指令XCH ,XCHD ,SWAP目的操作数汇编指令机器码功能字节数 机器周期A 外部数据存储器内容送A MOVX A ,@Ri (i=0,1) E2H E3H ((Ri))传至A 1 2 A 外部数据存储器内容送A MOVX A ,@DPTR E0H ((DPTR))传至A 1 2 @Ri 累加器内容送外部数据存储器 MOVX @Ri,A (i=0,1) F2H ,F3H A 传至(Ri) 1 2 DPTR 累加器内容送外部数据存储器 MOVX @DPTR,A F0H A 传至(DPTR) 1 2 A 以PC 为基址寄存器加变址寻址 MOVC A,@A+PC 83H ((A)+(PC))传至A 1 2 A以DPTR 为基址寄存器加变址寻址MOVC A,@A+DPTR93H((A)+(DPTR))传至A12目的操作数指令机器码 功能字节数 机器周期 A 内部RAM 或SFR 内容与累加器内容互换 XCH A,directC5H direct (A)←(direct) 2 1 A 寄存器内容与累加器内容互换 XCH A,Rn (n=1-7) 11001rrr (A)←(Rn) 1 1 A 内部RAM 内容与累加器内容互换XCH A,@Ri (i=0,1) 1100011i (A)←((Ri))1 1 A 内部RAM 低4位内容与累加器低4位内容互换XCHD A,@Ri (i=0,1) 1101011i (A)0∽3←((Ri))0∽3 1 1 A累加器高4位与低4位交换SWAP AC4H(A)0∽3←(A)4∽7111.4 逻辑运算指令ANL,ORL(按位进行)目的操作数指令机器码功能字节数机器周期逻辑与ANLA内容∧立即数ANL A ,#data54H A←(A)∧#data 2 1 A内容∧内部RAM或SFR当direct为端口地址P0∽P3时,操作数由端口锁存器读入。
ANL A,direct 55H A←(A)∧(direct) 2 1A内容∧寄存器内容ANL A,Rn(n=0∽7)58H∽5FH A←(A)∧(Rn) 1 1A内容∧内部RAM ANL A,@Ri(i=0,1)56H,57H A←(A)∧((Ri)) 1 1 内部RAM或SFR内容∧A内容当direct为端口地址P0∽P3时,这是一条“读-修改-写”指令,可用累加器A随时修改端口锁存器内容。
ANL direct,A52H direct←(direct)∧(A) 2 1内部RAM或SFR内容∧立即数当direct为端口地址P0∽P3时,这是一条“读-修改-写”指令,可令立即数修改端口锁存器内容。
ANL direct,#data53H direct←(direct)∧#data3 2逻辑或ORLA内容∨立即数ORL A ,#data44H A←(A)∨#data 2 1 A内容∨内部RAM或SFR ORL A,direct 45H A←(A)∨(direct) 2 1 A内容∨寄存器内容ORL A,Rn(n=0∽7)48H∽4FH A←(A)∨(Rn) 1 1A内容∨内部RAM ORL A,@Ri(i=0,1)46H,47H A←(A)∨((Ri)) 1 1 内部RAM或SFR内容∨A内容当direct为端口地址P0∽P3时,则为“读-修改-写”指令。
ORL direct,A42H direct←(direct)∨(A) 2 1内部RAM或SFR内容∨立即数当direct为端口地址P0∽P3时,则为“读-修改-写”指令。
ORL direct,#data43H direct←(direct)∨#data3 2续表1.4 逻辑运算指令XRL CLR CPL RL RLC RR RRC(按位进行)目的操作数指令机器码功能字节数机器周期逻辑异或XRLA内容⊕立即数XRL A ,#data64H A←(A)⊕#data 2 1 A内容⊕内部RAM或SFR XRL A,direct 65H A←(A)⊕(direct) 2 1 A内容⊕寄存器内容XRL A,Rn(n=0∽7)68H∽6FH A←(A)⊕(Rn) 1 1A内容⊕内部RAM XRL A,@Ri(i=0,1)66H,67H A←(A)⊕((Ri)) 1 1 内部RAM或SFR内容⊕A内容当direct为端口地址P0∽P3时,这是一条“读-修改-写”指令。
XRL direct,A62H direct←(direct)⊕(A) 2 1内部RAM或SFR内容⊕立即数当direct为端口地址P0∽P3时,这是一条“读-修改-写”指令。
XRL direct,#data63H direct←(direct)⊕#data3 2累加器A清零CLR A E4H A←00H 1 1 累加器内容按位取反CPL A F4H A←(A的反码) 1 1移位指令A内容循环左移一位RL A 23H 原A7移到A0 1 1 A内容+CY循环左移一位RLC A 33H 1 1A内容循环右移一位RR A03H 1 1A内容+CY循环右移一位RRC A 13H 1 11.5 控制转移指令LJMP AJMP SJMP JMP JZ JNZ CJNE目的操作数指令机器码功能字节数机器周期无条件转移长转移LJMP Addr16 02H Addr16 PC←Addr16 实现程序转移 3 1 绝对转移AJMP Addr11Addr10∽800001,Addr7∽0PC←(PC)+2PC10∽0←Addr10∽0,PC15∽11不变2 1短转移SJMP rel80H rel偏移量PC←(PC)+2+rel 2 1 间接长转移JMP @A+DPTR 73H PC←(A)+(DPTR) 1 11、rel偏移量是一个8位带符号补码数,范围为-128-+127,为正时向前转移,为负则向后转移。
2、JMP指令:累加器A中8位无符号数与DPTR的16位数相加,和送PC,控制程序转移。
指令不改变A和DPTR的内容。
条件转移A为零则转移JZ rel 60H rel PC←(PC)+2若(A)=0,则PC←(PC)+rel。
若(A)≠0,顺序执行2 2A非零则转移JNZ rel 70H rel PC←(PC)+2若(A)≠0,则PC←(PC)+rel。
若(A)=0,顺序执行2 2比较转移A内容与立即数比较CJNE A,#data,rel不相等则转移B4H data rel PC←(PC)+3若(A)>#data,则PC←(PC)+rel,CY=0。
若(A)<#data,则PC←(PC)+rel,CY=1。