汇编指令集

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 ;把段地址:偏移地址存到ESDI.­

LFS 传送目标指针,把指针内容装入FS.­

例: LFS DI,string ;把段地址:偏移地址存到FSD.­

LGS 传送目标指针,把指针内容装入GS.­

例: LGS DI,string ;把段地址:偏移地址存到GSDI.­

LSS 传送目标指针,把指针内容装入SS.­

例: LSS DI,string ;把段地址:偏移地址存到SSDI.­

 

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 I 目标串段寄存器:目标串变址.­

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 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 程序结束. ­

你可能感兴趣的:(c,汇编,String,测试,扩展)