微机原理全部指令用法
微机原理常用命令

一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。
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 程序结束.七、处理机控制指令:标志处理指令CLC(进位位置0指令)CMC(进位位求反指令)STC(进位位置为1指令)CLD(方向标志置1指令)STD(方向标志位置1指令)CLI(中断标志置0指令)STI(中断标志置1指令)NOP(无操作)HLT(停机)WAIT(等待)ESC(换码)LOCK(封锁)。
微机原理-常用指令用法

微机原理-常⽤指令⽤法序号指令功能和特点例程1 例程2 例程3 1 MOV 参与传送的操作数有:通⽤寄存器,段寄存器,存储单元,⽴即数四类。
有有互相之间只要不违背以下原则即可进⾏传送:1.源,⽬的操作数长度⼀致2.源,⽬的操作数不能同为存储单元3.CS不能作为⽬的操作数4.段寄存器只能通过通⽤寄存器或存储单元进⾏赋值。
5.⽴即数不能作为⽬的操作数。
2 PUSH ⼀定是字操作(不能PUSH字节)有PUSH AX,PUSH DS,PUSH [0000H] ;【POP对等】SP <‐ SP‐2,字存⼊SP指向的地址(⾼位在⾼地址)操作数可以为通⽤寄存器,段寄存器或存储单元,CS可PUSH不可POP3 POP 与PUSH对等4 XCHG Xchg dst,src可在通⽤寄存器间,通⽤寄存器和存储单元间进⾏。
不能⽤段寄存器和⽴即数。
XCHG [1200H],DXXCHG AL,CL5 XLAT 直接写出XLAT就⾏,在调⽤该指令前,需将BX初始化为数据表的⾸地址,AL初始化为希望取得的数据在数据表中的序号。
在调⽤该指令后,AL中的内容被赋值为DS:[BX][AL]的内容。
6 LEA LEA BX,1000H[SI],执⾏后BX = SI+1000H有LEA BX,TABLEMOV BX,OFFSET TABLE,以上两条等价7 LDS 指针送寄存器和DS指令LDS dst,src将SRC指定的连续4个存储单元的内容传送到DS和DST指向的寄存器,⾼字送到DS,低字送到DST假设DS=3200H,(33550H)=3A78H,(33552H)=1998HLDS SI,[1550H]后,SI = 3A78H,DS = 1998H8 LES 类同LDS,不同的是DS改成了ES9 SAHF 将AH的内容送标志寄存器的低8位10 LAHF 把标志寄存器的低8位送⼊AH11 PUSHF 将16位标志寄存器内容压⼊堆栈12 POPF 从堆栈弹出字数据送⼈标志寄存器13 ADD Dst可以为存储单元或通⽤寄存器有 Src可为存储单元,通⽤寄存器或⽴即数,不能同时为存储单元Add ax,1234hAdd [1234h],ax14 ADC Adc dst,srcDst = dst+src+cf15 INC Inc dstDst为通⽤寄存器或存储单元影响OF,SF,ZF,AF,PF,但不影响CF。
微机原理指令小结

8086CPU指令小结所有指令:(1)立即数不能作为目的操作数。
(2)不能在2个存储单元之间直接进行操作(串操作除外)。
(3)MOV指令和堆栈指令是惟一能对段寄存器进行操作的指令。
(4)源和目的操作数的数据类型必须匹配,都是8位,或都是16位。
(5)CS 、IP不能直接作为操作数。
(6)指令中至少要有一项明确说明传送的是字节还是字,如果没有,可通过PTR进行设置。
一、传送指令(1)6种指令:通用传送指令、堆栈操作指令、交换操作指令、I/O操作指令、目的地址传送指令和标志传送指令。
(2)对标志位的影响:除标志传送(SAHF、POPF)外,均不影响标志位。
(3)操作数表示方法:立即数——data,存储器单元地址——mem,寄存器——reg,段寄存器——segreg。
1. 通用传送指令:完成数据传送(1)指令格式:MOV OPRD1,OPRD2 ;[目的操作数OPRD1]←[源操作数OPRD2] (2)源OPRD2:data、mem、reg、segreg。
(3)目的OPRD1:mem、reg、segreg。
(4)通用传送指令MOV和堆栈指令是唯一允许以段寄存器(代码段寄存器CS和指令指针IP除外,即CS 、IP不能作为直接操作数)作为操作数的指令,不允许通过MOV 指令直接以立即数方式给段寄存器赋值,不允许直接在两个段寄存器之间直接进行传送。
(5)8位/16位操作。
2. 堆栈操作指令:将数据压入/弹出堆栈(1)指令格式:入栈:PUSH OPRD;先修改堆栈指针SP-2,然后将数据压入堆栈。
;SP =SP-1,[SP]=操作数高8位;SP =SP-1,[SP]= 操作数低8位。
出栈:POP OPRD;先将数据弹出堆栈,然后修改堆栈指针SP+2。
;(操作数低8位)←[SP],SP =SP+1;(操作数高8位)←[SP],SP =SP+1。
(2)操作数:mem、reg、segreg。
操作数不能是立即数data。
微机原理指令整理

类别指令类型指令名称指令缩写指令功能影响标志格式格式含义源操作数目的操作数传送指令通用传输指令基本传输指令MOV将源操作数中的数据传送至目的操作数,以实现寄存器与寄存器、寄存器与存储器之间数据传送以及立即数送往寄存器或存储器无1.MOV WORD PTR [2000],AX将AX送2000和2001单元(低位在低地址,高位在高地址,下同)至少有一个是寄存器(除立即数送存储器外);不能在两个存储单元之间直接传送数据;不能在两个段寄存器之间直接传送数据;不能将立即数直接送至段寄存器;SS和SP赋值必须紧邻指令指针IP既不作目的操作数也不做源操作数2.MOV AX,ES:[BX+SI+50]将ES段(BX+SI+50)字单元内容送AX3.MOV SS,BX 将BX内容送SS4.MOV ES,SS:[DI+200]将SS段(DI+200)字单元内容送ES5.MOV BX,CX 将CS内容送BX6.MOV WORD PTR[BX+DI],SS将SS内容送(BX+DI)字单元CS不能作目的操作数;立即数不能作目的操作数7.MOV CL,DH 将DH内容送CL8.MOV DI,[SI+100]将(SI+100)字单元内容送DI9.MOV WORD PTR [DI],DX将DX内容送(DI)字单元10.MOV CX,3330 立即数3330送微机原理指令整理 1微机原理指令整理2CX11.MOV BYTE PTR [DI],0立即数0送(DI)字节单元 堆栈操作指令PUSH将来自通用寄存器、段寄存器或存储单元的一个字(16位)内容压入堆栈(SP 指向的栈顶个单元)无1.PUSH AX AX 内容进栈 通用寄存器、段寄存器、存储单元的一个字CS 不能作目的操作数; 2.PUSH SISI 内容进栈 3.PUSH ESES 内容进栈 4.PUSH CSCS 内容进栈 5.PUSH WORD PTR [BX](BX)和(BX+1)单元内容进栈6.PUSH WORD PTR BETA [BX] (BX+BETA)字单元内容进栈 不能使用8位源或目的操作数 POP将栈顶个单元的内容退出(弹出)到通用寄存器、段寄存器或存储单元无1.POP BX栈顶2个字节出栈到BX 不能使用8位源或目的操作数 2.POP DX 栈顶2个字节出栈到DX 通用寄存器、段寄存器、存储单元的一个字节;CS 不能作目的操作数3.POP ES栈顶2个字节出栈到ES 4.POP SS栈顶2个字节出栈到SS 5.POP [BX+50]栈顶2个字节出栈到(BX+50)字单元6.POP [BP+DI]栈顶2个字节出栈到(BP+DI )字单元交换指令XCHG 实现数据宽度相同的源操作数与目的操作数之间的数据交换,亦即同为8位或16位的累加器与寄存器、寄存器与寄存器以及寄存器与存储单元之间的数据交换无1.XCHG AL,BLAL与BL之间字节交换段寄存器、CS、IP、立即数不能作为源或目的操作数;两个存储单元之间、段寄存器与段寄存器之间不能进行交换2.XCHG CX,AXCX与AX之间字交换3.XCHG DH,CLDH与CL之间字节交换4.XCHG BX,CXBX与CX之间字交换5.XCHG BL,[1000]BL与1000单元内容字节交换6.XCHG WORD PTR [DI],DX(DI)字单元内容与DX字交换专用累加器传送指令换码指令XLAT专门使用累加器AL并将其中的值(比如按二进制、十进制或十六进制等编码)变换成内存某一表格区内对应的另一种编码(比如发光二极管LED的字形码或其他通讯码等)无MOV BX,TABLE_SEGCODEXLAT设置SEGCODE表首址对表进行检索有操作码,无操作数。
微机原理指令表

基本传送指令MOV reg/mem, imm MOV reg/mem/seg, regMOV reg/seg, mem MOV reg/mem, seg入栈指令PUSH MEM/REG PUSH SEG出栈指令POP MEM/REG POP SEG交换指令:XCHG REG,MEM/REG查表指令:XLAT SRC_Table;(AL)←((BX)+(AL))端口输入指令IN AL,n IN AX,nIN AL,DX IN AX,DX端口输出指令OUT n,AL OUT n,AXOUT DX,AL OUT DX,AX取有效地址指令:LEA REG,MEM地址指针装入DS:LDS REG,MEM地址指针装入ES:LES REG,MEM标志装入AH指令:LAHF设置标志指令:SAHF标志入堆栈指令:PUSHF标志出堆栈指令:POPF不带进(借)位的加减法指令:ADD 目标,源;SUB 目标,源;带进(借)位的加减法指令:ADC 目标,源SBB 目标,源加法调整指令:非压缩BCD码-----AAA压缩BCD码-----DAA减法调整指令:非压缩BCD码-----AAS压缩BCD码-----DAS加1/减1指令INC/DEC 目标求补指令:NEG 目标比较指令:CMP 目标,源CWB:将AL的符号位扩展到AH中;CWD:将AX的符号位扩展到DX中;非指令:NOT 目标与指令:AND 目标,源或指令:OR 目标,源异或指令:XOR 目标,源逻辑测试指令:TEST 目标,源逻辑左移指令:SHL reg/mem,1/CL逻辑右移指令:SHR reg/mem,1/CL算术左移指令:SAL reg/mem,1/CL算术右移指令:SAR reg/mem,1/CL小循环左移:ROL REG/MEM,CNT小循环右移:ROR REG/MEM,CNT大循环左移:RCL REG/MEM,CNT大循环右移:RCR REG/MEM,CNT字符串传送指令MOVSB;[DS:SI] →[ES:DI],并修改指针SI=SI+1,DI=DI+1 (DF=0);SI=SI-1,DI=DI-1 (DF=1)MOVSW;[DS:SI] →[ES:DI],修改指针同上字符串比较指令CMPSB;[ES:DI]-[DS:SI] →FLAGS CMPSW;[ES:DI]-[DS:SI]→FLAGS,修改指针同上字符串搜索SCASB;AL—[ES:DI] →FLAGSSCASW;AX—[ES:DI] →FLAGS,修改指针同上字符串装入LODSB;[DS:SI] →ALLODSW;[DS:SI] →AX,修改指针同上字符串转储STOSB;[ES:DI] ←ALSTOSW;[ES:DI]←A X,修改指针同上重复前缀指令REP 重复执行其后的字符串指令,直到CX=0 REPE/ERPZ 当相等/为零时重复执行其后的字符串指令REPNE/REPNZ 当不相等/不为零时重复执行其后的字符串指令无条件转移指令:JMP XUL无符号数比较后根据其比较结果形成的条件转移指令JA/JNBE; 若目的操作数>源操作数则转移JAE/JNB; 若目的操作数≥源操作数则转移JB/JNAE; 若目的操作数< 源操作数则转移JBE/JNA; 若目的操作数≤源操作数则转移两个带符号数比较后根据其比较结果形成条件转移指令JG/JNLE; 若目的操作数>源操作数则转移JGE/JNL; 若目的操作数≥源操作数则转移JL/JNGE; 若目的操作数< 源操作数则转移JLE/JNG; 若目的操作数≤源操作数则转移根据CF、ZF、SF、OF、PF的状态形成的条件转移指令JE/JZ; ZF=1,结果为零时,转移JNE/JNZ;ZF=0,结果不为零时,转移JC;CF=1,有借(进)位,转移JNC;CF=0,无借(进)位,转移JO;OF=1,有溢出(带符号数)转移JNO;OF=0,无溢出(带符号数)转移JP/JPE;PF=1,结果为偶数个1转移JNP/JPO;PF=0,结果为奇数个1转移JS;SF=1,最高位为1转移JNS;SF=0,最高位为0转移循环指令LOOP;CX—1 →CX,若C X≠0循环LOOPZ/LOOPE;CX—1 →CX,若C X≠0且ZF=1循环LOOPNZ/LOOPNE;CX—1 →CX,若C X≠0且ZF=0循环JCXZ;若C X=0转移中断返回指令:IRET;进位标志清零指令:CLC进位标志置1指令:STC。
微机原理指令英文解释

1.通用数据传送指令MOV----> move MOVSX---->extended move with sign data MOVZX---->extended move with zero data PUSH---->pushPOP---->pop PUSHA---->push all POPA---->pop all PUSHAD---->push all data POPAD---->pop all data BSW AP---->byte swap XCHG---->exchang XLAT---->translate CMPXCHG---->compare and change XADD---->exchange and add 2.输入输出端口传送指令.IN---->input OUT---->output3.目的地址传送指令.LEA---->load effective address LDS---->load DS LES---->load ES LFS---->load FS LGS---->load GS LSS---->load SS4.标志传送指令.LAHF---->load AH from flag SAHF---->save AH to flagPUSHF---->push flag POPF---->pop flag PUSHD---->push dflag POPD---->pop dflag二、算术运算指令ADD---->add ADC---->add with carry INC---->increase 1AAA---->ascii add with adjust DAA---->decimal add with adjustSUB---->substract SBB---->substract with borrowDEC---->decrease 1 NEC---->negative CMP---->compareAAS---->ascii adjust on substract DAS---->decimal adjust on substractMUL---->multiplication IMUL---->integer multiplicationAAM---->ascii adjust on multiplication DIV---->divideIDIV---->integer divide AAD---->ascii adjust on divideCBW---->change byte to word CWD---->change word to double word CWDE---->change word to double word with sign to EAXCDQ---->change double word to quadrate word三、逻辑运算指令AND---->and OR---->or XOR---->xor NOT---->notTEST---->test SHL---->shift left SAL---->arithmatic shift leftSHR---->shift right SAR---->arithmatic shift rightROL---->rotate left ROR---->rotate rightRCL---->rotate left with carry RCR---->rotate right with carry四、串指令MOVS---->move string CMPS---->compare stringSCAS---->scan string LODS---->load string STOS---->store string REP---->repeat REPE---->repeat when equalREPZ---->repeat when zero flag REPNE---->repeat when not equal REPNZ---->repeat when zero flag REPC---->repeat when carry flag REPNC---->repeat when not carry flag五、程序转移指令1>无条件转移指令(长转移)JMP---->jump CALL---->call RET---->return RETF---->return far2>条件转移指令(短转移,-128到+127的距离内)JAE---->jump when above or equal JNB---->jump when not belowJB---->jump when below JNAE---->jump when not above or equal JBE---->jump when below or equal JNA---->jump when not above JG---->jump when greater JNLE---->jump when not less or equal JGE---->jump when greater or equal JNL---->jump when not lessJL---->jump when less JNGE---->jump when not greater or equalJLE---->jump when less or equal JNG---->jump when not greaterJE---->jump when equal JZ---->jump when has zero flagJNE---->jump when not equal JNZ---->jump when not has zero flag JC---->jump when has carry flag JNC---->jump when not has carry flag JNO---->jump when not has overflow flag JNP---->jump when not has parity flag JPO---->jump when parity flag is oddJNS---->jump when not has sign flag JO---->jump when has overflow flag JP---->jump when has parity flagJPE---->jump when parity flag is even JS---->jump when has sign flag 3>循环控制指令(短转移)LOOP---->loop LOOPE---->loop equal LOOPZ---->loop zero LOOPNE---->loop not equal LOOPNZ---->loop not zeroJCXZ---->jump when CX is zero JECXZ---->jump when ECX is zero 4>中断指令INT---->interrupt INTO---->overflow interruptIRET---->interrupt return5>处理器控制指令HLT---->halt W AIT---->wait ESC---->escape LOCK---->lock NOP---->no operation STC---->set carry CLC---->clear carry CMC---->carry make change STD---->set directionCLD---->clear direction STI---->set interrupt CLI---->clear interrupt 六、伪指令DW---->definw wordPROC---->procedureENDP---->end of procedureSEGMENT---->segmentASSUME---->assumeENDS---->end segmentEND---->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):数据段寄存器;堆栈段寄存器;(Stack Segment):SSES(Extra Segment):附加段寄存器。
微机原理指令大全

汇编语言指令大全——吉林大学无线电爱好者协会AAA未组合的十进制加法调整指令 AAA(ASCII Adgust for Addition) 格式: AAA功能: 对两个组合的十进制数相加运算(存在AL 中)的结果进行调整,产生一个未组合的十进制数放在AX 中.说明:1. 组合的十进制数和未组合的十进制数:在计算中,十进制数可用四位二进制数编码,称为BCD 码.当一个节(8位)中存放一位BCD 码,且放在字节的低4位, 高4位为时称为未组合的BCD 码. 2. AAA 的调整操作若(AL) and 0FH>9 或 AF=1,则调整如下:(AL)<--(AL)+6,(AH)<--(AH)+1,AF=1,CF<--AF,(AL)<--(AL) and 0FHAAD未组合十进制数除法调整指令 AAD(ASCII Adjust for Division) 格式: AAD功能: 在除法指令前对AX 中的两个未组合十进制数进行调整,以便能用DIV 指令实现两个未组合的十进制数的除法运算,其结果为未组合的十进制数,商(在AL 中)和余数(在AH 中).说明:1. AAD 指令是在执行除法DIV 之前使用的,以便得到二进制结果存于AL 中,然后除以OPRD,得到的商在AL 中,余数在AH 中.2. 示例: MOV BL,5 MOV AX,0308HAAD ;(AL)<--1EH+08H=26H,(AH)<--0 DIV BL ;商=07H-->(AL),余数=03H-->(AH).AAM 未组合十进制数乘法调整指令 AAM(ASCII Adjust MULtiply) 格式: AAM功能: 对两个未组合的十进制数相乘后存于AX 中的结果进行调整,产生一个未组合的十进制数存在AL 中.说明:1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整: 乘积: (AH)<--(AL)/10 (AL)<--(AL)MOD102. 本指令应跟在MUL 指令后使用,乘积的两位十进制结果,高位放在AH 中,低位放在AL 中.AH 内容是MUL 指令的结果被10除的商,即(AL)/10,而最后的AL 内容是乘积被10整除的余数(即个位数).AAS 未组合十进制减法调整指令 AAS(ASCII Adjust for Subtraction) 格式: AAS功能: 对两个未组合十进制数相减后存于AL 中的结果进行调整,调整后产生一个未组合的十进制数数且仍存于AL 中. 说明: 1. 本指令影响标志位CF 及AF. 2. 调整操作若(AL) and 0FH > 9 或 AF=1 则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,否则(AL)<--(AL) and 0FHADC带进位加法指令 ADC(Addition Carry) 格式: ADC OPRD1,OPRD2功能: OPRD1<--OPRD1 + OPRD2 + CF说明: 1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数.3. 加法指令运算的结果对CF 、SF 、OF 、PF 、ZF 、AF 都会有影响.以上标志也称为结果标志.4. 该指令对标志位的影响同ADD 指令.ADD加法指令 ADD(Addition) 格式: ADD OPRD1,OPRD2 功能: 两数相加说明:1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.3. 加法指令运算的结果对CF 、SF 、OF 、PF 、ZF 、AF 都会有影响.以上标志也称为结果标志.加法指令适用于无符号数或有符号数的加法运算.AND逻辑与运算指令 AND 格式: AND OPRD1,OPRD2功能: 对两个操作数实现按位逻辑与运算,结果送至目的操作数.本指令可以进行字节或字的‘与’运算, OPRD1<--OPRD1 and OPRD2.说明:1. 目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数,任一通用寄存器或存储器操作数.2. 示例: AND AL,0FH ;(AL)<--(AL) AND 0FHAND AX,BX ;(AX)<--(AX) AND (BX) AND DX,BUFFER[SI+BX] AND BETA[BX],00FFH注意: 两数相与,有一个数假则值为假CALL过程调用指令 CALL 格式: CALL OPRD 功能: 过程调用指令说明:1. 其中OPRD 为过程的目的地址.2. 过程调用可分为段内调用和段间调用两种.寻址方式也可以分为直接寻址和间接寻址两种.3. 本指令不影响标志位.CBW字节扩展指令 CBW(Convert Byte to Word) 格式: CBW功能: 将字节扩展为字,即把AL 寄存器的符号位扩展到AH 中.说明:1. 两个字节相除时,先使用本指令形成一个双字节长的被除数.2. 本指令不影响标志位.3. 示例: MOV AL,25 CBWIDIV BYTE PTR DATA1CLC处理器控制指令-标志位操作指令 格式: CLC ;置CF=0 STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反 CLD ;置DF=0 STD ;置DF =1CLI ;置IF=0,CPU 禁止响应外部中断 STI ;置IF=1,使CPU 允许向应外部中断 功能: 完成对标志位的置位、复位等操作.说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针.CLD处理器控制指令-标志位操作指令 格式: CLC ;置CF=0 STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反 CLD ;置DF=0 STD ;置DF =1CLI ;置IF=0,CPU 禁止响应外部中断 STI ;置IF=1,使CPU 允许向应外部中断 功能: 完成对标志位的置位、复位等操作.说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针.CLI处理器控制指令-标志位操作指令 格式: CLC ;置CF=0 STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反 CLD ;置DF=0说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针.STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1,使CPU允许向应外部中断功能: 完成对标志位的置位、复位等操作.CMC 处理器控制指令-标志位操作指令格式:CLC ;置CF=0STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反CLD ;置DF=0STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1,使CPU允许向应外部中断功能: 完成对标志位的置位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.CMP 比效指令 CMP(CoMPare)格式: CMP OPRD1,OPRD2功能: 对两数进行相减,进行比较. 说明:1. OPRD1为任意通用寄存器或存储器操作数.OPRD2为任意通用寄存器或存储器操作数,立即数也可用作源操作数OPRD2.2. 对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将OPRD1-OPRD2的结果送回OPRD1,而只是比较.3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.CMPS 字符串比较指令格式: CMPS OPRD1,OPRD2CMPSBCMPSW功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.同时SI,DI将自动调整. 说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.CMPSB 字符串比较指令格式: CMPS OPRD1,OPRD2CMPSB 说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.CMPSW功能: 由SI 寻址的源串中数据与由DI 寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身. 同时SI,DI 将自动调整.2. 本指令影响标志位AF 、CF 、OF 、SF 、PF 、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS 相似,CMPS 指令也可以不使用操作数,此时可用指令CMPSB 或CMPSW 分别表示字节串比较或字串比较.CMPSW字符串比较指令格式: CMPS OPRD1,OPRD2 CMPSB CMPSW功能: 由SI 寻址的源串中数据与由DI 寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身. 同时SI,DI 将自动调整.说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.2. 本指令影响标志位AF 、CF 、OF 、SF 、PF 、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS 相似,CMPS 指令也可以不使用操作数,此时可用指令CMPSB 或CMPSW 分别表示字节串比较或字串比较.CWD 字扩展指令 CWD(Convert Word to Double Word) 格式: CWD功能: 将字扩展为双字长,即把AX 寄存器的符号位扩展到DX 中.说明:1. 两个字或字节相除时,先用本指令形成一个双字长的的被除数.2. 本指令不影响标志位.3. 示例: 在B1、B2、B3字节类型变量中,分别存有8们带符号数a 、b 、c,实现(a*b+c)/a 运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一。
机械码,又称机器码.ultraedit 打开 ,编辑 exe 文件时你会看到许许多多的由 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 组成的数码,这些数码就是机器码。
修改程序时必须通过修改机器码来修改 exe 文件 .二.需要熟练掌握的全部汇编知识(只有这么多)不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了cmp a,b 比较 a 与 bmov a,b 把 b 的值送给 aret 返回主程序nop无作用,英文”no OPeration的简写,意思是“ do no th ing机器码90)***机器码的含义参看上面(解释:UItraedit打开编辑exe文件时你看到90,等同于汇编语句 nOP)call 调用子程序je 或 jz 若相等则跳 (机器码 74 或 0F84)jne或jnz若不相等则跳(机器码75或0F85)jmP 无条件跳(机器码 EB)jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳PoP 出栈Push 压栈三.常见修改(机器码)74=〉75 74=>90 74=>EB75=〉74 75=〉90 75=>EBjnz—〉noP75—>90(相应的机器码修改)jnz -> jmP75 —〉 EB(相应的机器码修改)jnz -> jz75->74 (正常) 0F 85 —> 0F 84(特殊情况下,有时,相应的机器码修改)四.两种不同情况的不同修改方法1. 修改为 jmPje(jne,jz,jnz) =>jmP 相应的机器码 EB (出错信息向上找到的第一个跳转) jmP 的作用是绝对跳,无条件跳,从而跳过下面的出错信息XXXXXXXXXXXX 出错信息,例如:注册码不对,sorry,未注册版不能…,” FUnCtion Not AVaible in Demo ”或 " Comma nd Not AVaibIe 或’” Ca n' t SaVe in ShareWare/Dem等(我们希望把它跳过,不让它出现)XXXXXXXXXXXX 正确路线所在2. 修改为 nopje(jne,jz,jnz) =〉nop 相应的机器码 90 (正确信息向上找到的第一个跳转) nop 的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处XXXXXXXXXXXX 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)XXXXXXXXXXXX 出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据 .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 ;把段地址 :偏移地址存到 ESI. LFS 传送目标指针 ,把指针内容装入 FS。
例: LFS DI,string ;把段地址:偏移地址存到 FSI。
LGS 传送目标指针 ,把指针内容装入 GS。
例: LGS DI,string ;把段地址:偏移地址存到 GSI。
LSS 传送目标指针,把指针内容装入 SS。
例: LSS DI,string ;把段地址 :偏移地址存到 SSI。
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 源串段寄存器 :源串变址 . ESI 目标串段寄存器:目标串变址。
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/ECX0 时重复 .REPE/REPZ 当 ZF=1 或比较结果相等,且 CX/ECX0 时重复 . REPNE/REPNZ 当 ZF=0 或比较结果不相等,且 CX/ECX0 时重复。
REPC 当 CF=1 且 CX/ECX0 时重复 .REPNC 当 CF=0 且 CX/ECX0 时重复 .五、程序转移指令1〉无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF 过程返回 .2>条件转移指令(短转移,—128 到+127 的距离内)(当且仅当(SF XoR 0F)=1时,0P1循环控制指令(短转移) LOOP CX 不为零时循环。
L00PE/L00PZ CX 不为零且标志 Z=1 时循环.L00PNE/L00PNZ CX 不为零且标志 Z=0 时循环 .JCXZ CX 为零时转移 .JECXZ ECX 为零时转移 .4>中断指令INT 中断指令INT0 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停,直到出现中断或复位信号才继续 .WAIT 当芯片引线 TEST 为高电平时使 CPU 进入等待状态 ESC 转换到外处理器。
L0CK 封锁总线 .N0P 空操作。
STC 置进位标志位 .CLC 清进位标志位 .CMC 进位标志取反 .STD 置方向标志位 .CLD 清方向标志位。
STI 置中断允许位 .CLI 清中断允许位。
六、伪指令DW 定义字(2 字节 ).PR0C 定义过程。
ENDP 过程结束 . SEGMENT 定义段 .ASSUME 建立段寄存器寻址。
ENDS 段结束。
END 程序结束。