一、数据传送指令
1.通用传送指令
- 格式: MOV dest, src; dest←src
- dest 可以是寄存器,存储器,累加器(acc),段寄存器
- src 可以是立即数,存储器,寄存器,累加器,段寄存器
- 传送字节还是字要看寄存器是8位还是16位的。如果没有寄存器寻址,则用byte ptr或word ptr指明。如:
MOV BYTE PTR DS:[2056H], 23
2.堆栈操作指令
- 格式
- PUSH src ;进栈。 SP ←SP-2, (SS:SP) ←src
- POP dest ;出栈。 dest ←(SS:SP), SP ←SP+2
- PUSHF ;标志寄存器(Flags)进栈
- POPF ;标志寄存器(Flags)出栈
- src 寄存器,存储器,段寄存器
- 操作数必须是16位的
3.交换指令
- 格式 XCHG op1,op2 ;交换op1和op2的内容
- 两操作数中必须有一个在寄存器中;
- 操作数不能为段寄存器和立即数;
- 源和目地操作数类型要一致
4.查表指令
- 格式 XLAT ; AL <- (BX + AL)
- 根据表项序号查出表中对应代码的内容
- 执行时先将表的首地址(偏移地址)送到BX中,表项序号(即偏移量)存于AL中,执行XLAT后查出的内容放在AL中
5.输入输出指令
- 格式:
- IN acc, PORT ; acc←端口(地址为PORT)内容,PORT取值0~255。
- IN acc, DX ; acc←端口(地址在DX中)内容。
- OUT PORT, acc ; 端口(地址为PORT)内容← acc
- OUT DX, acc ; 端口(地址在DX中)内容← acc
- 只限于用累加器AL或AX来传送信息
6.地址传送指令
-
格式
- LEA reg, mem ; 将指定存储器的16位偏移地址送指定寄存器
- LDS reg, mem32 ; DS:reg←(从mem32开始的4个内存字节)
- LES reg, mem32 ; ES:reg←(从mem32开始的4个字节)
说
-
源操作数必须是一个内存操作数, reg必须是一个16位的通用寄存器
例:
MOV AX, 3000H
MOV DS, AX
MOV SI, 2000H
LEA BX, [SI+10H] ; 执行LEA指令后, ( BX) =2010H
LDS DI, [SI+10H] ; 执行LDS指令后,( DI) =1234H, (DS)=5678H
LEA BX, BUFFER ;BUFFER=5FE0H
MOV BX, OFFSET BUFFER ;(BX) =5FE0H
7.标志传送指令
- 格式
- LAHF ! 读标志指令。 LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位
- SAHF ! 设置标志指令。 SAHF的功能与LAHF的功能正好相反
注意:数据传送指令中, 除SAHF和POPF这两条指令外, 其余所有指令均不影响标志位