汇编语言指令大全,要详细的?。。。?/h3>一、数据位传送指令:1、MOVC,bit;bit可直接寻址位 C←(bit)2、MOVbit,C;C进位位 (bit) ← C 二、位变量修改指令:1、CLRC; 将C=02、CLRbit3、CPLC; 将C求反再存入C4、CPLbit; 将bit求反再存入bit5、SETBC; 将C=16、SETBbit; (bit) ← 1 三、位变量逻辑指令:ANLC,bitANLC,bitORLC,bitORLC,bit延展阅读:汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end) 。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行 。通用数据传送指令:1、MOV 传送字或字节;2、MOVSX 先符号扩展,再传送;3、MOVZX 先零扩展,再传送;4、PUSH 把字压入堆栈;5、POP 把字弹出堆栈;6、PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈;7、POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈;8、PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈;9、POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈;10、BSWAP 交换32位寄存器里字节的顺序;11、XCHG 交换字或字节( 至少有一个操作数为寄存器,段寄存器不可作为操作数);12、CMPXCHG 比较并交换操作数( 第二个操作数必须为累加器AL/AX/EAX );13、XADD 先交换再累加( 结果在第一个操作数里 );14、XLAT 字节查表转换;15、BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH);16、返回 AL 为查表结果 。( [BX+AL]->AL )
求 汇编指令表 完整的IBM-PC汇编语言指令集
数据传送指令集
MOV
功能: 把源操作数送给目的操作数
语法: MOV 目的操作数,源操作数
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data
XCHG
功能: 交换两个操作数的数据
语法: XCHG
格式: XCHG r1,r2 XCHG m,r XCHG r,m
PUSH,POP
功能: 把操作数压入或取出堆栈
语法: PUSH 操作数 POP 操作数
格式: PUSH r PUSH M PUSH data POP r POP m
PUSHF,POPF,PUSHA,POPA
功能: 堆栈指令群
格式: PUSHF POPF PUSHA POPA
LEA,LDS,LES
功能: 取地址至寄存器
语法: LEA r,m LDS r,m LES r,m
XLAT(XLATB)
功能: 查表指令
语法: XLAT XLAT m
算数运算指令
ADD,ADC
功能: 加法指令
语法: ADD OP1,OP2 ADC OP1,OP2
格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data
影响标志: C,P,A,Z,S,O
SUB,SBB
功能:减法指令
语法: SUB OP1,OP2 SBB OP1,OP2
格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data
影响标志: C,P,A,Z,S,O
INC,DEC
功能: 把OP的值加一或减一
语法: INC OP DEC OP
格式: INC r/m DEC r/m
影响标志: P,A,Z,S,O
NEG
功能: 将OP的符号反相(取二进制补码)
语法: NEG OP
格式: NEG r/m
影响标志: C,P,A,Z,S,O
MUL,IMUL
功能: 乘法指令
语法: MUL OP IMUL OP
格式: MUL r/m IMUL r/m
影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)
DIV,IDIV
功能:除法指令
语法: DIV OP IDIV OP
格式: DIV r/m IDIV r/m
CBW,CWD
功能: 有符号数扩展指令
语法: CBW CWD
AAA,AAS,AAM,AAD
功能: 非压BCD码运算调整指令
语法: AAA AAS AAM AAD
影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)
DAA,DAS
功能: 压缩BCD码调整指令
语法: DAA DAS
影响标志: C,P,A,Z,S
位运算指令集
AND,OR,XOR,NOT,TEST
功能: 执行BIT与BIT之间的逻辑运算
语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位
SHR,SHL,SAR,SAL
功能: 移位指令
语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
影响标志: C,P,Z,S,O
ROR,ROL,RCR,RCL
功能: 循环移位指令
语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL
影响标志: C,P,Z,S,O
程序流程控制指令集
CLC,STC,CMC
功能: 设定进位标志
语法: CLC STC CMC
标志位: C
CLD,STD
功能: 设定方向标志
语法: CLD STD
标志位: D
CLI,STI
功能: 设定中断标志
语法: CLI STI
标志位: I
CMP
功能: 比较OP1与OP2的值
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O
JMP
功能: 跳往指定地址执行
语法: JMP 地址
JXX
功能: 当特定条件成立则跳往指定地址执行
语法: JXX 地址
注:
A: ABOVE,当C=0,Z=0时成立
B: BELOW,当C=1时成立
C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立
E: EQUAL,当Z=1时成立
G: GREATER(大于),当Z=0且S=0时成立
L: LESS(小于),当S不为零时成立
N: NOT(相反条件),需和其它符号配合使用
O: OVERFLOW,O=1时成立
P: PARITY,P=1时成立
PE: PARITY EVEN,P=1时成立
PO: PARITY ODD,P=0时成立
S: SIGN,S=1时成立
Z: ZERO,Z=1时成立
LOOP
功能: 循环指令集
语法: LOOP 地址
LOOPE(Z)
地址 LOOPNE(Z) 地址
标志位: 无
CALL,RET
功能: 子程序调用,返回指令
语法: CALL 地址 RET RET n
标志位: 无
INT,IRET
功能: 中断调用及返回指令
语法: INT n IRET
标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器
字符串操作指令集
MOVSB,MOVSW,MOVSD
功能: 字符串传送指令
语法: MOVSB MOVSW MOVSD
标志位: 无
CMPSB,CMPSW,CMPSD
功能: 字符串比较指令
语法: CMPSB CMPSW CMPSD
标志位: C,P,Z,S,O
SCASB,SCASW
功能: 字符串搜索指令
语法: SCASB SCASW
标志位: C,P,Z,S,O
LODSB,LODSW,STOSB,STOSW
功能: 字符串载入或存贮指令
语法: LODSB LODSW STOSB STOSW
标志位: 无
REP,REPE,REPNE
功能: 重复前缀指令集
语法: REP 指令S REPE 指令S REPNE 指令S
标志位: 依指令S而定
对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令 。
这里将简单介绍其指令类型及指令说明,如有要求给具体的指令格式及应用,请与amay联系,amay加以更新 。
1)数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中 。
数据传送指令类型 指 令 说 明
通用数据传送指令 MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换)
累加器专用传送指令 IN(输入指令) 、OUT(输入指令)
地址传送指令 LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES)
标志寄存器传送指令 LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈)
2)算术指令:用来执行算术运算 。
算术指令类型 指 令 说 明
加法指令 ADD(加法)、ADC(带进位加法)、INC(加1)
减法指令 SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较)
乘法指令 MUL(无符号数乘法)、IMUL(带符号数乘法)
除法指令 DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)
3)逻辑指令:对字或字节执行逻辑运算 。
逻辑指令类型 指 令 说 明
逻辑运算指令 AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)
移动指令 SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位右移)
4)串处理指令:处理存放存储器里的数据串 。
串处理指令类型 指 令 说 明
指 令 MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串?。TOS(存入串)
5)控制转移指令:用来控制程序的执行流程 。
控制转移指令类型 指 令 说 明
无条件转移指令 JMP(段间和段内转移)
条件转移指令 JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移)
循环指令 LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令)
子程序指令 CALL(调用指令)、RET(返回指令)
中断指令 INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)
求汇编语言指令,最好详细些051指令集
资料转移指令
MOV 移动
MOVC 程式记忆体移动
MOVX 外部RAM和扩展I/O口与累加器A的数据传送指令
PUSH 放入堆叠
POP 由堆叠取回
XCH 8位元交换
XCHD 低4位元交换
SWAP 高低4位元交换
算术指令
ADD 两数相加
ADDC 两数相加再加C
SUBB 两数相减再减C
INC 加一指令
DEC 减一指令
MUL (MUL AB乘法指令仅此一条)相乘指令 , 所得的16位二进制数低8位存累加器A高8位存B
DIV (DIV AB 除法指令仅此一条)相除指令,所得商存A,余数存B
DA (DA A 只此一条指令)调整为十进数
逻辑指令
ANL做AND(逻辑与)运算
ORL做OR(逻辑或)运算
XRL 做(逻辑异或)运算
CLR 清除为0
CPL 取反指令
RL 不带进位左环移
RLC 带进位左环移
RR 不带进位右环移
RRC 带进位右环移
控制转移类指令
JC C=1时跳
JNC C=0时跳
JB 位元=1时跳
JNB 位元=0时跳
JBC 位元=1时跳且清除此位元
LCALL 长调用子程序
ACALL 绝对调用子程序
RET 由副程式返回
RETI 由中断副程式返回
AJMP 绝对转移
SJMP 相对转移
JMP @A+DPTR 散转,相对DPTR的间接转移
JZ A=0时跳
JNZA 0时跳
CJNE 二数比较,不相等时跳
DJNZ 减一,不等於0时跳
NOP 空操作
位变量指令
SETB 设定为1
ORG 程序开始,规定程序的起始地址
END 程序结束
EQU等值指令(先赋值后使用)例:SUM EQU 30H
DB 定义字节指令
DW 定义字内容
DS 定义保留一定的存贮单元数目
BIT 位地址符号指令 例:SAM BIT P1.0
RET 子程序返回指令
RETI 中断子程序返回指令
$ 本条指令地址
算术运算指令
指令 说明 周期
ADD A,Rn A←A+Rn 12
ADD A,direct A←A+direct 12
ADD A,@Ri A←A+Ri 12
ADD A,#data A←A+data 12
ADDC A,Rn A←A+Rn+C 12
ADDC A,direct A←A+direct+C 12
ADDC A,@Ri A←A+Ri+C 12
ADDC A,#data A←A+data+C 12
SUBB A,Rn A←A-Rn-C 12
SUBB A,direct A←A-direct-C 12
SUBB A,@Ri A←A-Ri-C 12
SUBB A,#data A←A-data-C 12
INC A A←A+1 12
INC Rn Rn←Rn+1 12
INC direct direct←direct+1 12
INC @Ri @Ri←@Ri+1 12
INC DPTR DPTR←DPTR+1 12
DEC A A←A-1 12
DEC Rn Rn←Rn-1 12
DEC direct direct←direct-1 12
DEC @Ri @Ri←@Ri-1 12
MUL AB 两个无符号的8位数据相乘,其中高阶8位放入B缓存器 , 低阶8位则放入累积器ACC 24
DIV AB 两个无符号的8位数据相除,把ACC值除以B缓存器值,商数放回ACC , 余数放在B 48
DA A 累加器作十进制调整 48
逻辑运算指令
指令 说明 周期
ANL A,Rn A←A and Rn 12
ANL A,direct A←A and direct 12
ANL A,@Ri A←A and Ri 12
ANL A,#data A←A and data 12
ANL direct,A direct←direct and A 12
ANL direct,#data direct←direct and data 24
ORL A,Rn A←A or Rn 12
ORL A,direct A←A or direct 12
ORL A,Rn A←A or Rn 12
ORL A,@Ri A←A or Ri 12
ORL A,#data A←A or data 12
ORL direct,A direct←direct or A 12
ORL direct,#data direct←direct or data 24
XRL A,Rn A←A xor Rn 12
XRL A,direct A←A xor direct 12
XRL A,@Ri A←A xor Ri 12
XRL A,#data A←A xor data 12
XRL direct,A direct←direct xor A 12
XRL direct,#data direct←direct xor data 12
CLR A 清除累加器 12
CPL A 累加器反相 12
RL A 累加器向左旋转 12
RLC A 累加器和C左旋 12
RR A 累加器向右旋转 12
RRC A 累加器和C右旋 12
SWAP A 累加器的高低四位互换 12
数据转移指令
指令 说明 周期
MOV A,Rn A←Rn 12
MOV A,direct A←direct 12
MOV A,@Ri A←Ri 12
MOV A,#data A←data 12
MOV Rn,A Rn←A 12
MOV Rn,direct Rn←direct 24
MOV Rn,#data Rn←data 12
MOV direct,A direct←A 12
MOV direct,Rn direct←Rn 24
MOV direct,direct direct←direct 24
MOV direct,@Ri direct←Ri 24
MOV direct,#data direct←data 24
MOV @Ri,A Ri←A 12
MOV @Ri,direct Ri←direct 24
MOV @Ri,#data Ri←data 12
MOV DPTR,#data 16 Ri←16bit data 24
MOVC A,@A+DPTR A←程序内存的数据 24
MOVC A,@A+PC A←程序内存的数据 24
MOVX A,@Ri A←外部RAM的数据(8bit地址) 24
MOVX A,@DPTR A←外部RAM的数据(16bit地址) 24
MOVX @Ri,A 外部的RAM(8bit)←A 24
MOVX @DPTR,A 外部的RAM(16bit)←A 24
PUSH direc 推迭区←direct 24
POP direc direct←堆栈区 24
XCH A,Rn A和Rn互换 12
XCH A,direct A和direct互换 12
XCH A,@Ri A和Ri互换 12
XCHD A,@Ri A和Ri的低四位互换 12
位运算指令
指令 说明 周期
CLR C 清除进位旗标 12
CLR bit 清除直接位 12
SETB C 设定进位旗标 12
SETB bit 设定直接位 12
CPL C 进位旗标反相 12
CPL bit 直接位反相 12
ANL C,bit C←C and bit 24
ANL C,/bit C←C and bit(反相) 24
ORL C,bit C←C or bit 24
ORL C,/bit C←C or bit(反相) 24
MOV C,bit C←bit 12
MOV bit,C bit←C 24
JC rel 若C=1跳至rel 24
JNC rel 若C=0跳至rel 24
JB bit,rel 若bit=1跳至rel 24
JNB bit,rel 若bit=0跳至rel 24
JBC bit,rel 若bit=1跳至rel,且清除此位 24
程序跳跃指令
指令 说明 周期
ACALL addr11 绝对式子程序呼叫 24
LCALL addr16 远程子程序呼叫 24
RET 从子程序返回 24
RETI 从中断子程序返回 24
AJMP addr11 绝对式跳跃 24
LJMP addr16 远程跳跃 24
SJMP rel 短程跳跃 24
JMP @A+DPTR 间接跳跃 24
JZ rel 若A=0跳至rel 24
JNZ rel 若A不等于0跳至rel 24
CJNE A,direct,rel 若A不等于direct跳至rel 24
CJNE A,#data,rel 若A不等于data跳至rel 24
CJNE Rn,#data,rel 若Rn不等于data跳至rel 24
CJNE @Ri,#data,rel 若Ri不等于data跳至rel 24
DJNZ Rn,rel Rn减1不等于0跳至rel 24
DJNZ direct,rel direct减1不等于0跳至rel 24
NOP 没动作 12
缩写符号说明
缩写符号 说明 备注
Rn 缓存器R0-R7
direct 8bit内部数据存储器,包括
1.内部数据存储器(00-7F)的地址
2.特殊功能缓存器(80-FF)的地址,如P0,PSW,TMOD..等
@Ri 由缓存器R0或R1所寻址的内部RAM数据
#data 8bit常数
#data 16 16bit常数
addr 16 16bit的目的地址,可使跳跃指令跳跃64k
addr 11 11bit的目的地址 , 可使跳跃指令跳跃2k
rel 具正负号的8位地址偏移量,用于相对地址的跳跃
bit 1个bit:只所有可以位寻址的位 。(如PSW.7为CY旗号)
A 累加器(累积器)
C或CY 进位旗号
AC 辅助进位旗号
Bb 指定位B0-B7
D 半字节(4Bit)助忆符号
F0 旗号0
I 中断
PC 程序计数器
P0 I/O port 0
P1 I/O port 1
P2 I/O port 2
P3 I/O port 3
PSW 程序状态字组(类似于旗号缓存器)
SP 堆栈指针缓存器
B 缓存器B
DPTR 数据指针缓存器
X 外部滋要内存的助忆符号
@ 间接地址符号
$ 程序计数迄目前的值
reg 缓存器
8051 INSTRUCTION SET
1.Arithmetic operations:
MnemonicByteCyc
ADD A,@Ri11
ADD A,Rn11
ADD A,direct21
ADD A,#data21
ADDC A,@Ri11
ADDC A,Rn11
ADDC A,direct21
ADDC A,#data21
SUBB A,@Ri11
SUBB A,Rn11
SUBB A,direct21
SUBB A,#data21
INC A11
INC @Ri11
INC Rn11
INC DPTR11
INC direct21
INC direct21
DEC A11
DEC @Ri11
DEC Rn11
DEC direct21
MUL AB14
DIV AB14
DA A11
2.Logical opreations:
ANL A,@Ri11
XRL A,@Ri11
ANL A,Rn11
XRL A,Rn11
ANL A,direct21
XRL A,direct21
ANL A,#data21
XRL A,#data21
ANL direct,A21
XRL direct,A21
ANL direct,#data 32
XRL direct,#data 32
ORL A,@Ri11
CLR A11
ORL A,Rn11
CPL A11
ORL A,direct21
RL A11
ORL A,#data21
RLC A11
ORL direct,A21
RR A11
ORL direct,#data 32
RRC A11
SWAP A11
3.Data transfer:
MnemonicByteCyc
MOV A,@Ri11
MOV DPTR,#data16 32
MOV A,Rn11
MOVC A,@A+DPTR12
MOV A,direct21
MOVC A,@A+PC12
MOV A,#data21
MOVX A,@Ri12
MOV @Ri,A11
MOVX A,@DPTR12
MOV @Ri,direct22
MOVX @Ri,A12
MOV @Ri,#data21
MOVX @DPTR,A12
MOV Rn,A11
PUSH direct22
MOV Rn,direct22
POP direct22
MOV Rn,#data21
XCH A,@Ri11
MOV direct,A21
XCH A,Rn11
MOV direct,@Ri22
XCH A,direct21
MOV direct,Rn22
XCHD A,@Ri11
MOV direct,direct32
MOV direct,#data 32
4.Boolean variable manipulation:
MnemonicByteCyc
CLR C11
ANL C,bit22
SETB C11
ANL C,/bit22
CPL C11
ORL C,bit22
CLR bit21
ORL C,/bit22
SETB bit21
MOV C,bit21
CPL bit21
MOV bit,C22
5.Program and machine control:
MnemonicByteCyc
NOP11
JZ rel22
RET12
JNZ rel22
RETI12
JC rel22
ACALL addr1122
JNC rel22
AJMP addr1122
JB bit,rel32
LCALL addr1632
JNB bit,rel32
LJMP addr1632
JBC bit,rel32
SJMP rel22
CJNE A,direct,rel32
JMP @A+DPTR12
CJNE A,#data,rel 32
DJNZ Rn,rel22
CJNE @Ri,#data,rel 32
DJNZ direct,rel32
CJNE Rn,#data,rel32
求汇编指令集一、数据传输指令
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. 输入输出端口传送指令.
INI/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
OUTI/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标志出栈.
PUSHD32位标志入栈.
POPD32位标志出栈.
二、算术运算指令
───────────────────────────────────────
ADD加法.
ADC带进位加法.
INC加 1.
AAA加法的ASCII码调整.
DAA加法的十进制调整.
SUB减法.
SBB带借位减法.
DEC减 1.
NEG求反(以 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,04
SHL 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/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<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 。循环控制指令(短转移)
LOOPCX不为零时循环.
LOOPE/LOOPZ CX不为零且标志Z=1时循环.
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
JCXZCX为零时转移.
JECXZECX为零时转移.
4 。中断指令
INT中断指令
INTO溢出中断
IRET中断返回
5 。处理器控制指令
HLT处理器暂停, 直到出现中断或复位信号才继续.
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
ESC转换到外处理器.
LOCK 封锁总线.
NOP 空操作.
STC 置进位标志位.
CLC 清进位标志位.
CMC 进位标志取反.
STD 置方向标志位.
CLD 清方向标志位.
STI 置中断允许位.
CLI 清中断允许位.
六、伪指令
DW 定义字(2字节).
PROC 定义过程. 例子:name proc var1,var2,var3
ENDP 过程结束.例子:name endp
SEGMENT 定义段.例子 name segment
ASSUME 建立段寄存器寻址. 例子:assume cs:codes,ds:datas,ss:stacks
ENDS 段结束.name ends
END 程序结束(同时指出指令入口,即程序执行的第一条指令).end start
七、处理机控制指令:
标志处理指令 CLC(进位位置0指令)
CMC(进位位求反指令)
STC(进位位置为1指令)
CLD(方向标志置1指令)
STD(方向标志位置1指令)
CLI(中断标志置0指令)
STI(中断标志置1指令)
NOP(无操作)
HLT(停机)
WAIT(等待)
ESC(换码)
LOCK(封锁)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++浮点协处理器+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++浮点指令
对下面的指令先做一些说明:
st(i):代表浮点寄存器 , 所说的出栈、入栈操作都是对st(i)的影响
src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
x <- y 表示将y的值放入x,例st(0) <- st(0) - st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)
1. 数据传递和对常量的操作指令
指令格式
指令含义
执行的操作
FLD src
装入实数到st(0)
st(0) <- src (mem32/mem64/mem80)
FILD src
装入整数到st(0)
st(0) <- src (mem16/mem32/mem64)
FBLD src
装入BCD数到st(0)
st(0) <- src (mem80)
FLDZ
将0.0装入st(0)
st(0) <- 0.0
FLD1
将1.0装入st(0)
st(0) <- 1.0
FLDPI
将pi装入st(0)
st(0) <- ?(ie, pi)
FLDL2T
将log2(10)装入st(0)
st(0) <- log2(10)
FLDL2E
将log2(e)装入st(0)
st(0) <- log2(e)
FLDLG2
将log10(2)装入st(0)
st(0) <- log10(2)
FLDLN2
将loge(2)装入st(0)
st(0) <- loge(2)
FST dest
保存实数st(0)到dest
dest <- st(0) (mem32/mem64)
FSTP dest
dest <- st(0) (mem32/mem64/mem80);然后再执行一次出栈操作
FIST dest
将st(0)以整数保存到dest
dest <- st(0) (mem32/mem64)
FISTP dest
dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作
FBST dest
将st(0)以BCD保存到dest
dest <- st(0) (mem80)
FBSTP dest
dest<- st(0) (mem80);然后再执行一次出栈操作
2.比较指令
指令格式
指令含义
执行的操作
FCOM
实数比较
将标志位设置为 st(0) - st(1) 的结果标志位
FCOM op
实数比较
将标志位设置为 st(0) - op (mem32/mem64)的结果标志位
FICOM op
和整数比较
将Flags值设置为st(0)-op 的结果op (mem16/mem32)
FICOMP op
和整数比较
将st(0)和op比较 op(mem16/mem32)后;再执行一次出栈操作
FTST
零检测
将st(0)和0.0比较
FUCOM st(i)
比较st(0) 和st(i) [486]
FUCOMP st(i)
比较st(0) 和st(i),并且执行一次出栈操作
FUCOMPP st(i)
比较st(0) 和st(i),并且执行两次出栈操作
FXAM
Examine: Eyeball st(0) (set condition codes)
3.运算指令
指令格式
指令含义
执行的操作
加法
FADD
加实数
st(0) <-st(0) + st(1)
FADD src
st(0) <-st(0) + src (mem32/mem64)
FADD st(i),st
st(i) <- st(i) + st(0)
FADDP st(i),st
st(i) <- st(i) + st(0);然后执行一次出栈操作
FIADD src
加上一个整数
st(0) <-st(0) + src (mem16/mem32)
减法
FSUB
减去一个实数
st(0) <- st(0) - st(1)
FSUB src
st(0) <-st(0) - src (reg/mem)
FSUB st(i),st
st(i) <-st(i) - st(0)
FSUBP st(i),st
st(i) <-st(i) - st(0),然后执行一次出栈操作
FSUBR st(i),st
用一个实数来减
st(0) <- st(i) - st(0)
FSUBRP st(i),st
st(0) <- st(i) - st(0) , 然后执行一次出栈操作
FISUB src
减去一个整数
st(0) <- st(0) - src (mem16/mem32)
FISUBR src
用一个整数来减
st(0) <- src - st(0) (mem16/mem32)
乘法
FMUL
乘上一个实数
st(0) <- st(0) * st(1)
FMUL st(i)
st(0) <- st(0) * st(i)
FMUL st(i),st
st(i) <- st(0) * st(i)
FMULP st(i),st
st(i) <- st(0) * st(i),然后执行一次出栈操作
FIMUL src
乘上一个整数
st(0) <- st(0) * src (mem16/mem32)
除法
FDIV
除以一个实数
st(0) <-st(0) /st(1)
FDIV st(i)
st(0) <- st(0) /t(i)
FDIV st(i),st
st(i) <-st(0) /st(i)
FDIVP st(i),st
st(i) <-st(0) /st(i),然后执行一次出栈操作
FIDIV src
除以一个整数
st(0) <- st(0) /src (mem16/mem32)
FDIVR st(i),st
用实数除
st(0) <- st(i) /st(0)
FDIVRP st(i),st
FDIVRP st(i),st
FIDIVR src
用整数除
st(0) <- src /st(0) (mem16/mem32)
FSQRT
平方根
st(0) <- sqrt st(0)
FSCALE
2的st(0)次方
st(0) <- 2 ^ st(0)
FXTRACT
Extract exponent:
st(0) <-exponent of st(0); and gets pushed
st(0) <-significand of st(0)
FPREM
取余数
st(0) <-st(0) MOD st(1)
FPREM1
取余数(IEEE),同FPREM,但是使用IEEE标准[486]
FRNDINT
取整(四舍五入)
st(0) <- INT( st(0) ); depends on RC flag
FABS
求绝对值
st(0) <- ABS( st(0) ); removes sign
FCHS
改变符号位(求负数)
st(0) <-st(0)
F2XM1
计算(2 ^ x)-1
st(0) <- (2 ^ st(0)) - 1
FYL2X
计算Y * log2(X)
st(0)为Y;st(1)为X;将st(0)和st(1)变为st(0) * log2( st(1) )的值
FCOS
余弦函数Cos
st(0) <- COS( st(0) )
FPTAN
正切函数tan
st(0) <- TAN( st(0) )
FPATAN
反正切函数arctan
st(0) <- ATAN( st(0) )
FSIN
正弦函数sin
st(0) <- SIN( st(0) )
FSINCOS
sincos函数
st(0) <-SIN( st(0) ),并且压入st(1)
st(0) <- COS( st(0) )
FYL2XP1
计算Y * log2(X+1)
st(0)为Y; st(1)为X; 将st(0)和st(1)变为st(0) * log2( st(1)+1 )的值
处理器控制指令
FINIT
初始化FPU
FSTSW AX
保存状态字的值到AX
AX<- MSW
FSTSW dest
保存状态字的值到dest
dest<-MSW (mem16)
FLDCW src
从src装入FPU的控制字
FPU CW <-src (mem16
FSTCW dest
将FPU的控制字保存到dest
dest<- FPU CW
FCLEX
清除异常
FSTENV dest
保存环境到内存地址dest处 保存状态字、控制字、标志字和异常指针的值
FLDENV src
从内存地址src处装入保存的环境
FSAVE dest
保存FPU的状态到dest处 94字节
FRSTOR src
从src处装入由FSAVE保存的FPU状态
FINCSTP
增加FPU的栈指针值
st(6) <-st(5); st(5) <-st(4),...,st(0) <-?
FDECSTP
减少FPU的栈指针值
st(0) <-st(1); st(1) <-st(2),...,st(7) <-?
FFREE st(i)
标志寄存器st(i)未被使用
FNOP
空操作,等同CPU的nop
st(0) <-st(0)
WAIT/FWAIT
同步FPU与CPU:停止CPU的运行,直到FPU完成当前操作码
FXCH
交换指令,交换st(0)和st(1)的值
st(0) <-st(1)
st(1) <- st(0)+++++++++++++++手痛?。【壹觳榈模?++++++++++++++
求汇编语言全部指令及意思,新人,谢谢了 好的加悬赏我用汇编4年啦 , 你的问题不是一句两句能将明白的 , 要想学好的话,明年过来学徒,这些知识的讲一礼拜,甚至还要长
求一个汇编语言的指令大全,要简小的汇编金手指
汇编语言的各种指令的用法汇编语言指令集
汇编指令是汇编语言中使用的一些操作符(如mov,inc,loop)和助记符,还包括一些伪指令(如assume,end) 。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行 。
一、数据传输指令
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据 。
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,04
SHL 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/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<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(封锁)
汇编语言指令都有什么?有多少条?汇编需要看处理器
处理器越高级 指令要求也就越多
总之 学会就知道有多少了
汇编语言跳转指令AJMP addr11;不超过2KB没错 111 1111 1111B其中3位包含在指令字节
汇编语言 跳转指令的使用跳一次还是可以的,次数多了堆栈就会溢出 。因为调用子程序前CPU要把调用处的地址压入堆栈 , 返回时弹出以便继续执行 。直接从子程序跳回来相当于子程序中又调用了子程序 , 原来压栈的内容没有出栈继续占用堆栈,堆栈中光进数据而不出数据,次数多了必定溢出而使程序跑飞 。
汇编语言,跳转指令问题:test这里是做按位与操作,test %eax, %eax是先将%eax和自己按位与 , 如果所得的结果>0,那么就跳转,否则继续执行下面的指令 。
这里的trick是test一个寄存器本身就是看寄存器的值是不是0.如果不是0,那么jg一定会跳转 。
机器这样写的目的是减少指令所占的空间(你可以尝试用mov指令实现看寄存器的值是否为0这个需求 , 你会发现所占的空间>test,我记得test是2个byte , 而mov要有5个byte)
说完了,大清早的 , 希望对你有帮助!
ARM指令集中的跳转与汇编语言中的跳转有什么区别ARM指令集的跳转指令就是汇编指令 。ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令: B 跳转指令 BL 带返回的跳转指令 BLX 带返回和状态切换的 。控制转移指令:用来控制程序的执行流程 。汇编语言中的跳转控制转移指令类型 指令 说明无条件转移指令 JMP(段间和段内转移)条件转移指令 JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移) 。补充:ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器 。更早称作Acorn RISC Machine 。ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35% , 却能保留32位系统的所有优势 。
汇编语言中近跳转和短跳转什么时候用JMP指令是从程序当前执行的地方无条件转移到另一个地方执行 。这种转移可以是一个短(short)转移(偏移量在[-128, 127]范围内),近(near)转移(偏移量在[-32K, 32K]范围内)或远(far)转移(在不同的代码段之间转移) 。
短和近转移是段内转移,JMP指令只把目标指令位置的偏移量赋值指令指针寄存器IP,从而实现转移功能 。但远转移是段间转移,JMP指令不仅会改变指令指针寄存器IP的值,而且还会改变代码段寄存器CS的值 。
补充回答:符号地址若是标号 , 必是段内;符号地址若是双字变量,必是段间 。
急!masm6.0安装问题【汇编指令大全】看情况是因为不存在c:\windows\temp 目录
你在C盘上建立一个目录,取名为windows,然后,再在windows里建立一个目录,取名为temp
然后,再安装试试.
怎么样安装masm6.0我没试过,我想应该是要设置路径path=c\window\temp 。局部设置可以在你想要的目录下建个*.cmd文件,然后指定路径;全局设置可以在我的电脑->属性->高级->环境变量里选中path编辑;path=c\window\temp就可以了 。
汇编指令和伪指令之间的区别是什么?单片机中指令是对应CPU的可执行代码,在编译时会分配存储单元,运行时CPU按指令指引的方向和功能执行 。伪指令是不可执行代码,一般起辅助作用,是为编译系统服务的,编译时不会分配存储单元,只是按伪指令的功能定位程序数据或指令位置 。
由masm在汇编过程中执行的汇编指令叫由masm在汇编过程中执行的汇编指令叫 “伪指令” 。
汇编指令和伪指令之间的区别是什么?汇编语言中指令或伪指令的主要区别是:
1、指令是CPU执行的依据 , 编程、编译、执行都是有效的 。
2、伪指令只为编译服务,编译完成后,伪指令作用消失 。
3、例如:
ORG 0000H;ORG是伪指令,定位以一句语句的起始位置
LJMP MAIN;LJMP是指令,长跳转到MAIN标号 。
汇编语言符号$和%这是语法问题,用的编译器不同,规定的格式就不同,你所说的常见的格式是微软的那个格式,还有linux下的汇编,好几种编译器就是用你发的这种格式,在立即数和寄存器前加个符号
汇编语言有符号和无符号二进制数本身不能反映出它是有符号数还是无符号数,是不是有符号数完全取决于程序员的需要 。程序员认为它是有符号数,它才是有符号数 , 程序员认为它是无符号数,它就是无符号数,哪怕最高位是1 。
只有程序员认为某个二进制数是有符号数时最高位才是符号位!
136的二进制是(10001000)B
如果认为它是有符号数:最高位是1,表示它是个负数,按负数的转换方法可知,(10001000)B=(-120)D
如果认为它是无符号数,(10001000)B=(136)D
求汇编语言(符号语言)定义RnR0~R7寄存器n=0~7
Direct直接地址,内部数据区的地址RAM(00H~7FH)
@Ri间接地址Ri=R0或R1
#data8位常数
#data1616位常数
Addr1616位的目标地址
Addr1111位的目标地址
Rel相关地址
bit内部数据RAM
指令介绍
指令字节周期动作说明
一、算数运算指令
1.ADD A,Rn 1 1 将累加器与寄存器的内容相加 , 结果存回累加器
2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器
3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器
4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器
5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器
6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加 , 结果存回累加器
7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器
8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器
9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器
10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器
11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器
12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器
13.INC A 1 1 将累加器的值加1
14.INC Rn 1 1 将寄存器的值加l
15.INC direct 2 1 将直接地址的内容加1
16.INC @Ri 1 1 将间接地址的内容加1
17.INC DPTR 1 1 数据指针寄存器值加1
说明:将16位的DPTR加1 , 当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位
18.DEC A 1 1 将累加器的值减1
19.DEC Rn 1 1 将寄存器的值减1
20.DEC direct 2 1 将直接地址的内容减1
21.DEC @Ri 1 1 将间接地址的内容减1
22.MUL AB 1 4 将累加器的值与B寄存器的值相乘 , 乘积的低位字节存回累加器,高位字节存回B寄存器
说明:将累加器A和寄存器B内的无符号整数相乘 , 产生16位的积,低位字节存入A,高位字节存入B寄存器 。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0
23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器
说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B 。执行本指令后,进位位(C)及溢出位(OV)被清除为0
24.DA A 1 1 将累加器A作十进制调整,
若(A) 3-0>9或(AC)=1 , 则(A) 3-0←(A)3-0+6
若(A) 7-4>9或 (C)=1,则(A) 7-4←(A)7-4+6
二、逻辑运算指令
25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器
26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断 , 结果存回累加器
27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器
28.ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断 , 结果存回累加器
29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址
30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址
31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器
32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器
33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器
34.ORL A,#data 2 1 将累加器的值与常数做OR的逻辑判断,结果存回累加器
35.ORL direct,A 2 1 将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址
36.ORL direct,#data 3 2 将直接地址的内容与常数值做OR的逻辑判断,结果存回该直接地址
37.XRL A,Rn 1 1 将累加器的值与寄存器的值做XOR的逻辑判断,结果存回累加器
38.XRL A,direct 2 1 将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器
39.XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器
40.XRL A,#data 2 1 将累加器的值与常数作XOR的逻辑判断,结果存回累加器
41.XRL direct,A 2 1 将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址
42.XRL direct,#data 3 2 将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址
43.CLR A 1 1 清除累加器的值为0
44.CPL A 1 1 将累加器的值反相
45.RL A 1 1 将累加器的值左移一位
46.RLC A 1 1 将累加器含进位C左移一位
47.RR A 1 1 将累加器的值右移一位
48.RRC A 1 1 将累加器含进位C右移一位
49.SWAP A 1 1 将累加器的高4位与低4位内容交换 。(A)3-0←(A)7-4
三、数据移动指令
50.MOV A,Rn 1 1 将寄存器的内容载入累加器
51.MOV A,direct 2 1 将直接地址的内容载入累加器
52.MOV A,@Ri 1 1 将间接地址的内容载入累加器
53.MOV A,#data 2 1 将常数载入累加器
54.MOV Rn , A 1 1 将累加器的内容载入寄存器
55.MOV Rn,direct 2 2 将直接地址的内容载入寄存器
56.MOV Rn,gdata 2 1 将常数载入寄存器
57.MOV direct,A 2 1 将累加器的内容存入直接地址
58.MOV direct,Rn 2 2 将寄存器的内容存入直接地址
59.MOV direct1, direct2 3 2 将直接地址2的内容存入直接地址1
60.MOV direct,@Ri 2 2 将间接地址的内容存入直接地址
61.MOV direct,#data 3 2 将常数存入直接地址
62.MOV @Ri,A 1 1 将累加器的内容存入某间接地址
63.MOV @Ri,direct 2 2 将直接地址的内容存入某间接地址
64.MOV @Ri,#data 2 1 将常数存入某间接地址
65.MOV DPTR,#data16 3 2 将16位的常数存入数据指针寄存器
66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))
累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器
67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器
68.MOVX A,@Ri 1 2 将间接地址所指定外部存储器的内容读入累加器(8位地址)
69.MOVX A,@DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器(16位地址)
70.MOVX @Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器(8位地址)
71.MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所指定的外部存储器(16位地址)
72.PUSH direct 2 2 将直接地址的内容压入堆栈区
73.POP direct 2 2 从堆栈弹出该直接地址的内容
74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换
75.XCH A,direct 2 1 将累加器的值与直接地址的内容互换
76.XCH A,@Ri 1 1 将累加器的值与间接地址的内容互换
77.XCHD A,@Ri 1 1 将累加器的低4位与间接地址的低4位互换
四、位操作指令(布尔指令)
78.CLR C 1 1 清除进位C为0
79.CLR bit 2 1 清除直接地址的某位为0
80.SETB C 1 1 设定进位C为1
81.SETB bit 2 1 设定直接地址的某位为1
82.CPL C 1 1 将进位C的值反相
83.CPL bit 2 1 将直接地址的某位值反相
84.ANL C,bit 2 2 将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C
85.ANL C,/bit 2 2 将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C
86.ORL C,bit 2 2 将进位C与直接地址的某位做OR的逻辑判断 , 结果存回进位C
87.ORL C,/bit 2 2 将进位C与直接地址的某位的反相值做OR的逻辑判断 , 结果存回进位C
88.MOV C,bit 2 1 将直接地址的某位值存入进位C
89.MOV bit,C 2 2 将进位C的值存入直接地址的某位
90.JC rel 2 2 若进位C=1则跳至rel的相关地址
91.JNC rel 2 2 若进位C=0则跳至rel的相关地址
92.JB bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址
93.JNB bit,rel 3 2 若直接地址的某位为0,则跳至rel的相关地址
94.JBC bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址 , 并将该位值清除为0
五、程序跳转指令
95.ACALL addr11 2 2 调用2K程序存储器范围内的子程序
96.LCALL addr16 3 2 调用64K程序存储器范围内的子程序
97.RET 1 2 从子程序返回
98.RETI 1 2 从中断子程序返回
99.AJMP addr11 2 2 绝对跳跃(2K内)
100.LJMP addr16 3 2 长跳跃(64K内)
101.SJMP rel 2 2 短跳跃(2K内)-128~+127字节
102.JMP @A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址
103.JZ rel 2 2 累加器的内容为0 , 则跳至rel所指相关地址
104.JNZ rel 2 2 累加器的内容不为0,则跳至rel所指相关地址
105.CJNE A,direct,rel 3 2 将累加器的内容与直接地址的内容比较,不相等则跳至rel所指的相关地址
106.CJNE A,#data,rel 3 2 将累加器的内容与常数比较,若不相等则跳至rel所指的相关地址
107.CJNE @Rn,#data,rel 3 2 将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址
108.CJNE @Ri,#data,rel 3 2 将间接地址的内容与常数比较,若不相等则跳至rel所指的相关地址
109.DJNZ Rn,rel 2 2 将寄存器的内容减1,不等于0则跳至rel所指的相关地址
110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址
六、其它指令
111.NOP 1 1 无动作
112.RET 1 2 子程序返回
113.RETI 1 2 中断返回
在汇编语言里$符号代表什么意思?表示原地空转 , 一般与跳转指令相连用 如51 I汇编中,ajmp$表示程序就停在当前位置,相当于
L1: AJMP L1
举例应用:
如果一个程序只在中断跑,主程序没有东西可执行的东东,而这时主程序又不能停,此时就用 ajmp$,那么此时主程序就在该处原地不动,单步调试时可以看到就在原地走 。这是只要中断条件到就执行中断 。
汇编语言中@符号有什么用?你看一下间接寻址那里,一种寻址方式 。你发图片这句话不懂不要紧 。慢慢来 。
汇编leave的意思?LEAVE - Restore Stack for Procedure Exit (80188+)
Usage:LEAVE
Modifies flags: None
Releases the local variables created by the previous ENTER
instruction by restoring SP and BP to their condition before
the procedure stack frame was initialized.
ClocksSize
Operands808x286386486Bytes
none-5451
C9 LEAVE Set SP to BP, then pop BP
C9 LEAVE Set ESP to EBP, then pop EBP
释放当前子程序在堆栈中的局部变量,使BP和SP恢复成最近一次的ENTER指令被执行前的值 。
汇编语言我这里有个汇编语言读取文件的例子,你看看 。希望对你有帮助:
EnumDirPROCDirName:DWORD,FileType:DWORD
LOCALhSearch:DWORD
LOCALDirorFile[MAX_PATH]:DWORD
pushad
pushDirName
leaesi,DirorFile
pushesi
moveax,12345678h
_lstrcpy=dwordptr$-4
calleax
@pushsz'\*.*'
pushesi;DirorFile
call_lstrcat[ebx]
leaedi,[offsetwfd+ebx]
pushedi
pushesi
moveax,12345678h
_FindFirstFile=dwordptr$-4
calleax
cmpeax,INVALID_HANDLE_VALUE
jzED_Exit
movhSearch,eax
.REPEAT
.ifbyteptr[wfd+44+ebx]=='.'
jmpshortEN_NEXT
.endif
pushDirName
pushesi
call_lstrcpy[ebx]
@pushsz'\'
pushesi
call_lstrcat[ebx]
leaeax,[wfd+44+ebx]
pusheax
pushesi;DirorFile
call_lstrcat[ebx]
moveax,dwordptr[wfd+ebx]
andeax,FILE_ATTRIBUTE_DIRECTORY
.ifeax==FILE_ATTRIBUTE_DIRECTORY
pushdwordptrFileType
pushesi
callEnumDir
.else;是文件
pushdwordptrFileType
pushesi
callAnFile
.endif
EN_NEXT:
pushedi
pushhSearch
moveax,12345678h
_FindNextFile=dwordptr$-4
calleax
.UNTILeax==0;FindNexeFilefail
ED_Close:
pushhSearch
moveax,12345678h
_FindClose=dwordptr$-4
calleax
ED_Exit:
popad
ret8
EnumDirENDP
遍历指定目录,寻找指定类型的文件 。
输入:DirName:DWORD,FileType:DWORD
局部变量:LOCALhSearch:DWORD
LOCALDirorFile[MAX_PATH]:DWORD
DirName是常量 。DirorFile存放中间过程,有时是DirName\*.*、有时是
DirName\FileName或DirName\DirName.
得到一个文件后,判断是否是目录 。
是,则递归调用EnumDir,参数是DirorFile 。
否,则调用AnFile,分析文件,做相应处理 。
汇编指令集…要具体详细!1. 通用数据传送指令.
MOV传送字或字节.
MOVSX先符号扩展,再传送.
MOVZX先零扩展,再传送.
MOVSX reg16,r/m8; o16 0F BE /r[386]
MOVSX reg32,r/m8; o32 0F BE /r[386]
MOVSX reg32,r/m16; o32 0F BF /r[386]
MOVZX reg16,r/m8; o16 0F B6 /r[386]
MOVZX reg32,r/m8; o32 0F B6 /r[386]
MOVZX reg32,r/m16; o32 0F B7 /r[386]
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. 输入输出端口传送指令.
INI/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
OUTI/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标志出栈.
PUSHD32位标志入栈.
POPD32位标志出栈.
二、算术运算指令
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,04
SHL 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/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时,OP1JA/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>循环控制指令(短转移)
LOOPCX不为零时循环.
LOOPE/LOOPZCX不为零且标志Z=1时循环.
LOOPNE/LOOPNZCX不为零且标志Z=0时循环.
JCXZCX为零时转移.
JECXZECX为零时转移.
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程序结束.
七、位操作指令,处理器控制指令
1.位操作指令,8086新增的一组指令,包括位测试,位扫描 。BT,BTC,BTR,BTS,BSF,BSR
1.1 BT(Bit Test),位测试指令 , 指令格式:
BT OPRD1,OPRD2,规则:操作作OPRD1可以是16位或32位的通用寄存器或者存储单元 。操作数OPRD2必须是8位立即数或者是与OPRD1操作数长度相等的通用寄存器 。如果用OPRD2除以OPRD1,假设商存放在Divd中 , 余数存放在Mod中,那么对OPRD1操作数要进行测试的位号就是Mod,它的主要功能就是把要测试位的值送往CF,看几个简单的例子:
1.2 BTC(Bit Test And Complement),测试并取反用法和规则与BT是一样,但在功能有些不同,它不但将要测试位的值送往CF,并且还将该位取反 。
1.3 BTR(Bit Test And Reset),测试并复位,用法和规则与BT是一样 , 但在功能有些不同,它不但将要测试位的值送往CF,并且还将该位复位(即清0) 。
1.4 BTS(Bit Test And Set),测试并置位 , 用法和规则与BT是一样,但在功能有些不同,它不但将要测试位的值送往CF,并且还将该位置位(即置1) 。
1.5 BSF(Bit Scan Forward) , 顺向位扫描,指令格式:BSF OPRD1,OPRD2,功能:将从右向左(从最低位到最高位)对OPRD2操作数进行扫描,并将第一个为1的位号送给操作数OPRD1 。操作数OPRD1,OPRD2可以是16位或32位通用寄存器或者存储单元,但OPRD1和OPRD2操作数的长度必须相等 。
1.6 BSR(Bit Scan Reverse),逆向位扫描,指令格式:BSR OPRD1,OPRD2 , 功能:将从左向右(从最高位到最低位)对OPRD2操作数进行扫描,并将第一个为1的位号送给操作数OPRD1 。操作数OPRD1,OPRD2可以是16位或32位通用寄存器或存储单元,但OPRD1和OPRD2操作数的长度必须相等 。
1.7 举个简单的例子来说明这6条指令:
AA DW 1234H,5678H
BB DW 9999H,7777H
MOV EAX,12345678H
MOV BX,9999H
BT EAX,8;CF=0,EAX保持不变
BTC EAX,8;CF=0,EAX=12345778H
BTR EAX,8;CF=0,EAX=12345678H
BTS EAX,8;CF=0,EAX=12345778H
BSF AX,BX;AX=0
BSR AX,BX;AX=15
BT WORD PTR [AA],4;CF=1,[AA]的内容不变
BTC WORD PTR [AA],4;CF=1 , [AA]=1223H
BTR WORD PTR [AA],4;CF=1 , [AA]=1223H
BTS WORD PTR [AA],4;CF=1 , [AA]=1234H
BSF WORD PTR [AA],BX;[AA]=0;
BSR WORD PTR [AA],BX;[AA]=15(十进制)
BT DWORD PTR [BB],12;CF=1,[BB]的内容保持不变
BTC DWORD PTR [BB],12;CF=1,[BB]=76779999H
BTR DWORD PTR [BB],12;CF=1,[BB]=76779999H
BTS DWORD PTR [BB],12;CF=1,[BB]=77779999H
BSF DWORD PTR [BB],12;[BB]=0
BSR DWORD PTR [BB],12;[BB]=31(十进制)
2.处理器控制指令
处理器控制指令主要是用来设置/清除标志,空操作以及与外部事件同步等 。
2.1 CLC , 将CF标志位清0 。
2.2 STC,将CF标志位置1 。
2.3 CLI,关中断 。
2.4 STI,开中断 。
2.5 CLD,清DF=0 。
2.6 STD,置DF=1 。
2.7 NOP , 空操作,填补程序中的空白区 , 空操作本身不执行任何操作,主要是为了保持程序的连续性 。
2.8 WAIT , 等待BUSY引脚为高 。
2.9 LOCK,封锁前缀可以锁定其后指令的操作数的存储单元,该指令在指令执行期间一直有效 。在多任务环境中,可以用它来保证独占其享内存,只有以下指令才可以用LOCK前缀:
汇编语言中LEA指令和MOV指令的区别是什么?。?/h3>mov有很多很多种,格式上跟lea对应的那种是从一个内存地址(可以是很复杂的寻址模式)到一个寄存器的mov , 效果是计算内存地址,然后把里面的值读出来放在寄存器里 。而lea是计算内存地址,然后把内存地址本身放进寄存器里 。注意有的作者(以及编译器)会利用lea指令支持的寻址模式来计算一些例如一个数乘2/4/8并且加另一个数一类的运算,所以如果你感觉计算的东西不太像个真正的内存地址 , 它有可能真的不是 。要注意指令的名字跟它的字面意义未必符合,所以你要看手册里对指令功能的描述(intel手册有官方下载 , 你可以去找,不过格式跟gcc的不同; 你教材里多少也应该会写一点,记不清CSAPP里的Y86语言有没有LEA了,没有的话你得找本讲汇编的书参考一下) 。比如mov其实在别的编程语言里一般不对应到“移动”而是对应到“赋值”、“拷贝”、“读取”、“写入”等操作(不同格式的mov不一样);lea名字叫load effective address,但是不要太字面地理解,它的本意是让你用各种寻址模式去算地址,实际用法就是凡是可以塞进寻址模式的计算公式里的算式都可以用它算 。
乘法调整指令AAM是什么意思?你这个程序在输出上有问题.我已经帮你搞定了,已经试验过了,可以运行,完全符合题意.
code segment
assume cs:code
main proc far
start:
push dx
mov ax,0
push ax
mov bx,0
mov ah,1
int 21h
mov bl,al
mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah
int 21h
mov ah,1
int 21h
mov bh,al
mov ah,2
mov dl,10
int 21h
mov ah,2
mov dl,13
int 21h
sub bh,30h
sub bl,30h
mov al,bh
mul bl
;mov bl,al ;这个地方两个数向乘的积在AX中保存着
mov bx,ax
call binidec
ret
main endp
binidec proc near
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_div endp
binidec endp
code ends
end start
汇编 免杀 AAM 0毛毛虫技术论坛是一个以技术为主,和谐为辅,打造专业的安检,免杀,网络安全的综合论坛 。我们怀着一颗赤子之心,来到了毛毛虫,从这里你会慢慢起步,最终造就你的黑客梦想!
毛毛虫技术论坛口号:专业技术建立你的黑客梦想!我们坚持的原则:技术、平等、自由、共享
毛毛虫安检论坛每天有更新免杀远控免费下载等什么赶快申请论坛会员吧
32汇编:AAA,AAM,AAS等这类指令,在编程的实际应用中 , 用处大吗?这些指令都是针对 BCD码算术运算的矫正指令 , 具体,我没研究过,因为BCD码在微型机里不常用的
汇编,AAA,AAS,AAM,AAD,DAA,DAS这些指令本身就是进行运算后,才调整的,你说的情况用AAA所得结果是一个非压缩BCD码,CF为进位
- 好听的群名大全 最沙雕的宿舍群名称创意有个性
- 3dmax快捷键大全
- qq表情大全
- 英雄联盟图片
- 可爱卡通图片大全
- 个性图片大全
- 街机大全下载
- 梦想世界称谓
- 磁盘清理命令
- 炒绿豆粉的做法大全 炒绿豆粉的做法大全有哪些
