8088汇编速查资料.docx

上传人:b****3 文档编号:12673222 上传时间:2023-04-21 格式:DOCX 页数:20 大小:22.98KB
下载 相关 举报
8088汇编速查资料.docx_第1页
第1页 / 共20页
8088汇编速查资料.docx_第2页
第2页 / 共20页
8088汇编速查资料.docx_第3页
第3页 / 共20页
8088汇编速查资料.docx_第4页
第4页 / 共20页
8088汇编速查资料.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

8088汇编速查资料.docx

《8088汇编速查资料.docx》由会员分享,可在线阅读,更多相关《8088汇编速查资料.docx(20页珍藏版)》请在冰豆网上搜索。

8088汇编速查资料.docx

8088汇编速查资料

8088汇编速查手册

一、数据传输指令

───────────────────────────────────────

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

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装入有效地址.

例:

LEADX,string;把偏移地址存到DX.

LDS传送目标指针,把指针内容装入DS.

例:

LDSSI,string;把段地址:

偏移地址存到DS:

SI.

LES传送目标指针,把指针内容装入ES.

例:

LESDI,string;把段地址:

偏移地址存到ES:

DI.

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

例:

LFSDI,string;把段地址:

偏移地址存到FS:

DI.

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

例:

LGSDI,string;把段地址:

偏移地址存到GS:

DI.

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

例:

LSSDI,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次.

移位一次时,可直接用操作码.如SHLAX,1.

移位>1次时,则由寄存器CL给出移位次数.

如MOVCL,04

SHLAX,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/ECX<>0时重复.

REPE/REPZ当ZF=1或比较结果相等,且CX/ECX<>0时重复.

REPNE/REPNZ当ZF=0或比较结果不相等,且CX/ECX<>0时重复.

REPC当CF=1且CX/ECX<>0时重复.

REPNC当CF=0且CX/ECX<>0时重复.

五、程序转移指令

───────────────────────────────────────

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

JMP无条件转移指令

CALL过程调用

RET/RETF过程返回.

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

(当且仅当(SFXOROF)=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>循环控制指令(短转移)

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

8088汇编跳转

一、状态寄存器

PSW(ProgramFlag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

 

 

 

 

OF

DF

IF

TF

SF

ZF

 

AF

 

PF

 

CF

条件码:

①OF(OverflowFlag)溢出标志。

溢出时为1,否则置0。

②SF(SignFlag)符号标志。

结果为负时置1,否则置0.

③ZF(ZeroFlag)零标志,运算结果为0时ZF位置1,否则置0.

④CF(CarryFlag)进位标志,进位时置1,否则置0.

⑤AF(AuxiliarycarryFlag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。

有进位时1,否则置0.

⑥PF(ParityFlag)奇偶标志。

结果操作数中1的个数为偶数时置1,否则置0.

控制标志位:

⑦DF(DirectionFlag)方向标志,在串处理指令中控制信息的方向。

⑧IF(InterruptFlag)中断标志。

⑨TF(TrapFlag)陷井标志。

二、直接标志转移(8位寻址)

指令格式

机器码

测试条件

如...则转移

 

 

指令格式

机器码

测试条件

如...则转移

JC

72

C=1

有进位

JNS

79

S=0

正号

JNC

73

C=0

无进位

JO

70

O=1

有溢出

JZ/JE

74

Z=1

零/等于

JNO

71

O=0

无溢出

JNZ/JNE

75

Z=0

不为零/不等于

JP/JPE

7A

P=1

奇偶位为偶

JS

78

S=1

负号

JNP/IPO

7B

P=0

奇偶位为奇

三、间接标志转移(8位寻址)

指令格式

机器码

测试格式

如...则转移

JA/JNBE(比较无符号数)

77

C或Z=0

> 高于/不低于或等于

JAE/JNB(比较无符号数)

73

C=0

>= 高于或等于/不低于

JB/JNAE(比较无符号数)

72

C=1

< 低于/不高于或等于

JBE/JNA(比较无符号数)

76

C或Z=1

<= 低于或等于/不高于

JG/JNLE(比较带符号数)

7F

(S异或O)或Z=0

> 大于/不小于或等于

JGE/JNL(比较带符号数)

7D

S异或O=0

>= 大于或等于/不小于

JL/JNGE(比较带符号数)

7C

S异或O=1

< 小于/不大于或等于

JLE/JNG(比较带符号数)

7E

(S异或O)或Z=1

<= 小于或等于/不大于

四、无条件转移指令(fisheep译fisheep@)

操作码

伪码指令

含义

EB cb

JMPrel8

相对短跳转(8位),使rel8处的代码位下一条指令

E9 cw

JMPrel16

相对跳转(16位),使rel16处的代码位下一条指令

FF /4

JMPr/m16

绝对跳转(16位),下一指令地址在r/m16中给出

FF /4

JMPr/m32

绝对跳转(32位),下一指令地址在r/m32中给出

EA cb

JMPptr16:

16

远距离绝对跳转,下一指令地址在操作数中

EA cb

JMPptr16:

32

远距离绝对跳转,下一指令地址在操作数中

FF /5

JMPm16:

16

远距离绝对跳转,下一指令地址在内存m16:

16中

FF /5

JMPm16:

32

远距离绝对跳转,下一指令地址在内存m16:

32中

五、16位/32位寻址方式(fisheep译fisheep@)

操作码

伪码指令

跳转含义

跳转类型

跳转的条件(标志位)

0F87 cw/cd

JArel16/32

大于

near

(CF=0andZF=0)

0F83 cw/cd

JAErel16/32

大于等于

near

(CF=0)

0F82 cw/cd

JBrel16/32

小于

near

(CF=1)

0F86 cw/cd

JBErel16/32

小于等于

near

(CF=1orZF=1)

0F82 cw/cd

JCrel16/32

进位

near

(CF=1)

0F84 cw/cd

JErel16/32

等于

near

(ZF=1)

0F84 cw/cd

JZrel16/32

为0

near

(ZF=1)

0F8F cw/cd

JGrel16/32

大于

near

(ZF=0andSF=OF)

0F8D cw/cd

JGErel16/32

大于等于

near

(SF=OF)

0F8C cw/cd

JLrel16/32

小于

near

(SF<>OF)

0F8E cw/cd

JLErel16/32

小于等于

near

(ZF=1orSF<>OF)

0F86 cw/cd

JNArel16/32

不大于

near

(CF=1orZF=1)

0F82 cw/cd

JNAErel16/32

不大于等于

near

(CF=1)

0F83 cw/cd

JNBrel16/32

不小于

near

(CF=0)

0F87 cw/cd

JNBErel16/32

不小于等于

near

(CF=0andZF=0)

0F83 cw/cd

JNCrel16/32

不进位

near

(CF=0)

0F85 cw/cd

JNErel16/32

不等于

near

(ZF=0)

0F8E cw/cd

JNGrel16/32

不大于

near

(ZF=1orSF<>OF)

0F8C cw/cd

JNGErel16/32

不大于等于

near

(SF<>OF)

0F8D cw/cd

JNLrel16/32

不小于

near

(SF=OF)

0F8F cw/cd

JNLErel16/32

不小于等于

near

(ZF=0andSF=OF)

0F81 cw/cd

JNOrel16/32

未溢出

near

(OF=0)

0F8B cw/cd

JNPrel16/32

不是偶数

near

(PF=0)

0F89 cw/cd

JNSrel16/32

非负数

near

(SF=0)

0F85 cw/cd

JNZrel16/32

非零(不等于)

near

(ZF=0)

0F80 cw/cd

JOrel16/32

溢出

near

(OF=1)

0F8A cw/cd

JPrel16/32

偶数

near

(PF=1)

0F8A cw/cd

JPErel16/32

偶数

near

(PF=1)

0F8B cw/cd

JPOrel16/32

奇数

near

(PF=0)

0F88 cw/cd

JSrel16/32

负数

near

(SF=1)

0F84 cw/cd

JZrel16/32

为零(等于)

near

(ZF=1)

注:

一些指令操作数的含义说明:

 rel8   表示8位相对地址

 rel16  表示16位相对地址

 rel16/32 表示16或32位相对地址

 r/m16  表示16位寄存器

 r/m32  表示32位寄存器

浮点指令

  对下面的指令先做一些说明:

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. 数据传递和对常量的操作指令

指令格式

指令含义

执行的操作

FLDsrc

装入实数到st(0)

st(0)<-src(mem32/mem64/mem80)

FILDsrc

装入整数到st(0)

st(0)<-src(mem16/mem32/mem64)

FBLDsrc

装入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)

 

FSTdest

保存实数st(0)到dest

dest<-st(0)(mem32/mem64)

FSTPdest

 

dest<-st(0)(mem32/mem64/mem80);然后再执行一次出栈操作

FISTdest

将st(0)以整数保存到dest

dest<-st(0)(mem32/mem64)

FISTPdest

 

dest<-st(0)(mem16/mem32/mem64);然后再执行一次出栈操作

FBSTdest

将st(0)以BCD保存到dest

dest<-st(0)(mem80)

FBSTPdest

 

dest<-st(0)(mem80);然后再执行一次出栈操作

2.比较指令

指令格式

指令含义

执行的操作

FCOM

实数比较

将标志位设置为st(0)-st

(1)的结果标志位

FCOMop

实数比较

将标志位设置为st(0)-op(mem32/mem64)的结果标志位

 

FICOMop

和整数比较

将Flags值设置为st(0)-op的结果op(mem16/mem32)

FICOMPop

和整数比较

将st(0)和op比较op(mem16/mem32)后;再执行一次出栈操作

 

FTST

零检测

将st(0)和0.0比较

FUCOMst(i)

 

比较st(0)和st(i)[486]

FUCOMPst(i)

 

比较st(0)和st(i),并且执行一次出栈操作

FUCOMPPst(i)

 

比较st(0)和st(i),并且执行两次出栈操作

FXAM

 

Examine:

Eyeballst(0)(setconditioncodes)

3.运算指令

指令格式

指令含义

执行的操作

加法

FADD

加实数

st(0)<-st(0)+st

(1)

FADDsrc

 

st(0)<-st(0)+src(mem32/mem64)

FADDst(i),st

 

st(i)<-st(i)+st(0)

FADDPst(i),st

 

st(i)<-st(i)+st(0);然后执行一次出栈操作

FIADDsrc

加上一个整数

st(0)<-st(0)+src(mem16/mem32)

减法

FSUB

减去一个实数

st(0)<-st(0)-st

(1)

FSUBsrc

 

st(0)<-st(0)-src(reg/mem)

FSUBst(i),st

 

st(i)<-st(i)-st(0)

FSUBPst(i),st

 

st(i)<-st(i)-st(0),然后执行一次出栈操作

FSUBRst(i),st

用一个实数来减

st(0)<-st(i)-st(0)

FSUBRPst(i),st

 

st(0)<-st(i)-st(0),然后执行一次出栈操作

FISUBsrc

减去一个整数

st(0)<-st(0)-src(mem16/mem32)

FISUBRsrc

用一个整数来减

st(0)<-src-st(0)(mem16/mem32)

乘法

FMUL

乘上一个实数

st(0)<-st(0)*st

(1)

FMULst(i)

 

st(0)<-st(0)*st(i)

FMULst(i),st

 

st(i)<-st(0)*st(i)

FMULPst(i),st

 

st(i)<-st(0)*st(i),然后执行一次出栈操作

FIMULsrc

乘上一个整数

st(0)<-st(0)*src(m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1