波里个浪 發表於 2022-11-13 12:29:00

汇编语言(Assembly Language)指令表

<p><strong>汇编指令英文全称</strong></p>
<h2 id="1通用数据传送指令">1.通用数据传送指令</h2>
<p>MOV----&gt; move<br>
MOVdest,src ;dest←src<br>
MOV 指令把一个字节或字的操作数从源地址src传送至目的地址dest。<br>
MOVSX----&gt;extended move with signdata<br>
MOVZX----&gt;extended move with zerodata<br>
PUSH----&gt;push<br>
POP----&gt;pop<br>
进栈出栈指令</p>
<p>PUSHA----&gt;pushall<br>
POPA----&gt;pop all<br>
PUSHAD----&gt;push all data<br>
POPAD----&gt;popall data<br>
BSWAP----&gt;byteswap<br>
XCHG----&gt;exchange</p>
<p><strong>交换指令用来将源操作数和目的操作数内容交换,操作数可以是字、也可以是字节,可以在</strong><br>
<strong>通用寄存器与通用寄存器或存储器之间对换数据,但不能在存储器与存储器之间对换数据。</strong><br>
movax,1234h ;ax=1234h<br>
mov bx,5678h ;bx=5678h<br>
xchgax,bx;ax=5678h,bx=1234h<br>
xchg ah,al ;ax=7856h<br>
CMPXCHG----&gt;compare andchange<br>
XADD----&gt;exchange and add<br>
XLAT----&gt;translate</p>
<p><strong>换码指令用于将BX指定的缓冲区中、AL指定的位移处的数据取出赋给AL。</strong></p>
<h2 id="2输入输出端口传送指令">2.输入输出端口传送指令</h2>
<p>IN----&gt;input<br>
OUT----&gt;output</p>
<h2 id="3目的地址传送指令">3.目的地址传送指令</h2>
<p>LEA----&gt;loadeffective addres<br>
有效地址传送指令<br>
mov bx,0400h<br>
mov si,3ch<br>
leabx, ;BX=139EH<br>
这里BX得到的是主存单元的有效地址,不是物理地址,也不是该单元的内容。<br>
LDS----&gt;load DS<br>
LES----&gt;loadES<br>
LFS----&gt;load FS<br>
LGS----&gt;load GS<br>
LSS----&gt;loadSS</p>
<h2 id="4标志传送指令">4.标志传送指令</h2>
<p>LAHF----&gt;load AH from flag<br>
SAHF----&gt;save AH toflag<br>
PUSHF----&gt;push flag<br>
POPF----&gt;pop flag<br>
PUSHD----&gt;pushdflag<br>
POPD----&gt;pop dflag</p>
<h3 id="一算术运算指令">一、算术运算指令</h3>
<p>ADD----&gt;add<br>
加法指令moval,0fbh ;al=0fbh<br>
add al,07h ;al=02h<br>
ADC----&gt;add withcarry<br>
INC----&gt;increase 1<br>
AAA----&gt;ascii add withadjust<br>
DAA----&gt;decimal add withadjust<br>
SUB----&gt;substract<br>
SBB----&gt;substract withborrow<br>
DEC----&gt;decrease1<br>
NEC----&gt;negative<br>
CMP----&gt;compare<br>
AAS----&gt;ascii adjust onsubstract<br>
DAS----&gt;decimal adjust onsubstract<br>
MUL----&gt;multiplication<br>
IMUL----&gt;integermultiplication<br>
AAM----&gt;ascii adjust onmultiplication<br>
DIV----&gt;divide<br>
IDIV----&gt;integerdivide<br>
AAD----&gt;ascii adjust on divide<br>
CBW----&gt;change byte toword<br>
CWD----&gt;change word to double word<br>
CWDE----&gt;change word todouble word with sign to EAX<br>
CDQ----&gt;change double word to quadrateword</p>
<h3 id="二逻辑运算指令">二、逻辑运算指令</h3>
<p>AND----&gt;and<br>
or----&gt;or<br>
XOR----&gt;xor<br>
NOT----&gt;not<br>
TEST----&gt;test<br>
SHL----&gt;shiftleft<br>
SAL----&gt;arithmatic shift left<br>
SHR----&gt;shiftright<br>
SAR----&gt;arithmatic shift right<br>
ROL----&gt;rotateleft<br>
ROR----&gt;rotate right<br>
RCL----&gt;rotate left withcarry<br>
RCR----&gt;rotate right with carry</p>
<h3 id="三串指令">三、串指令</h3>
<p>MOVS----&gt;movestring<br>
CMPS----&gt;compare string<br>
SCAS----&gt;scanstring<br>
LODS----&gt;load string<br>
STOS----&gt;storestring<br>
REP----&gt;repeat<br>
REPE----&gt;repeat whenequal<br>
REPZ----&gt;repeat when zero flag<br>
REPNE----&gt;repeat when notequal<br>
REPNZ----&gt;repeat when zero flag<br>
REPC----&gt;repeat when carryflag<br>
REPNC----&gt;repeat when not carryflag</p>
<h3 id="四程序转移指令">四、程序转移指令</h3>
<h4 id="1无条件转移指令长转移">1&gt;无条件转移指令(长转移)</h4>
<p>JMP----&gt;jump<br>
CALL----&gt;call<br>
RET----&gt;return<br>
RETF----&gt;returnfar</p>
<h4 id="2条件转移指令短转移-128-到127-的距离内">2&gt;条件转移指令(短转移,-128 到+127 的距离内)</h4>
<p>JAE----&gt;jump when above orequal<br>
JNB----&gt;jump when not below<br>
JB----&gt;jump whenbelow<br>
JNAE----&gt;jump when not above or equal<br>
JBE----&gt;jump when belowor equal<br>
JNA----&gt;jump when not above<br>
JG----&gt;jump whengreater<br>
JNLE----&gt;jump when not less or equal<br>
JGE----&gt;jump whengreater or equal<br>
JNL----&gt;jump when not less<br>
JL----&gt;jump whenless<br>
JNGE----&gt;jump when not greater or equal<br>
JLE----&gt;jump when lessor equal<br>
JNG----&gt;jump when not greater<br>
JE----&gt;jump whenequal<br>
JZ----&gt;jump when has zero flag<br>
JNE----&gt;jump when notequal<br>
JNZ----&gt;jump when not has zero flag<br>
JC----&gt;jump when has carryflag<br>
JNC----&gt;jump when not has carry flag<br>
JNO----&gt;jump when not hasoverflow flag<br>
JNP----&gt;jump when not has parity flag<br>
JPO----&gt;jumpwhen parity flag is odd<br>
JNS----&gt;jump when not has signflag<br>
JO----&gt;jump when has overflow flag<br>
JP----&gt;jump when has parityflag<br>
JPE----&gt;jump when parity flag is even<br>
JS----&gt;jump when has signflag</p>
<h4 id="3循环控制指令短转移">3&gt;循环控制指令(短转移)</h4>
<p>LOOP----&gt;loop<br>
LOOPE----&gt;loopequal<br>
LOOPZ----&gt;loop zero<br>
LOOPNE----&gt;loop notequal<br>
LOOPNZ----&gt;loop not zero<br>
JCXZ----&gt;jump when CX iszero<br>
JECXZ----&gt;jump when ECX iszero</p>
<h4 id="4中断指令">4&gt;中断指令</h4>
<p>INT----&gt;interrupt<br>
INTO----&gt;overflowinterrupt<br>
IRET----&gt;interruptreturn</p>
<h4 id="5处理器控制指令">5&gt;处理器控制指令</h4>
<p>HLT----&gt;halt<br>
WAIT----&gt;wait<br>
ESC----&gt;escape<br>
LOCK----&gt;lock<br>
NOP----&gt;nooperation<br>
STC----&gt;set carry<br>
CLC----&gt;clear carry<br>
CMC----&gt;carrymake change<br>
STD----&gt;set direction<br>
CLD----&gt;cleardirection<br>
STI----&gt;set interrupt<br>
CLI----&gt;clearinterrupt</p>
<h3 id="五伪指令">五、伪指令</h3>
<p>DW----&gt;definwword<br>
PROC----&gt;procedure<br>
ENDP----&gt;end ofprocedure<br>
SEGMENT----&gt;segment<br>
ASSUME----&gt;assume<br>
ENDS----&gt;endsegment<br>
END----&gt;end<br>
汇编指令中文释义<br>
数据传输指令</p>
<p>它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.</p>
<h2 id="1--通用数据传送指令">\1.通用数据传送指令.</h2>
<p>MOV 传送字或字节.<br>
MOVSX 先符号扩展,再传送.<br>
MOVZX 先零扩展,再传送.<br>
PUSH把字压入堆栈.<br>
POP 把字弹出堆栈.<br>
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈.<br>
POPA把DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈.<br>
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.<br>
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈.<br>
BSWAP 交换32位寄存器里字节的顺序<br>
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)<br>
CMPXCHG 比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX )<br>
XADD 先交换再累加.( 结果在第一个操作数里)<br>
XLAT 字节查表转换.</p>
<p>──BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( -&gt;AL)</p>
<h2 id="2-输入输出端口传送指令">\2. 输入输出端口传送指令.</h2>
<p>IN I/O 端口输入. ( 语法: IN 累加器, {端口号│DX} )<br>
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)<br>
输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX指定时,<br>
其范围是0-65535.</p>
<h2 id="3-目的地址传送指令">\3. 目的地址传送指令.</h2>
<p>LEA 装入有效地址.<br>
例: LEA DX,string;把偏移地址存到DX.<br>
LDS 传送目标指针,把指针内容装入DS.<br>
例: LDS SI,string;把段地址:偏移地址存到DS:SI.<br>
LES 传送目标指针,把指针内容装入ES.<br>
例: LES DI,string;把段地址:偏移地址存到ES:DI.<br>
LFS 传送目标指针,把指针内容装入FS.<br>
例: LFS DI,string;把段地址:偏移地址存到FS:DI.<br>
LGS 传送目标指针,把指针内容装入GS.<br>
例: LGS DI,string;把段地址:偏移地址存到GS:DI.<br>
LSS 传送目标指针,把指针内容装入SS.<br>
例: LSS DI,string;把段地址:偏移地址存到SS:DI.</p>
<h2 id="4-标志传送指令">\4. 标志传送指令.</h2>
<p>LAHF 标志寄存器传送,把标志装入AH.<br>
SAHF 标志寄存器传送,把AH内容装入标志寄存器.<br>
PUSHF 标志入栈.<br>
POPF 标志出栈.<br>
PUSHD 32 位标志入栈.<br>
POPD 32位标志出栈.</p>
<h3 id="一算术运算指令-1">一、算术运算指令</h3>
<p>ADD 加法.<br>
ADC 带进位加法.<br>
INC 加1.<br>
AAA加法的ASCII 码调整.<br>
DAA 加法的十进制调整.<br>
SUB 减法.<br>
SBB 带借位减法.<br>
DEC 减1.<br>
NEC 求反(以0减之).<br>
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).<br>
AAS 减法的ASCII 码调整.<br>
DAS减法的十进制调整.<br>
MUL 无符号乘法.<br>
IMUL 整数乘法.<br>
以上两条,结果回送AH 和AL(字节运算),或DX和AX(字运算),<br>
AAM 乘法的ASCII 码调整.<br>
DIV 无符号除法.<br>
IDIV整数除法.<br>
以上两条,结果回送:<br>
商回送AL,余数回送AH, (字节运算);<br>
或商回送AX,余数回送DX, (字运算).<br>
AAD除法的ASCII 码调整.<br>
CBW 字节转换为字. (把AL 中字节的符号扩展到AH 中去)<br>
CWD 字转换为双字. (把AX中的字的符号扩展到DX 中去)<br>
CWDE 字转换为双字. (把AX 中的字符号扩展到EAX 中去)<br>
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX 中去)</p>
<h3 id="二逻辑运算指令-1">二、逻辑运算指令</h3>
<p>AND 与运算.<br>
or 或运算.<br>
XOR异或运算.<br>
NOT 取反.<br>
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).<br>
SHL 逻辑左移.<br>
SAL算术左移.(=SHL)<br>
SHR 逻辑右移.<br>
SAR 算术右移.(=SHR) 当值为负时,高位补1 ;当值为正时,高位补0<br>
ROL循环左移.<br>
ROR 循环右移.<br>
RCL 通过进位的循环左移.<br>
RCR 通过进位的循环右移.<br>
以上八种移位指令,其移位次数可达255次.<br>
移位一次时, 可直接用操作码. 如SHL AX,1.<br>
移位&gt;1 次时, 则由寄存器CL 给出移位次数.<br>
如MOVCL,04<br>
SHL AX,CL</p>
<h3 id="三串指令-1">三、串指令</h3>
<p>DS:SI 源串段寄存器:源串变址.<br>
ES:DI目标串段寄存器:目标串变址.<br>
CX 重复次数计数器.<br>
AL/AX 扫描值.<br>
D 标志0 表示重复操作中SI 和DI 应自动增量; 1表示应自动减量.<br>
Z 标志用来控制扫描或比较操作的结束.<br>
MOVS 串传送.<br>
( MOVSB 传送字符. MOVSW 传送字. MOVSD传送双字. )<br>
CMPS 串比较.<br>
( CMPSB 比较字符. CMPSW 比较字. )<br>
SCAS 串扫描.<br>
把AL 或AX的内容与目标串作比较,比较结果反映在标志位.<br>
LODS 装入串.<br>
把源串中的元素(字或字节)逐一装入AL 或AX 中.<br>
( LODSB传送字符. LODSW 传送字. LODSD 传送双字. )<br>
STOS 保存串.<br>
是LODS 的逆过程.<br>
REP当CX/ECX&lt;&gt;0 时重复.<br>
REPE/REPZ 当ZF=1 或比较结果相等,且CX/ECX&lt;&gt;0时重复.<br>
REPNE/REPNZ 当ZF=0 或比较结果不相等,且CX/ECX&lt;&gt;0 时重复.<br>
REPC 当CF=1且CX/ECX&lt;&gt;0 时重复.<br>
REPNC 当CF=0 且CX/ECX&lt;&gt;0时重复.</p>
<h3 id="四程序转移指令-1">四、程序转移指令</h3>
<h4 id="1无条件转移指令长转移-1">1&gt;无条件转移指令(长转移)</h4>
<p>JMP 无条件转移指令<br>
CALL过程调用<br>
RET/RETF 过程返回.</p>
<h4 id="2条件转移指令短转移-128-到127-的距离内-1">2&gt;条件转移指令(短转移,-128 到+127 的距离内)</h4>
<p>( 当且仅当(SF XOROF)=1 时,OP1 JA/JNBE 不小于或不等于时转移.<br>
JAE/JNB 大于或等于转移.<br>
JB/JNAE 小于转移.<br>
JBE/JNA小于或等于转移.<br>
以上四条,测试无符号整数运算的结果(标志C 和Z).<br>
JG/JNLE 大于转移.<br>
JGE/JNL大于或等于转移.<br>
JL/JNGE 小于转移.<br>
JLE/JNG 小于或等于转移.<br>
以上四条,测试带符号整数运算的结果(标志S,O和Z).<br>
JE/JZ 等于转移.<br>
JNE/JNZ 不等于时转移.<br>
JC 有进位时转移.<br>
JNC 无进位时转移.<br>
JNO不溢出时转移.<br>
JNP/JPO 奇偶性为奇数时转移.<br>
JNS 符号位为"0" 时转移.<br>
JO 溢出转移.<br>
JP/JPE奇偶性为偶数时转移.<br>
JS 符号位为"1" 时转移.</p>
<h4 id="3循环控制指令短转移-1">3&gt;循环控制指令(短转移)</h4>
<p>LOOP CX不为零时循环.<br>
LOOPE/LOOPZ CX 不为零且标志Z=1 时循环.<br>
LOOPNE/LOOPNZ CX 不为零且标志Z=0时循环.<br>
JCXZ CX 为零时转移.<br>
JECXZ ECX 为零时转移.</p>
<h4 id="4中断指令-1">4&gt;中断指令</h4>
<p>INT 中断指令<br>
INTO溢出中断<br>
IRET 中断返回</p>
<h4 id="5处理器控制指令-1">5&gt;处理器控制指令</h4>
<p>HLT 处理器暂停, 直到出现中断或复位信号才继续.<br>
WAIT当芯片引线TEST 为高电平时使CPU 进入等待状态.<br>
ESC 转换到外处理器.<br>
LOCK 封锁总线.<br>
NOP 空操作.<br>
STC置进位标志位.<br>
CLC 清进位标志位.<br>
CMC 进位标志取反.<br>
STD 置方向标志位.<br>
CLD 清方向标志位.<br>
STI置中断允许位.<br>
CLI 清中断允许位.</p>
<h3 id="五伪指令-1">五、伪指令</h3>
<p>DW 定义字(2 字节).<br>
PROC 定义过程.<br>
ENDP过程结束.<br>
SEGMENT 定义段.<br>
ASSUME 建立段寄存器寻址.<br>
ENDS 段结束.<br>
END程序结束.<br>
汇编语言中常用寄存器的英文缩写:<br>
AH&amp;AL=AX(accumulator):累加寄存器<br>
BH&amp;BL=BX(base):基址寄存器<br>
CH&amp;CL=CX(count):计数寄存器<br>
DH&amp;DL=DX(data):数据寄存器<br>
SP(StackPointer):堆栈指针寄存器<br>
BP(Base Pointer):基址指针寄存器<br>
SI(SourceIndex):源变址寄存器<br>
DI(Destination Index):目的变址寄存器<br>
IP(InstructionPointer):指令指针寄存器<br>
CS(Code Segment)代码段寄存器<br>
DS(DataSegment):数据段寄存器<br>
SS(Stack Segment):堆栈段寄存器<br>
ES(Extra Segment):附加段寄存器<br>
OFoverflow flag 溢出标志操作数超出机器能表示的范围表示溢出,溢出时为1.<br>
SF sign Flag符号标志记录运算结果的符号,结果负时为1.<br>
ZF zero flag 零标志运算结果等于0 时为1,否则为0.<br>
CF carry flag进位标志最高有效位产生进位时为1,否则为0.<br>
AF auxiliary carry flag 辅助进位标志运算时,第3 位向第4位产生进位时为1,否则为0.<br>
PF parity flag 奇偶标志运算结果操作数位为1 的个数为偶数个时为1,否则为0.<br>
DF direcionflag 方向标志用于串处理.DF=1 时,每次操作后使SI 和DI 减小.DF=0 时则增大.<br>
IF interrupt flag 中断标志IF=1时,允许CPU 响应可屏蔽中断,否则关闭中断.<br>
TF trap flag 陷阱标志用于调试单步操作.</p>
<p>**DB=Declare Byte一个字节<br>
DW=DeclareWord 两个字节<br>
DD=DeclareDouble Word 四个字节<br>
DQ=Declare Quad Word八个字节</p>
<p>伪指令:PseudoInstruction**</p><br><br>
来源:https://www.cnblogs.com/remixnameless/p/16885771.html
頁: [1]
查看完整版本: 汇编语言(Assembly Language)指令表