SHL/SAL一样:逻辑/算术左移,最高位进到CF,最低位补0;\x0d\SHR:逻辑右移,最低位进到CF,最高位补0;\x0d\SAR:算术右移,最低位进到CF,最高位不变;\x0d\ROL:循环左移,最高位进到CF的同时补到最低位;\x0d\ROR:循环右移,最低位进到CF的同时补到最高位;\x0d\RCL:带进位循环左移,最高位进到CF的,同时CF值补到最低位;\x0d\RCR:带进位循环右移,最低位进到CF的,同时CF值补到最高位;\x0d\SHLD:双精度左移,第二个 *** 作数移位到第一个 *** 作数,第一 *** 作数进到CF,和逻辑左移类似,低位移到高位;\x0d\SHRD:双精度左移,第二个 *** 作数移位到第一个 *** 作数,第一 *** 作数进到CF,和逻辑由移类似,高位移到低位;\x0d\\x0d\这样差不多可以了吧。
附表52
指令汇编格式
指令类型
指令汇编格式
指令功能简介
传送指令
MOV
reg/mem,imm
;dest←src
MOV
reg/mem/seg,reg
MOV
reg/seg,mem
MOV
reg/mem,seg
交换指令
XCHG
reg,
reg←→reg/mem
XCHG
reg/mem,reg
转换指令
XLAT
label
;AL←[BX+AL]
XLAT
堆栈指令
PUSH
r16/m16/seg
;入栈
POP
r16/m16/seg
;出栈
CS除外
标志传送
CLC
;CF←0
STC
;CF←1
CMC
;CF←
CLD
;DF←0
STD
;DF←1
CLI
;IF←0
STI
;IF←1
LAHF
;AH←标志寄存器低字节
SAHF
;标志寄存器低字节←AH
PUSHF
;标志寄存器入栈
POPF
;出栈到标志寄存器
地址传送
LEA
r16,mem
;r16←16位有效地址
LDS
r16,mem
;DS:r16←32位远指针
LES
r16,mem
;ES:r16←32位远指针
输入
IN
AL/AX,i8/DX
;AL/AX←I/O端口i8/DX
输出
OUT
i8/DX
,AL/AX
;I/O端口i8/DX←AL/AX
加法运算
ADD
reg,imm/reg/mem
;dest←dest+src
ADD
mem,imm/reg
ADC
reg,imm/reg/mem
;dest←dest+src+CF
ADC
mem,imm/reg
INC
reg/mem
;reg/mem←reg/mem+1
减法运算
SUB
reg,imm/reg/mem
;dest←dest-src
SUB
mem,imm/reg
SBB
reg,imm/reg/mem
;dest←dest-src-CF
SBB
mem,imm/reg
DEC
reg/mem
;reg/mem←reg/mem-1
NEG
reg/mem
;reg/mem←
+1
CMP
reg,imm/reg/mem
;dest-src
CMP
mem,imm/reg
;
乘法运算
MUL
reg/mem
;无符号数乘法
IMUL
reg/mem
;有符号数乘法
除法运算
DIV
reg/mem
;无符号数除法
IDIV
reg/mem
;有符号数除法
符号扩展
CBW
;将AL符号扩展为AX
CWD
;将AX符号扩展为DXAX
十进制调整
DAA
;将AL中的加和调整为压缩BCD码
DAS
;将AL中的减差调整为压缩BCD码
AAA
;将AL中的加和调整为非压缩BCD码
AAS
;将AL中的减差调整为非压缩BCD码
AAM
;将AX中的乘积调整为非压缩BCD码
AAD
;将AX中的非压缩BCD码转成二进制
逻辑运算
AND
reg,imm/reg/mem
;dest←dest
AND
src
AND
mem,imm/reg
OR
reg,imm/reg/mem
;dest←dest
OR
src
OR
mem,imm/reg
XOR
reg,imm/reg/mem
;dest←dest
XOR
src
XOR
mem,imm/reg
TEST
reg,imm/reg/mem
;dest
AND
src
TEST
mem,imm/reg
NOT
reg/mem
;reg/mem←
移位
SAL
reg/mem,1/CL
;算术左移1位/CL指定的位数
SAR
reg/mem,1/CL
;算术右移1位/CL指定的位数
SHL
reg/mem,1/CL
;逻辑左移1位/CL指定的位数
SHR
reg/mem,1/CL
;逻辑右移1位/CL指定的位数
ROL
reg/mem,1/CL
;循环左移1位/CL指定的位数
ROR
reg/mem,1/CL
;循环右移1位/CL指定的位数
RCL
reg/mem,1/CL
;带进位循环左移1位/CL指定的位数
RCR
reg/mem,1/CL
;带进位循环右移1位/CL指定的位数
串 *** 作
MOVS[B/W]
;串传送
LODS[B/W];
串读取
STOS[B/W];
串存储
CMPS[B/W]
;串比较
SCAS[B/W]
;串扫描
REP
;重复前缀
REPZ/REPE
相等重复前缀
REPNZ/REPNE
不等重复前缀
控制转移
JMP
label
无条件直接转移
JMP
r16/m16
无条件间接转移
Jcc
label
条件转移
cc可为C/NC/Z/NZ/S/NS/O/NO/B/NB/BE/NBE/L/NL/LE/NLE
循环
LOOP
label
CX←CX-1;若CX≠0,则循环
LOOPZ/LOOPE
label
CX←CX-1;若CX≠0且ZF=1,则循环
LOOPNZ/LOOPNE
label
CX←CX-1;若CX≠0且ZF=0,则循环
JCXZ
label
若CX=0,则循环
子程序
CALL
label
直接调用
CALL
r16/m16
间接调用
RET
无参数返回
RET
i16
有参数返回
指令类型
指令汇编格式
指令功能简介
备
注
中断
INT
i8
中断调用
INTO
溢出中断调用
IRET
中断返回
处理器控制
NOP
空 *** 作指令
seg:
段跨越前缀
除CS
HLT
停机指令
LOCK
封锁前缀
WAIT
等待指令
ESC
mem
换码指令
汇编语言的指令格式,目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM、NASM;而Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法;
一、汇编语言语句的通用格式
[名称[:]]
指令码
[第一 *** 作数][,第二 *** 作数]
;注释
汇编语言的指令码的 *** 作数的个数可以是0、1、2个;当 *** 作数的个数为2的时候,语句还有两种不同的格式:
Windows下Intel风格的汇编语言语句格式为:
[名称[:]]
指令码
目的 *** 作数DST,源 *** 作数SRC
;注释
Unix/Linux下AT&T风格的汇编语言语句格式为:
[名称[:]]
指令码
源 *** 作数SRC,目的 *** 作数DST
;注释
例如:
CYCLE:
ADD
AX,02H
;(AX)<-(AX)+02H
解释:
汇编语言语句格式中的"名称"并不是所有语句都必需的,但是,如果语句中带有"名称",那么,大多数情况下,"名称"都表示的是内存中某一存储单元的地址,也就是"名称"后面各项在内存中存放的第一个存储单元的地址(包括该"名称"所在段的段地址和段内偏移地址);比如上面的指令中,CYCLE就是该语句的名称,CYCLE表示的就是其后面的机器指令码在内存中存放的第一个地址;"名称"与指令码之间的分隔符可以是冒号":",也可以是空格字符"
";当以冒号分割时,该名称代表的是一个标号;当以空格分割时,该名称代表的可能是标号,也可能是变量;当指令码有多个 *** 作数的时候,相邻两个 *** 作数之间要用逗号","分割;指令码与 *** 作数之间必须以空格分割;汇编语言语句的注释必须以分号";"开头;
以上就是关于汇编语言中的“移位指令”具体的 *** 作是什么全部的内容,包括:汇编语言中的“移位指令”具体的 *** 作是什么、汇编语言程序指令知多少、汇编语言指令的基本格式是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)