Loading

汇编指令大全

8080汇编手册数据传输指令

它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。

通用数据传送指令

  • 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 )

输入输出端口传送指令

  • IN I/O端口输入。 ( 语法: IN 累加器, {端口号│DX} )
  • OUT I/O端口输出。 ( 语法: OUT {端口号│DX},累加器 )

输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, 其范围是 0-65535。

目的地址传送指令

  • 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。

标志传送指令

  • LAHF 标志寄存器传送,把标志装入AH。
  • SAHF 标志寄存器传送,把AH内容装入标志寄存器。
  • PUSHF 标志入栈。
  • POPF 标志出栈。
  • PUSHD 32位标志入栈。
  • POPD 32位标志出栈。

二、算术运算指令

  • ADD 加法

  • ADC 带进位加法

  • INC 加 1

  • AAA 加法的ASCII码调整

  • DAA 加法的十进制调整

  • SUB 减法

  • SBB 带借位减法

  • DEC 减 1

  • NEG 求反(以 0 减之)

  • CMP 比较

  • AAS 减法的ASCII码调整

  • DAS 减法的十进制调整

  • MUL 无符号乘法

  • IMUL 整数乘法

  • AAM 乘法的ASCII码调整

  • DIV 无符号除法

  • IDIV 整数除法

  • AAD 除法的ASCII码调整

  • CBW 字节转换为字

  • CWD 字转换为双字

  • CWDE 字转换为双字

  • CDQ 双字扩展

三、逻辑运算指令

  • AND 与运算

  • OR 或运算

  • XOR 异或运算

  • NOT 取反

  • TEST 测试

  • SHL 逻辑左移

  • SAL 算术左移

  • SHR 逻辑右移

  • SAR 算术右移

  • ROL 循环左移

  • ROR 循环右移

  • RCL 通过进位的循环左移

  • RCR 通过进位的循环右移

四、串指令

  • DS:SI:源串段寄存器:源串变址。
  • ESI:目标串段寄存器:目标串变址。
  • CX:重复次数计数器。
  • AL/AX:扫描值。
  • D标志:0表示重复操作中SI和DI应自动增量;1表示应自动减量。
  • Z标志:用来控制扫描或比较操作的结束。

指令列表:

  • MOVS:串传送。 (MOVSB 传送字符,MOVSW 传送字,MOVSD 传送双字)
  • CMPS:串比较。 (CMPSB 比较字符,CMPSW 比较字)
  • SCAS:串扫描。
  • LODS:装入串。(LODSB 传送字符,LODSW 传送字,LODSD 传送双字)
  • STOS:保存串。

重复前缀:

  • REP:当CX/ECX<>0时重复。
  • REPE/REPZ:当ZF=1或比较结果相等,且CX/ECX<>0时重复。
  • REPNE/REPNZ:当ZF=0或比较结果不相等,且CX/ECX<>0时重复。
  • REPC:当CF=1CX/ECX<>0时重复。
  • REPNC:当CF=0CX/ECX<>0时重复。

五、程序转移指令

1. 无条件转移指令 (长转移)

  • JMP:无条件转移指令。
  • CALL:过程调用。
  • RET/RETF:过程返回。

2. 条件转移指令 (短转移,-128到+127的距离内)

  • JA/JNBE:不小于或不等于时转移。
  • JAE/JNB:大于或等于转移。
  • JB/JNAE:小于转移。
  • JBE/JNA:小于或等于转移。
  • ... (其他条件转移指令)

3. 循环控制指令(短转移)

  • LOOPCX不为零时循环。
  • LOOPE/LOOPZCX不为零且标志Z=1时循环。
  • LOOPNE/LOOPNZCX不为零且标志Z=0时循环。
  • JCXZCX为零时转移。
  • JECXZECX为零时转移。

4. 中断指令

  • INT:中断指令。
  • INTO:溢出中断。
  • IRET:中断返回。

5. 处理器控制指令

  • HLT:处理器暂停,直到出现中断或复位信号才继续。
  • WAIT:当芯片引线TEST为高电平时使CPU进入等待状态。
  • ... (其他处理器控制指令)

六、伪指令

  • DW:定义字(2字节)。
  • PROC:定义过程。
  • ENDP:过程结束。
  • SEGMENT:定义段。
  • ASSUME:建立段寄存器寻址。
  • ENDS:段结束。
  • END:程序结束。
posted @ 2024-05-15 23:54  jeanhua  阅读(19)  评论(0编辑  收藏  举报