汇编语言常见指令.docx

上传人:b****1 文档编号:3362941 上传时间:2023-05-05 格式:DOCX 页数:15 大小:21.65KB
下载 相关 举报
汇编语言常见指令.docx_第1页
第1页 / 共15页
汇编语言常见指令.docx_第2页
第2页 / 共15页
汇编语言常见指令.docx_第3页
第3页 / 共15页
汇编语言常见指令.docx_第4页
第4页 / 共15页
汇编语言常见指令.docx_第5页
第5页 / 共15页
汇编语言常见指令.docx_第6页
第6页 / 共15页
汇编语言常见指令.docx_第7页
第7页 / 共15页
汇编语言常见指令.docx_第8页
第8页 / 共15页
汇编语言常见指令.docx_第9页
第9页 / 共15页
汇编语言常见指令.docx_第10页
第10页 / 共15页
汇编语言常见指令.docx_第11页
第11页 / 共15页
汇编语言常见指令.docx_第12页
第12页 / 共15页
汇编语言常见指令.docx_第13页
第13页 / 共15页
汇编语言常见指令.docx_第14页
第14页 / 共15页
汇编语言常见指令.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编语言常见指令.docx

《汇编语言常见指令.docx》由会员分享,可在线阅读,更多相关《汇编语言常见指令.docx(15页珍藏版)》请在冰点文库上搜索。

汇编语言常见指令.docx

汇编语言常见指令

汇编语言常见指令

 

 

————————————————————————————————作者:

———————————————————————————————— 日期:

 

“PTR”操作符:

强制类型转换

MOVBYTE PTR[BX],20H

ﻩ;1B立即数20H送DS:

[BX]

MOVWORDPTR [BX], 20Hﻩ

ﻩ;立即数20H送DS:

[BX],

;00H送DS:

[BX+1]

2.LEA(LoadEffectiveAddress)

设:

变量X的偏移地址为1020H ,(BP)=0020H

执行指令后:

LEADX,X ﻩ

LEABX,[BP]

;执行后,(DX)= 1020H

; 执行后,(BX)= 0020H

3.地址传送指令LDS,LES

LDSﻩREG16, MEM ;从存储器取出4B,送入REG16和DS

LESﻩREG16,MEM;从存储器取出4B,送入REG16和ES

4. 符号扩展指令CBW,CWD

CBWﻩ;将AL寄存器内容符号位扩展到AH

CWD;将AX寄存器内容符号位扩展到DX

设:

(AX)=8060H,(DX)=1234H

执行下列指令后

 CBW 

ﻩ;(AX)= 0060H 

设:

(AX)=8060H,(DX)=1234H

执行下列指令后

 CWD 

ﻩ;(DX)=0FFFFH,(AX)=8060H 

5. 交换指令XCHG

例如,(AX)= 5678H

执行下面指令后

XCHGﻩAH, ALﻩ

               ;(AX)=7856H

6.换码指令XLAT

XLATﻩ;AL←DS:

[BX+AL]

表格的首地址事先存放在内存逻辑地址DS:

 BX中,

AL的内容是相对于表格的位移量,

把对应内存的内容取出放在AL寄存器。

7. 逻辑运算符

SHR(右移)

SHL(左移)

AND(与)

OR(或)

XOR(异或)

NOT(取反

8.关系运算符

关系运算符用于两个数的比较,结果为“真(-1)”或“假(0)”

GT(>)

GE(>=)

LT(<)

LE(<=)

EQ(=)

NE(≠)

9.地址运算符

SEG  名称 取地址表达式所在段的段基址

OFFSET  名称取地址表达式的偏移地址

10.类型操作符

TYPE:

  取每个变量的字节数

LENGTH:

  取变量定义了多少个

SIZE:

    取变量占用的字节总数

11. 加法指令

(1)ADD(Addition):

加法指令

格式:

ADD  dest,src

功能:

dest ←dest+src

dest(目的操作数):

8/16位的寄存器/存储器操作数

src(源操作数):

与目的操作数同类型的寄存器/存储器/立即数

例:

ADDAX, SI  ;AX←(AX)+(SI),16位运算

ADDﻩX,3ﻩ  ; X←(X)+3,运算位数由X的类型确定

ﻩﻩADD[BX],DX  ; DS:

[BX]←DS:

[BX]+DX,16位运算

说明:

•状态标志CF,OF, ZF,SF,PF,AF按照运算结果被刷新;

(2)ADC(AdditionwithCarry):

带进位的加法指令

格式:

ADCdest,src

功能:

dest←dest+src+CF

dest(目的操作数):

8/16位的寄存器/存储器

src(源操作数):

与目的操作数同类型的寄存器/存储器/立即数

说明:

•状态标志CF,OF, ZF,SF,PF, AF按照运算结果被刷新;

•主要用于对数据分段相加时高位的加法运算。

(3)INC(Increment):

加一指令

格式:

INCﻩ dest

功能:

dest←dest+1

dest(目的操作数):

8/16位的寄存器/存储器

例:

ﻩﻩINCﻩX

ﻩﻩﻩ;X←(X)+1,运算位数由X的类型确定

   INCﻩWORD PTR [BX]

        ;DS:

[ BX]←DS:

[BX]+1,16位运算

说明:

•会影响标志OF,ZF,SF,PF, AF,但是CF标志不受影响;

•增量指令常常用来修改计数器和存储器指针的值。

12. 减法指令

(1)SUB(Subtract):

减法指令

格式:

SUBﻩ dest,src

功能:

dest←  dest-src

dest(目的操作数):

8/16位的寄存器/存储器

src(源操作数):

与目的操作数同类型的寄存器/存储器/立即数

例:

 SUB  Y,20H ;Y←(Y)-20H,运算位数由Y的类型确定

SUBWORD PTR[BP],5ﻩ

ﻩﻩﻩ;SS:

[BP] ←SS:

[BP]-5,16位运算

说明:

会影响CF, OF, ZF, SF,PF,AF标志位。

(2)SBB(SubtractwithBorrow):

带借位的减法指令

格式:

SBBﻩdest,src

功能:

dest←dest-src-CF

dest(目的操作数):

8/16位的寄存器/存储器

src(源操作数):

与dest同类型的寄存器/存储器/立即数

说明:

•会影响CF,OF,ZF,SF,PF,AF标志位;

•主要用于对一个数据分段相减时高位的减法运算

(3)DEC(Decrement):

减一指令

格式:

DECﻩ  dest

功能:

dest←dest-1

dest(目的操作数):

8/16位的寄存器/存储器

例:

DEC CX;CX←(CX)-1,16位运算

  DECXﻩﻩ;X←(X)-1,运算位数由X的类型确定

说明:

•会影响标志OF, ZF, SF,PF,AF,但是CF标志不受影响;

•减量指令常常用来修改计数器和存储器指针的值。

(4)NEG(Negate):

求补指令(求相反数)

格式:

NEGﻩ dest

功能:

dest←0-dest

dest(目的操作数):

8/16位的寄存器/存储器

例:

ﻩNEG Z  ;Z←-Z,运算位数由Z的类型确定

说明:

  会影响标志OF, ZF,SF, PF,AF, CF

 

13.乘法指令

(1)MUL(UnsignedMultiplication):

无符号数乘法

格式:

MUL src

src(源操作数):

8位/16位的寄存器/存储器

功能:

8位源操作数时:

AX←(AL)×源操作数

 16位源操作数时:

DX, AX←(AX)×源操作数

     

说明:

•两个N位操作数相乘,得到2N位的乘积;

•如果乘积的高N位为0,则CF=OF=0,否则CF=OF=1。

其余

 标志位无意义。

•上述说明中N=8或16。

(2)IMUL(Signed IntegerMultiplication):

有符号数乘法

格式:

IMUL src

src(源操作数):

8位/16位的寄存器/存储器

功能:

8位源操作数时:

AX←(AL)×源操作数

16位源操作数时:

DX, AX←(AX)×源操作数

说明:

●两个N位操作数相乘,得到2N位的乘积;

●如果乘积高N位为低N位的符号扩展,则CF=OF=0,否则ﻫ CF=OF=1,其余标志位无意义。

 

●上述说明中N=8或16。

14.除法指令:

DIV(UnsignedDivision):

无符号除法

格式:

DIVsrc

src(源操作数):

8位/16位的寄存器/存储器

功能:

8位源操作数时:

(AX)÷源操作数,AL←商,AH←余数

16位源操作数时:

(DX,AX)÷源操作数,AX←商,DX←余数

说明:

ﻩﻩﻩ

•两个N位操作数相除,应首先把被除数零扩展为2N位;

例如,要进行除法(AX)÷(BX),假设AX、BX内均为无符号数:

MOVﻩDX,0ﻩ;32位被除数高16位清零

ﻩDIVBX;(DX,AX)÷BX,AX←商,DX←余数

•如果(2N位)÷(N位)的商大于2N-1,会产生“除法溢出”错误。

•上述说明中N=8或16。

IDIV(SignedIntegerDivision):

有符号数除法

格式:

IDIVﻩsrc

src(源操作数):

8位/16位的寄存器/存储器

功能:

8位源操作数时:

(AX)÷源操作数,AL←商,AH←余数

16位源操作数时:

(DX,AX) ÷源操作数,AX←商,DX←余数

 

15.基本循环指令

格式:

LOOPﻩ标号

功能:

CX←(CX)-1

如果(CX)≠0,转向“标号”处执行,否则执行下一条指令。

说明:

•LOOP可以改变指令的执行次序,称为“控制转移指令”;

•LOOP指令使一段程序重复地执行,称为“循环”。

•重复执行的次数由CX寄存器中的值决定。

CX寄存器因此称为ﻫ  “计数器”。

16.DEBUG.EXE常用命令

⏹反汇编

‘-U’ 、‘-U偏移地址’

⏹显示寄存器内容

 ‘-R ’、‘-R寄存器名’

⏹单步执行指令

  ‘-T’ 、 ‘-T指令条数’ 、‘-P’

⏹全速执行指令

   ‘-G ’ 、‘-G 终止地址’、 ‘-G=起始地址’

 ‘-G=起始地址终止地址’

⏹显示数据段内容

  ‘-D’、‘-D 起始地址’、 ‘-D起始地址L字节数’

⏹修改数据段内容

 ‘-E 起始地址 数据1 数据2 …’

 ‘-F 起始地址L字节数 数据1 数据2…’

⏹退出

 ‘-Q ’

17.移位指令

SHL 逻辑左移,最高位进入CF,最低位补0

SHR逻辑右移,最低位进入CF,最高位补0

SAL算术左移,最高位进入CF,最低位补0

SAR算术右移,最低位进入CF,最高位不变

18.循环移位指令

ROL不带进位循环左移

ROR 不带进位循环右移

RCL带进位循环左移

RCR带进位循环右移

18. 无条件转移指令

∙⑴段内转移、直接寻址

∙⑵段内转移、间接寻址

∙⑶段间转移、直接寻址

∙⑷段间转移、间接寻址

JMPlabel

⏹转到label指定的目标地址处,执行那里的指令

⏹目的地址label的位置有2种情形:

⏹和JMP指令在同一个段,叫做段内转移,转移时CPU只改变IP;

⏹和JMP指令不在同一个段,叫做段间转移,转移时CPU既要更改IP又要更改CS,

⏹目的地址label有两种表示方式:

⏹label是目标地址处指令的标号,叫做直接寻址

⏹label是寄存器或内存单元,跳转目的地址在寄存器或内存中,叫做间接寻址

19.比较测试指令

指令操作码

指令格式

功能描述

CMP

CMP dest,src

(dest)-(src),不存结果

TEST

TEST dest, src

(dest)∧(src),不存结果

目的操作数dest:

8位/16位的寄存器/存储器操作数。

源操作数src:

与dest同类型的寄存器/存储器/立即数。

功能:

运算后影响标志位,但不保留运算结果。

用途:

•CMP——比较两个数的大小关系,但不改变它们的值。

ØAX?

=BX

•TEST——判断目的操作数中个别二进制位,但不改变它的值。

Ø判断一个数的奇偶性

20.条件转移指令

Jxxlabel

“J”----Jump

“xx”是转移的条件

“label”只能为目标指令的标号。

都属于段内短转移。

操作码助记符

条件

指令功能

JZ/JE

ZF=1

相等或为0转移

JNZ/JNE

ZF=0

不相等或不为0转移

JS

SF=1

结果是负数,则转移

JNS

SF=0

结果不是负数,则转移

JO

OF=1

结果溢出,则转移

JNO

OF=0

结果没有溢出,则转移

JP/JPE

PF=1

低位字节有偶数个1,则转移

JNP/JPO

PF=0

低位字节有奇数个1,则转移

JB/JNAE/JC

CF=1

有进借位或<,则转移

JAE/JNB/JNC

CF=0

无进借位或≥,则转移

JBE/JNA

CF=1或ZF=1

≤,则转移

JA/JNBE

CF=0且ZF=0

>,则转移

JL/JNGE

SF≠OF

<,则转移

JGE/JNL

SF=OF

≥,则转移

JLE/JNG

SF≠OF或ZF=1

≤,则转移

JG/JNLE

SF=OF且ZF=0

>,则转移

JCXZ

CX=0

CX=0,则转移

 

21.调用指令

CALL(Call,调用)指令

•段内直接调用

ﻩ格式:

CALLﻩ子程序名

  操作:

SP←SP-2,SS:

[SP]←IP(保存16位返回地址)

 ﻩﻩIP←子程序入口的偏移地址

•段内间接调用

格式:

CALLREG16/MEM16 

操作:

SP←SP-2, SS:

[SP]←IP(保护16位返回地址)

ﻩIP← REG16/MEM16

•段间直接调用

格式:

CALL FARPTR子程序名

操作:

ﻩSP←SP-2,SS:

[SP]←CS

ﻩSP←SP-2,SS:

[SP]←IP 

  (以上是保存32位返回地址,偏移地址保存在较小地址处)

   IP←子程序入口的偏移地址,

ﻩCS←子程序入口的段基址

•段间间接调用

格式:

CALLﻩMEM32

操作:

SP←SP-2,SS:

[SP]←CS

SP←SP-2,SS:

[SP]← IP

ﻩIP←[MEM32],CS←[MEM32+2]

(1)ﻩCALLPROC1

(2) LEACX,PROC1

ﻩCALLﻩCX

(3)ADDR_PROC1DWPROC1  ;子程序偏移地址

ﻩ……

CALLﻩADDR_PROC1;调用近程子程序PROC1

(4)LEAﻩBX,ADDR_PROC1

CALLWORDPTR[BX]ﻩ;调用近程子程序PROC1

22.RET指令

⏹  无参数段内返回

ﻩ格式:

RET

ﻩ操作:

IP← SS:

[SP],SP←SP+2

⏹有参数段内返回

ﻩﻩ格式:

RETD16  ﻩﻩ;其中D16代表16位数据

ﻩ操作:

IP← SS:

[SP],SP←SP+2

   ﻩ   SP← SP+D16

⏹无参数段间返回 

ﻩ格式:

RET

操作:

IP←SS:

[SP], SP←SP+2

ﻩﻩﻩCS←SS:

[SP], SP←SP+2

⏹有参数段间返回

 格式:

RET D16;其中D16代表16位数据

ﻩ操作:

ﻩIP←SS:

[SP],SP←SP+2

ﻩCS←SS:

[SP], SP←SP+2

 ﻩSP←SP+D16

23.宏指令

宏定义

macro_name MACRO[哑元表];形参/虚参

          [LOCAL标号表]

     ……   (宏定义体) 

       ……

        ENDM

 *如果宏定义体内有一个或多个语句标号,则必须用LOCAL伪操作列出所有的语句标号。

宏调用

macro_name [实元表];实参

*实元表中的实元与哑元表中的哑元在位置上一一对应;

*若实元数>哑元数,则多余的实元无效;

*若实元数<哑元数,则多余的哑元作“空(NUL)”处理;

*对宏指令的调用必须先定义后调用。

宏定义独立于逻辑段。

宏展开

⏹把宏定义体复制到调用宏指令的位置上,同时用实元取代哑元,由LOCAL定义的标号也由?

?

0000~?

FFFF替代。

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

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2