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

一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。
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(封锁)。
微机原理 指令大全

MOV(MOVe)传送指令P86PUSH入栈指令P86POP出栈指令P87XCHG(eXCHanG)交换指令P88XLAT(TRANSLATE)换码指令P89LEA (Load Effective Address)有效地址送寄存器指令P89 LDS(Load DS with pointer)指针送寄存器和DS指令P90 LES(Load ES with pointer)指针送寄存器和ES指令P90 LAHF(Load AH with Flags)标志位送AH指令P91SAHF(Store AH into Flgs) AH送标志寄存器指令P91 PUSHF(PUSH the Flags)标志进栈指令P91POPF(POP the Flags)标志出栈指令P91ADD加法指令P92ADC带进位加法指令P92INC加1指令P92SUB(SUBtract)不带借位的减法指令P93SBB(SuVtrach with borrow)带借位的减法指令P93DEC(DECrement)减1指领P93NEG(NEGate)求补指令P93CMP(CoMPare)比较指令P93MUL(unsinged MULtiple)无符号数乘法指令P93IMUL(sIgned MUL tiple)有符号数乘法指令P93DIV(unsigned DIVide)无符号数除法指令P94IDIV(sIgned DIVide)有符号数除法指令P94CBW(Count Byte to Word)字节转换为字指令P94CWD(Count Word to Doble word)字转换为双字指令P94 DAA压缩的BCD码加法十进制调整指令P95DAS压缩的BCD码减法十进制调整指令P95AAA非压缩的BCD码加法十进制调整指令P95AAS非压缩的BCD码加法十进制调整指令P95 AAM,AAD AND逻辑与指令P96OR逻辑或指令P96XOR逻辑异或指令P96NOT逻辑非指令P96TEST测试指令P96SHL(SHift logical Letf)逻辑左移指令P97SHR(SHift logical Right)逻辑右移指令P97SALSARROL(Rotate Left )循环左移指令P98ROR(Rotate Right)循环右移指令P98RCL(Rotate Left through Carry)带进位循环左移P98 RCR(Rotate Right through Carry)带进位循环左移P98 MOVS(MOVe String)串传送指令P100STOS(STOre into String)存入串指令P102LODS(LOad from string)从串取指令P102REP(REPeat)重复操作前缀P99CLD(CLear Direction flag)清除方向标志指令107STD(SeT Direction flag)设置方向标志指令107CMPS(CoMPare String)串比较指令100SCAS(SCAn String)串扫描指令101REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀99REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀99IN(INput)输入指令88OUT(OUTput)输出指令88JMP(JuMP)无条件转移指令103JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ条件转移指令103LOOP循环指令105LOOPZ/LOOPE为零/相等时循环指令105LOOPNZ/LOOPNE不为零/不相等时循环指令105CALL子程序调用指令106RET(RETun)子程序返回指令106CLC(CLear Carry)进位位置0指令107CMC(CoMplement Carry)进位位求反指令107SRC(SeT Carry)进位位置1指令NOP(No OPeretion)无操作指令 107HLT(HaLT)停机指令107OFFSET返回偏移地址 141SEG返回段地址141 TYPE SIZE LENGTH 142EQU(=)等值语句128PURGE解除语句128DUP操作数字段用复制操作符127SEGMENT,ENDS段定义指令129ASSUME段地址分配指令130ORG起始偏移地址设置指令132$地址计数器的当前值PROC,ENDP过程定义语句131NAME,TITLE,END程序开始结束语句131,132MACRO,ENDM宏定义指令147STRUC,ENDS 133PUBLIC,EXTRN 136EVEN 138MOD 139IF, END IF 138EQ, NE,LT,GT,LE,GE 140THIS SHORT HIGH LOW 144INT 20H INT 21H 153Welcome 欢迎您的下载,资料仅供参考!。
微机原理-常用指令用法

微机原理-常⽤指令⽤法序号指令功能和特点例程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。
微机原理指令表和解释

LODSB;(字节传送)AL DS:[SI] SI [SI+-1]
LODSW;(字传送)AL DS:[SI] SI [SI+-2]
存串指令
STOSB;(字节传送)ES:[DI] AL DI [DI+-1]
STOSW;(字传送)ES:[DI] AX DI [DI+-2]
串比较指令
CMPSB;(字节传送)DS:[SI]- ES:[DI] SI [SI+-1] DI [DI+-1]
空操作指令nop做空操作用于延时暂停指令hlt程序暂停执行等待指令waitcpu引脚为高电平时执行封锁指令lock总线封锁cpu独占总线指令交权指令esc
1.传送类指令
MOV DEST,SRC;DEST(除CS)SRC
2.交换指令
XCHG DEST,SRC;DEST(寄存器)SRC
3.堆栈操作指令
PUCH SRC;SP SP-2将16位源操作数压入堆栈
AAA;加法运算十进制调整
AAS;减法运算十进制调整
10.逻辑指令
AND DEST,SRC;DEST DEST&&SRC
OR DEST,SRC;DEST DEST||SRC
NOT DEST;NOT!NOT
XOR DEST,SRC;DESTDEST异或SRC
测试指令
TEST DEST,SRC;将DEST&&SRC结果不送回DEST
REPNZ;每执行依次串指令CX(CX)-1 CX=0或ZF=1重复执行结束
14.无条件转移类指令
JMP DEST;无条件转移到DEST所指定的地址
15.循环指令
LOOP DEST;CXCX)-1直至CX=0结束循环
微机原理指令整理

类别指令类型指令名称指令缩写指令功能影响标志格式格式含义源操作数目的操作数传送指令通用传输指令基本传输指令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表首址对表进行检索有操作码,无操作数。
微机原理指令汇总

我现将指令系统中各种助记符得英文全名写出来,各种助记符得记忆就会变得很简单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):附加段寄存器。
微机原理指令范文

微机原理指令范文1.指令的定义和分类指令是计算机执行其中一种特定操作的命令。
在微机原理中,指令可以分为几类:数据传送指令、算术运算指令、逻辑运算指令、移位指令、控制转移指令和输入/输出指令。
2.数据传送指令数据传送指令用于将数据从一个地方传送到另一个地方。
常见的传送指令有:MOV(将数据从一个寄存器复制到另一个寄存器)、LDR(将数据从存储器加载到寄存器)、STR(将数据从寄存器存储到存储器)等。
3.算术运算指令算术运算指令用于执行加、减、乘、除等算术运算。
常见的算术运算指令有:ADD(将两个操作数相加)、SUB(将两个操作数相减)、MUL(将两个操作数相乘)、DIV(将两个操作数相除)等。
4.逻辑运算指令逻辑运算指令用于执行逻辑运算,如与、或、非等。
常见的逻辑运算指令有:AND(将两个操作数进行与运算)、OR(将两个操作数进行或运算)、NOT(将操作数取反)等。
5.移位指令移位指令用于将数据在寄存器中进行左移或右移操作。
常见的移位指令有:LSL(将操作数左移指定的位数)、LSR(将操作数右移指定的位数)等。
6.控制转移指令控制转移指令用于改变程序的执行顺序。
常见的控制转移指令有:JMP(无条件跳转到指定地址)、JZ(当零标志位为真时跳转到指定地址)、JC(当进位标志位为真时跳转到指定地址)等。
7.输入/输出指令输入/输出指令用于与外部设备进行数据交换。
常见的输入/输出指令有:IN(将外部设备的数据读取到寄存器中)、OUT(将寄存器中的数据输出到外部设备中)等。
每个指令都包含操作码和操作数两个部分。
操作码确定指令的操作类型,而操作数则指定了操作的数据。
指令由字节或字(16位)组成,具体的格式和编码方式可以根据不同的微机架构而有所不同。
在微机中,指令是由控制单元根据程序计数器的值读取的。
程序计数器用于存储下一条执行的指令的地址。
控制单元会将指令传递给执行单元进行执行,并根据指令的操作码和操作数执行相应的操作。
微机原理指令英文解释

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。
- 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 nothing”(机器码90)***机器码的含义参看上面(解释:ultraedit打开编辑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” 或”Command Not Avaible” 或”Can’t save in Shareware/Demo”等(我们希望把它跳过,不让它出现)。
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依次弹出堆栈.BSW AP 交换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 OF)=1时,OP1循环控制指令(短转移) 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 程序结束.。