好文档 - 专业文书写作范文服务资料分享网站

常用的汇编指令都有哪些?

天下 分享 时间: 加入收藏 我要投稿 点赞

常用的汇编指令都有哪些?

LEA (Load Effective Address) 有效地址送寄存器指令 LDS(Load DS with pointer) 指针送寄存器和DS指令 LES(Load ES with pointer) 指针送寄存器和ES指令 LAHF(Load AH with Flags) 标志位送AH指令 SAHF(Store AH into Flgs) AH送标志寄存器指令 PUSHF(PUSH the Flags) 标志进栈指令 POPF(POP the Flags) 标志出栈指令 ADD 加法指令 ADC 带进位加法指令 INC 加1指令

SUB(SUBtract) 不带借位的减法指令

SBB(SuVtrach with borrow) 带借位的减法指令 DEC(DECrement) 减1指领 NEG(NEGate) 求补指令 CMP(CoMPare) 比较指令

MUL(unsinged MULtiple) 无符号数乘法指令 IMUL(sIgned MUL tiple) 有符号数乘法指令 DIV(unsigned DIVide) 无符号数除法指令 IDIV(sIgned DIVide) 有符号数除法指令

1

CBW(Count Byte to Word) 字节转换为字指令 CWD(Count Word to Doble word) 字转换为双字指令 DAA 压缩的BCD码加法十进制调整指令 DAS 压缩的BCD码减法十进制调整指令 AAA 非压缩的BCD码加法十进制调整指令 AAS 非压缩的BCD码加法十进制调整指令 AND 逻辑与指令 OR 逻辑或指令 XOR 逻辑异或指令 NOT 逻辑非指令 TEST 测试指令

SHL(SHift logical Letf) 逻辑左移指令 SHR(SHift logical Right) 逻辑右移指令 ROL(Rotate Left ) 循环左移指令P58 ROR(Rotate Right) 循环右移指令P58

RCL(Rotate Left through Carry) 带进位循环左移 RCR(Rotate Right through Carry) 带进位循环左移 MOVS(MOVe String) 串传送指令 STOS(STOre into String) 存入串指令 LODS(LOad from string) 从串取指令 REP(REPeat) 重复操作前

CLD(CLear Direction flag) 清除方向标志指令

2

STD(SeT Direction flag) 设置方向标志指令 CMPS(CoMPare String) 串比较指令 SCAS(SCAn String) 串扫描指令

REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀

REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀

IN(INput) 输入指令 OUT(OUTput) 输出指令 JMP(JuMP) 无条件转移指令

JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令

LOOP 循环指令P70

LOOPZ/LOOPE 为零/相等时循环指令 LOOPNZ/LOOPNE 不为零/不相等时循环指令 CALL 子程序调用指令

RET(RETun) 子程序返回指令 CLC(CLear Carry) 进位位置0指令 CMC(CoMplement Carry) 进位位求反指令 SRC(SeT Carry) 进位位置1指令 NOP(No OPeretion) 无操作指令 HLT(HaLT) 停机指令

3

OFFSET 返回偏移地址 SEG 返回段地址 EQU(=) 等值语句 PURGE 解除语句

DUP 操作数字段用复制操作符 SEGMENT,ENDS 段定义指令 ASSUME 段地址分配指令 ORG 起始偏移地址设置指令 $ 地址计数器的当前值 PROC,ENDP 过程定义语句

NAME,TITLE,END 程序开始结束语句 MACRO,ENDM 宏定义指令 JZ OPR //结果为零转移 JNZ OPR //结果不为零转移 JS OPR //结果为负转移 JNS OPR //结果为正转移 JO OPR //溢出转移 JNO OPR //不溢出转移 JP OPR //结果为偶转移 JNP OPR //结果为奇转移 JC OPR //有进位转移 JNC OPR //无进位转移

4

汇编语言和CPU以及内存,端口等硬件知识是连在一起的. 这也是为什么汇编语言没有通用性的原因. 下面简单讲讲基本知识(针对INTEL x86及其兼容机)

============================

x86汇编语言的指令,其操作对象是CPU上的寄存器,系统内存,或者立即数. 有些指令表面上没有操作数, 或者看上去缺少操作数, 其实该指令有内定的操作对象, 比如push指令, 一定是对SS:ESP指定的内存操作, 而cdq的操作对象一定是eax / edx.

在汇编语言中,寄存器用名字来访问. CPU 寄存器有好几类, 分别有不同的用处:

1. 通用寄存器:

EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP(这个虽然通用,但很少被用做除了堆栈指针外的用途)

这些32位可以被用作多种用途,但每一个都有 专长 . EAX 是 累加器 (accumulator), 它是很多加法乘法指令的缺省寄存器. EBX 是 基地址 (base)寄存器, 在内存寻址时存放基地址. ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器. EDX是 (忘了..哈哈)但它总是被用来放整数除法产生的余数. 这4个寄存器的低16位可以被单独访问,分别用AX,BX,CX和DX. AX又可以单独访问低8位(AL)和高8位(AH), BX,CX,DX也类似. 函数的返回值经常被放在EAX中.

ESI/EDI分别叫做 源/目标索引寄存器 (source/destination

5

常用的汇编指令都有哪些?

常用的汇编指令都有哪些?LEA(LoadEffectiveAddress)有效地址送寄存器指令LDS(LoadDSwithpointer)指针送寄存器和DS指令LES(LoadESwithpointer)指针送寄存器和ES指令LAHF(LoadAHwithFlags)标志位送AH指令SAHF(StoreAHinto
推荐度:
点击下载文档文档为doc格式
35oyb595lh47le14lopx1jxus0hkxz00vxb
领取福利

微信扫码领取福利

微信扫码分享