汇编.docx

上传人:b****5 文档编号:5649717 上传时间:2022-12-30 格式:DOCX 页数:43 大小:37.67KB
下载 相关 举报
汇编.docx_第1页
第1页 / 共43页
汇编.docx_第2页
第2页 / 共43页
汇编.docx_第3页
第3页 / 共43页
汇编.docx_第4页
第4页 / 共43页
汇编.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

汇编.docx

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

汇编.docx

汇编

第一章绪论

(数制转换、带符号数表示法、计算机系统内部结构和外部结构)

第二章Intel8088微处理器

(Intel8088微处理器的内部结构、寄存器结构、存储器结构、物理地址的计算)

第三章指令系统与寻址方式

(寻址方式、数据传送指令)

第三章指令系统与寻址方式

(算术运算指令、逻辑运算指令、移位指令)

第三章指令系统与寻址方式

(串操作指令、控制转移指令)

第四章伪指令

(汇编语言常用伪指令介绍)

第3章寻址方式和指令系统

主要内容:

本章主要介绍8086/8088寻址方式和指令系统中的部分指令。

学习要求:

熟悉掌握8086/8088指令系统常用的七种寻址方式,能够正确找出操作数的寻址方式。

熟悉掌握各类指令的特点、功能和对标志位的影响,以及正确的书写格式。

第3章寻址方式和指令系统

3.1寻址方式(重点)

3.280X86扩展的寻址方式(略)

3.3汇编指令语句格式(重点)

3.48086/8088指令系统(重点)

3.580386新增指令(了解)

3.680486新增指令(略)

3.780586新增指令(略)

3.1寻址方式

寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法

立即寻址

寄存器寻址

直接寻址

寄存器间接寻址

基址寻址

变址寻址

基址加变址寻址

相对基址加变址寻址

段默认与段跨越

3.1.1立即寻址

立即寻址方式:

操作数紧跟在操作码之后,作为指令的一部分,与操作码一起放在代码段中。

汇编格式:

n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)

功能:

操作数存放在存储器,指令下一单元的内容为立即操作数n。

图形表示:

动画演示

【例】

MOVAX,10

执行后(AX)=?

该例中源操作数为立即寻址方式,立即数为10,存放在指令的下一单元。

图形表示:

执行:

10→AX

执行后:

(AX)=000AH

3.1.2寄存器寻址

寄存器寻址方式:

操作数在指令指明的寄存器中。

汇编格式:

R其中R表示寄存器名。

功能:

操作数直接存放在寄存器R中。

图形表示:

R

指令→操作数

动画演示

【例】

下列程序执行后,(AX)=?

,(BX)=?

MOVAX,1234H

MOVBX,5678H

ADDAX,BX

该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。

第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。

第三条指令中,AX为目的操作数地址,BX为源操作数地址。

源地址和目的地址皆为寄存器寻址方式。

图形表示:

执行:

1234H→AX

5678H→BX

(AX)+(BX)→AX

执行后:

(AX)=68ACH,(BX)=5678H

3.1.3直接寻址

汇编格式:

①含有变量的地址表达式。

②段寄存器名:

[EA]。

功能:

指令下一字单元的内容是操作数的偏移地址EA。

图形表示:

【例】

【例】寄存器和存储器内容为:

(AX)=1212H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。

执行指令:

MOVAX,BUF

执行后:

(AX)=?

图形表示:

执行:

(32000H)→AX

执行后:

(AX)=4545H

3.1.4寄存器间接寻址

寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址EA,操作数在存储器中。

汇编格式:

[R]

功能:

操作数存放在存储器,寄存器R存放操作数的偏移地址EA。

执行指令:

MOVAX,[BP]

执行后:

(AX)=?

,(BP)=?

,(SS)=?

,(20030H)=?

图形表示如下:

3.1.5基址寻址

基址寻址:

偏移地址是指令中给定的偏移量和寄存器BX或基数指针BP的内容之和。

3.1.6变址寻址

变址寻址方式操作数的偏移地址EA为寄存器的内容加位移量,操作数在存储器中。

汇编格式:

X[R](X表示位移量,是8位或16位二进制补码表示的有符号数)

功能:

操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。

图形表示如下:

偏移地址EA计算方法如下:

【例】

设执行前:

(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H

执行指令:

ADD6[BX],AX

执行后:

(AX)=?

,(BX)=?

,(DS)=?

,(20036H)=?

图形表示如下:

3.1.7基址变址寻址

基址加变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容、变址寄存器内容、位移量X三项之和,操作数在存储器中。

汇编格式:

X[BR+IR]

功能:

操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。

图形表示:

操作数偏移地址EA计算方法如下

1.1.8相对基址变址

基址变址方式的一种扩展

如:

MOVAX,[BX+SI+10]

3.1.9段默认与段跨越

按前述规定:

若选用BP作间址基址寄存器、变址寄存器或基址寄存器,则操作数在堆栈段,操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加后形成;否则,操作数在数据段,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移EA相加后形成。

该规定为系统默认状态。

当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。

汇编格式:

段寄存器名:

操作数地址。

功能:

段寄存器名指明操作数属哪个段。

【例】跨段前缀示例。

MOVAX,DS:

[BP]

MOVCX,SS:

[SI]

该例中,DS:

,SS:

均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。

上述2条指令的源操作数物理地址分别为:

PA1=(DS)左移4位+[BP]

PA2=(SS)左移4位+[SI

3.280X86扩展寻址方式

鉴于扩充的存储器结构和多方式的存储器管理方式,寻址方式较8086/8088有一定的增强

32位通用寄存器作寄存器间接寻址

3.3汇编指令语句格式

一般情况下,汇编语言的语句可以由以下几部分组成:

[标号:

]指令助记符[目的操作数][,源操作数][;注释]

3.3.1标号:

表示本条语句的符号地址。

在汇编语言中,标号、内存变量名、子程序名和宏名等都是标识符,由字母、数字及规定的特殊字符(?

、@、_、$)等组成,并且不能用数字开头。

汇编语言不区分标识符中字母的大小写。

要求标识符尽可能取得有点含义,这会大大改善程序的可读性,并有助于对程序的理解。

但标识符不能是汇编语言的保留字,保留字主要是指:

指令助忆符、伪指令定义符、寄存器名以及一些具有特殊含义的字符串等。

例如:

MSG1、ERRMSG2、ASC1、asc2等是合法的标识符,而a1、ah、mov等就不是合法。

试比较ABCDH和0ABCDH之间的差异。

前者是标识符,而后者是十六位进制数值。

3.3.2指令助记符

汇编指令的符号代码。

如MOV,系统使用内部对照表将每条指令的助记符译成对应的机器码

3.3.3目的操作数

是操作符的操作对象。

操作符在完成相应的操作时要求有一系列的操作数。

当有两个或两个以上的操作数时,各操作数之间用逗号隔开。

作用:

1参与指令操作

2暂存操作结果

3.3.4源操作数如加数,减数

3.3.5注释

以“;”开头的说明部分,可以用英文或者中文书写。

注释字段是语句的非执行部分。

3.48086/8088指令系统

数据传送类指令

算术运算类指令

位操作类指令

串操作类指令

程序控制转移类指令

处理器控制类指令。

3.4.1数据传送类指令

通用数据传送指令

地址传送指令

标志传送指令

累加器专用指令

1通用数据传送指令

传送指令MOV

压栈指令PUSH

出栈指令POP

数据交换指令XCHG

1.传送指令MOV

语句格式:

MOVOPD,OPS

功能:

将源操作数传送入目的地址,源地址内容不变。

即(OPS)→OPD。

下图描述了MOV指令在传送数据时允许传送的路径及类型。

【例】存储器与寄存器间数据传送。

MOVAX,BUF;BUF是变量,源操作数为直接寻址

MOVBH,[DI];源操作数为寄存器间接寻址

MOVDI,ES:

3[SI];源操作数为变址寻址,使用跨段前缀

MOVBP,3[BX+SI];源操作数为基址加变址寻址

MOVBUFA,DL;BUFA是一字节变量

MOV[BP],AX;使用SS段寄存器

MOVDS:

[BP],DL;使用跨段前缀

MOVBUF,DS;BUF是个字变量

MOVES,BUF

注意

立即数的长度必须小于等于目的操作数的长度

如:

小于目的操作数时,高位按符号位扩展

MOVAX,4BH;(AX)=004BH

操作数分别位寄存器时,长度必须一致

CS,IP寄存器不能作DST操作数,不能用立即数直接为段寄存器赋值

不允许两个操作数都是存储器操作数MOV[100H],[BX]

立即数不能作目的操作数

不能将一个的内容直接送到另一段寄存器中

MOVAX,ES

MOVDS,AX

2堆栈操作指令

1.进栈指令PUSH

2.出栈指令POP

1.进栈指令PUSH

语句格式:

PUSHOPS

功能:

将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。

即:

①(SP)-1→SP(OPS)15~8→[SP]

②(SP)-1→SP(OPS)7~0→[SP]

例:

PUSHSI

PUSHCS

PUSH[1000H]

2.出栈指令POP

语句格式:

POPOPD

功能:

将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。

从POP指令功能可看出,该指令为PUSH指令的逆过程。

即:

①([SP])→(OPD)7~0(SP)+1→SP

②([SP])→(OPD)15~8(SP)+1→SP

例POPDS

POPBP

POPDX

POP[SI]

堆栈操作动画

4.数据交换指令XCHG

语句格式:

XCHGOPD,OPS

功能:

将源地址与目的地址中的内容互换。

即(OPD)→OPS,(OPS)→OPD。

【例】寄存器与存储器之间数据交换。

MOVAX,5678H;(AX)=5678H

MOVBX,0FFFFH;(BX)=0FFFFH

XCHGAX,BX;(AX)=0FFFFH,(BX)=5678H

2.地址传送指令

LEA(LoadEffectiveAddress)装载有效地址

LDS(LoadDSwithPoint)装载偏移地址及数据段指针

LES(LoadESwithPoint)装载偏移地址及附加数据段指针

方便开辟和激活新的数据段和附加段

1.传送偏移地址(有效地址)指令LEA

语句格式:

LEAOPD,OPS

功能:

主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。

【例】主存偏移地址的获取。

MOVBX,0100H;(BX)=0100H

MOVSI,0210H;(SI)=0210H

LEABX,1234[BX+SI];(BX)=1544H

区别:

LEA,MOV

MOVAX,[1000H]

LEAAX,[1000H]

2.传送偏移地址及数据段首址指令LDS

语句格式:

LDSOPD,OPS

功能:

将当前数据段中双字数据(数据段地址指针)装入到(通常为指针寄存器和变址寄存器)SI(低字)和段地址送入DS(高字)

例:

装载指针指令

BUFDW4100H,3000H

LDSSI,BUF;(SI)=4100H,(DS)=3000H

演示

3.传送偏移地址及附加数据段指令LES

语句格式:

LESOPD,OPS

操作:

(OPS)→OPD,(OPS+2)→ES。

功能:

将主存某字单元内容送指定寄存器。

例:

当前(DS)=1000H,(BX)=0020H,

(10020H)=405BH,(10022H)=4000H

则执行LESDI,[BX]

(ES)=4000H,(DI)=405BH

3.标志寄存器传送指令

1.标志送AH指令LAHF

2.AH送标志指令SAHF

3.标志寄存器进栈指令PUSHF

4.标志寄存器出栈指令POPF

1.标志送AH指令LAHF

语句格式:

LAHF

功能:

将标志寄存器的低8位送入AH寄存器。

即(FLAGS)7-0→AH。

该指令的执行对标志位无影响。

【例】标志寄存器传送。

执行前:

(FLAGS)=0485H,(AX)=0FFFFH

执行指令:

LAHF

演示

2.AH送标志指令SAHF

语句格式:

SAHF

功能:

将AH的内容送入标志寄存器的低8位,高8位不变。

即(AH)→FLAGS7-0.。

从该指令功能可看出,SAHF为LAHF的逆过程。

3.标志寄存器进栈指令PUSHF

语句格式:

PUSHF

功能:

将标志寄存器的内容压入堆栈。

即(FLAGS)→↓(SP)。

4.标志寄存器出栈指令POPF

功能:

将栈顶内容弹出送入标志寄存器中。

即↑(SP)→FLAGS。

POPF指令与PUSHF指令互为逆过程。

【例】将标志寄存器的单步标志TF置位。

PUSHF;(FLSGS)→↓(SP)

POPAX;(SP)→AX

ORAX,0100H;设置D8=TF=1

PUSHAX;(AX)→↓(SP)

POPF;(SP)→↓FLAGS,即(AX)→↓FLAGS

4.累加器专用传送指令

用于微处理器与外设之间传送信息和换码1.输入指令IN

2.输出指令OUT

3.换码指令XLAT(translatebytetoAL);从表格中取得编码

1.输入指令IN

输入指令用来从指定的外设寄存器取信息送入累加器。

它有四种形式:

(1)语句格式:

INAL,PORT

  功能:

(PORT)→AL

(2)语句格式:

INAX,PORT

  功能:

(PORT)→AX

(3)语句格式:

INAL,DX

  功能:

([DX])→AL

(4)语句格式:

INAX,DX

  功能:

([DX])→AL

2.输出指令OUT

输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:

(1)语句格式:

OUTPORT,AL

  功能:

(AL)→PORT

(2)语句格式:

OUTPORT,AX

  功能:

(AX)→PORT

(3)语句格式:

OUTDX,AL

  功能:

(AL)→[DX]

(4)语句格式:

OUTDX,AX

  功能:

(AX)→[DX]

3.查表转换指令XLAT

语句格式:

XLATOPS或XLAT

功能:

将(BX)为首址(AL)为位移量的字节存储单元中的数据送AL寄存器。

即([BX+AL])→AL。

例:

LEABX,TABLE

MOVAL,4

XLATTABLE

3.4.2算术运算类指令

1加法指令

2减运算指令

3乘运算指令

4除运算指令

1加法指令

加指令ADD

带进位加指令ADC

加1指令INC

1.加指令ADD

语句格式:

ADDOPD,OPS

功能:

将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。

即(OPD)+(OPS)→OPD。

ADDReg,RegADDAX,SI

ADDReg,MemADDDX,DATA[BX]

ADDMem,RegADDDATA[DI],AX

ADDMem,ImADDCOUNT[SI],100

ADDReg,ImADDBX,200

演示

3.带进位加指令ADC

语句格式:

ADCOPD,OPS

功能:

将目的操作数加源操作数再加低位进位,结果送目的地址。

即(OPD)+(OPS)+CF→OPD。

【例】无符号双字加法运算。

N1=420030AB,N2=90B0D400

计算N1+N2,和送入NUM

MOVAX,30ABH;

ADDAX,D400H;

MOVNUM,AX

MOVAX,4200H

ADCAX,90B0H;

MOV[NUM+2],AX

演示

1.加1指令INC

语句格式:

INCOPD

功能:

将目的操作数加1,结果送目的地址。

即(OPD)+1→OPD。

INC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。

如:

INCBX,即(BX)+1→BX。

加1指令可用于对计数器和地址指针进行调整。

2减运算指令

减指令SUB

带借位减指令SBB

减1指令DEC

求补指令NEG

比较指令CMP

1.减指令SUB(subtract)

语句格式:

SUBOPD,OPS

功能:

目的操作数减源操作数,结果存于目的地址,源地址内容不变。

即(OPD)-(OPS)→OPD

【例】减法运算。

MOVAX,5678H;(AX)=5678H

SUBAX,1234H;(AX)=4444H

MOVBX,3354H;(BX)=3354H

SUBBX,3340H;(BX)=0014H

2.带借位减指令SBB(subtractwithborrow)

语句格式:

SBBOPD,OPS

功能:

目的操作数减源操作数再减低位借位CF,结果送目的地址。

用于多字节减法

即(OPD)―(OPS)―CF→OPD

例已知有二个32位数分别放在变量FIRST和SECOND中,求两者之差并放在FIRST中。

MOVAX,wordptr;取低字

SUBAX,wordptr[SECOND];低字相减

MOVwordptr[FIRST],AX;保存低字取高字,

MOVAX,wordptr[FIRST+2];取被减数高16位

SBBAX,wordptr[SECOND+2];高字相减。

在低字相减时,有可能会产生“借位”

MOVwordptr[FIRST+2],AX;

3.减1指令DEC

语句格式:

DECOPD

功能:

将目的操作数减1,结果送目的地址。

即(OPD)-1→OPD。

DEC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。

如:

DECCX。

即(CX)-1→CX。

减1指令DEC也一般用于对计数器和地址指针的调整。

4.求补指令NEG

语句格式:

NEGOPD

功能:

将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。

即(OPD)+1→OPD。

【例】求补运算。

MOVAX,0FF64H

NEGAL;(AX)=0FF9CH

SUBAL,9DH;(AX)=0FFFFH

NEGAX;(AX)=0001H

DECAL;(AX)=0000H

NEGAX;(AX)=0000H

5.比较指令CMP

语句格式:

CMPOPD,OPS

功能:

目的操作数减源操作数,结果只影响标志位,不送入目的地址。

即(OPD)-(OPS)。

【例】比较AL的内容数值大小。

CMPAL,50;(AL)-50

JBBELOW;(AL)<50,转到BELOW处执行

SUBAL,50;(AL)>=50,(AL)-50→AL

INCAH;(AH)+1→AH

BELOW:

3乘运算指令

1.无符号数乘法指令MUL

2.有符号乘指令IMUL(SignedIntegerMultiply)

1.无符号数乘法指令MUL

语句格式:

MULOPS

功能:

若是字节数据相乘,(AL)与OPS相乘得到字数据存入AX中;若是字数据相乘,则(AX)与OPS相乘得到双字数据,高字存入DX、低字存入AX中。

即字节乘法:

(AL)*(OPS)→AX,

字乘法:

(AX)*(OPS)→DX,AX

【例】无符号数0A3H与11H相乘。

MOVAL,0A3H;(AL)=0A3H

MOVBL,11H;(BL)=11H

MULBL;(AX)=0AD3H

设在字变量A1,A2中分别存有两个16位无符号二进制数,现在要求它们的积,并将积存入以BUFFER为偏移地址的连续存区中

MOVAX,AL

   MULA2

   MOVBUFFER,AX

   MOVBUFFER+2,DX

 

2.有符号乘指令IMUL

语句格式:

IMULOPS

功能:

字节乘法:

(AL)*(OPS)→AX,字乘法:

(AX)*(OPS)→DX、AX。

IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。

【例】有符号数0B4H与11H相乘。

MOVAL,0B4H;(AL)=B4H

MOVBL,11H;(BL)=11H

IMULBL;(AX)=0FAF4H

4除运算指令

1.无符号除指令DIV

2.有符号除指令IDIV

1.无符号除指令DIV

语句格式:

DIVOPS

功能:

字节除法:

(AX)/(OPS)→AL(商)、AH(余数)

字除法:

(DX、AX)/(OPS)→AX(商)、DX(余数)

【例】写出实现无符号数0400H/0B4H运算的程序段。

MOVAX,0400H;(AX)=0400H

MOVBL,0B4H;(BL)=0B4H

DIVBL;商(AL)=05H,余数(AH)=7CH

2.有符号除指令IDIV

语句格式:

IDIVOPS

功能:

字节除法:

(AX)/(OPS)→AL(商)、AH(余数)

字除法:

(DX,AX)/(OPS)→AX(商)、DX(余数)

除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。

【例】写出实现有符号数0400H/0B4H运算的程序段。

MOVAX,0400H;(AX)=0400H

MOVBX,0B4H;(BX)=0B4H

IDIVBX;(AL)=0F3H,(AH)=24H

3符号扩展指令

1.字节转换成字指令CBW(ConvertBytetoWord)

2.将字转换成双字指令CWD

1.字节转换成字指令CBW

语句格式:

CBW

功能:

将AL中的符号位数据扩展至AH。

【例】将字节数据扩展成字数据。

MOVAL,0A5H;(AL)=0A5H

CBW;(AX)=0FFA5H

CBWAL,;(AL)=25H

;(AX)=0025H

2.将字转换成双字指令CWD

语句格式:

CWD

功能:

将AX中的符号位数据扩展至DX。

【例】将字数据扩展成双字数据。

MOVDX,0;(DX)=0

MOVAX,0FFABH;(AX)=0FFABH

CWD;(DX)=0FFFFH(AX)=0FFABH

设在字变量B1,B2中分别存有两个16位带符号二进制数,计算A1/A2,并将其商和余数分别以RESULT为偏移地址的连续存区中。

下面是完成此过程的程序段:

   MOVAX,B1

   CWD

   IDIVB2

   MOVRESUL

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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