微机原理课件-ch5-2_第1页
微机原理课件-ch5-2_第2页
微机原理课件-ch5-2_第3页
微机原理课件-ch5-2_第4页
微机原理课件-ch5-2_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

下列指令源操作数和目的操作数的寻址方式分别是什么?

(1)MOV

DX,100H

(2)MOV

BX,[0100H]

(3)MOV

CX,DATA[SI]

(4)MOV

ES:[SI],AX

(5)ADD

AX,[BX][DI]

(6)AND

AX,BX

(7)XOR

AX,[BX]

(8)MOV

AL,DATA[BP][DI]

1下列指令源操作数和目的操作数的寻址方式分别是什么?

1第二节8086/8088的指令系统

第一部分 指令系统概述第二部分8086/8088的指令系统8086/8088的指令系统2第二节8086/8088的指令系统第一部分 指令 第一部分 指令系统概述8086/8088的指令系统中的基本指令共133条.可以分成6个功能组:1. 数据传送(Datatransfer)2. 算术运算(Arithmetic)3. 逻辑运算和移位指令(Logic&Shift)4. 串操作(Stringmanipulation)5. 控制转移(ControlTransfer)6. 处理器控制(ProcessorControl)3 第一部分 指令系统概述8086/8088的指令系统中的基本介绍指令系统使用的符号:八位寄存器:AH,AL,BH,BH,BL,CH,CL,DH,DL十六位通用寄存器:AX,BX,CX,DX,SP,BP,SI,DI堆栈指针 SP指令指针 IP(或PC)标志位 Flags目的和源变址寄存器 DI,SI段寄存器 CS,DS,ES,SS通用寄存器 regAL或AX(取决于操作数长度)acc4介绍指令系统使用的符号:4src,dest 源,目的操作数(下列寻址方式都可以用) [BX+SI+n],[BX+DI+n],[BP+SI+n],[BP+DI+n] [SI+n], [DI+n],[BP+n],[BX+n] [N], r

[] 存储器单元的内容(正常在数据段)ES:[] 附加存储器段的内容Sreg段寄存器(CS,DS,ES,SS)MEM内存操作数(MEM8\MEM16)IMM

立即数(IMM8\IMM16)P88位I/O端口号5src,dest 源,目的操作数(下列寻址方式都可以用)8086/8088指令助记符表68086/8088指令助记符表68086/8088指令助记符表(续)78086/8088指令助记符表(续)7学习指令的注意事项指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式——该指令中的操作数可以采用何种寻址方式指令对标志的影响——该指令执行后是否对各个标志位有影响,以及如何影响其他方面——该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等8学习指令的注意事项指令的功能——该指令能够实现何种操作。通常

第二部分8086/8088指令系统一、数据传送指令(Datatransfer)(一)通用传送指令(GeneralPurposeTransfer)(二)输入输出指令(InputandOutput)(三)目的地址传送指令(Address-objecttransfer)(四)标志传送指令(Flagregistertransfer)9 第二部分8086/8088指令系统9一. 数据传送指令功能:负责把数据、地址或立即数传送到寄存器或存储单元。特点:它是计算机最基本、最重要的一种操作,使用比例最高。种类(分四种):

通用传送指令包括:MOV,PUSH,POP,XCHG,XLAT。输入输出指令指令包括:IN,OUT。目的地址传送指令包括:LEA,LDS,LES标志传送指令包括:LAHF,SAHF,PUSHF,POPF

除SAHF和POPF指令外,对标志位没有影响。10一. 数据传送指令10(一)通用传送指令(GeneralPurposeTransfer)8088提供方便灵活的通用的传送操作,适用于大多数操作数。通用传送指令(除了XCHG以外)是唯一允许以段寄存器为操作数指令。通用传送指令包括: 1、MOV(Movement) 2、PUSH(Pushwordontostack) POP(Popwordoffstack)

3、XCHG(Exchange) 4、XLAT(Translate)11(一)通用传送指令(GeneralPurposeTran1. MOV dest, src;(dest)(src)功能:

把一个字节(B)或一个字(W)操作数由源传送至目的。实现: 寄存器寄存器/存储器之间; 立即数寄存器/存储器 寄存器/存储器段寄存器之间的数据传送。通用寄存器AXBXCXDXBPSPSIDIALBLCLDLAHBHCHDH段寄存器CSDSSSES存储器立即数16位8\16位8\16位8\16位MOV指令数据传送方向121. MOV dest, src;(dest)

具体说,通用数据传送指令能实现:①CPU内部寄存器之间的数据的任意传送

(除了码段寄存器CS和指令指针IP以外)。 段寄存器之间不能传送。例: MOVDL,CH ;8位寄存器8位寄存器 MOVAX,DX ;16位寄存器16位寄存器 MOVSI,BP MOVDS,BX ;通用寄存器段寄存器

MOVAX,CS ;段寄存器通用寄存器13具体说,通用数据传送指令能实现:13立即数传送至CPU内部通用寄存器组(AX、BX、CX、DX、BP、SP、SI、DI)。

用于给寄存器赋初值。

不能直接给段寄存器赋值例: MOVCL,04H ;立即数8位寄存器 MOVAX,03FFH ;立即数16位寄存器14立即数传送至CPU内部通用寄存器组14CPU内部寄存器(除CS和IP外)

与存储器(所有寻址方式)之间数据传送。 可以实现一字节或一个字的传送。

存储单元之间不能直接传送

例: MOVMEM,AX ;累加器存储器,直接寻址 MOVMEM,DS ;段寄存器存储器,直接寻址 MOVDISP[BX],CX ;寄存器存储器,变址寻址 MOVAX,DISP[SI] ;存储器累加器,变址寻址 MOVDS,MEM ;存储器段寄存器,直接寻址 MOVCX,DISP[BX][SI] ;存储器累加器,相对基址加变址15CPU内部寄存器(除CS和IP外)15

注意:(1)不能用一条MOV指令实现以下传送。

存储单元之间的传送 MOVMEM2,MEM1错。 MOVAX,MEM1 MOVMEM2,AX对。

立即数送段寄存器

例:MOVDS,2000H错。MOVAX,2000 HMOVDS,AX对。16注意:16

段寄存器之间的传送 MOVES,DS;错 MOVAX,DS MOVES,AX;对。注意CS和IP的使用CS和IP不能作为目标操作数,CS可以作为源操作数。例: MOVCS,AX;错 MOVAX,CS;对。 MOVIP,AX;错

MOVAX,IP;对。17段寄存器之间的传送17(2)段地址的默认 BX、SI、DI间址默认段地址为DS, BP间址默认段地址SS。(3) 凡是遇到给SS赋值指令,系统自动禁止外部中断,执行本条指令和下条指令,恢复对SS寄存器赋值前的中断开放情况。 这样做为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程出现中断。 *在修改SS和SP的指令之间不要插入其他指令。(4) 所有通用传送指令不影响标志位 (除SAHF、POPF以外)。18(2)段地址的默认18

MOV指令应用例:实现将AREA1开始的100个数据传送到AREA2开始的单元。……AREA1:AREA2:100个数据19MOV指令应用……AREA1:AREA2:100个数分析题意:

①可以用200条MOV指令来完成100个数据传送,指令操作重复,每个数据传送后的地址是变化的。②可以利用循环,但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数.20分析题意:20得到如下程序: … MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL

INCSI ;修改地址指针 INCDI ;修改地址指针 DECCX ;修改个数 JNZAGAIN …21得到如下程序:21指出以下这些指令的对或错,并说明原因。

1、MOV52,AH

2、MOVCS,AH

3、MOV[DI],[SI]

4、MOV[1000],[SI]

5、MOVIP,BX

6、MOVDS,1234H

立即数不能作为目的操作数

CS不能作为目的操作数内存单元之间不能直接传送内存单元之间不能直接传送

IP不能作为目的操作数不能用立即数对段寄存器赋值22指出以下这些指令的对或错,并说明原因。

立即数不能作为目的操2.PUSH(Pushwordontostack)POP(Popwordoffstack)这是两条堆栈操作指令。(1)先回忆一下什么是堆栈,为什么需要堆栈 堆栈——按照先进后出原则组织的一段内存区域特点:下推式的(规定堆栈设置在堆栈段内)改变SP的内容,随着推入堆栈内容增加,SP的值减少。后进先出工作原则(LastInFirstOut简称LIFO)232.PUSH(Pushwordontostac堆栈用途:

存放CPU寄存器或存储器中暂时不使用的数据,使用数据时将其弹出;调用子程序,响应中断时都要用到堆栈。调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中断返回时恢复断点。24堆栈用途:24调用子程序时需保留内容:①调用子程序:将下条指令地址即IP值保留下来 (8088中码段寄存器CS和指令指针IP),才能保证子程序执行完后准确返回主程序继续执行。②执行子程序时,通常用到内部寄存器,执行结果会影响标志位,必须在调用子程序之前将现状保护起来③子程序嵌套或子程序递归(自调自)保留许多信息,而且保证正确返回(且后进先出)。

后保留先取出原则(即LIFO-LASTInFirstout)。注意:SP——堆栈指针,始终指向栈顶。 SP初值用MOVSP,im来设定。25调用子程序时需保留内容:注意:SP——堆栈指针,始终指向栈(2)堆栈操作指令(堆栈操作指令有两条):入栈指令格式:PUSHsrc ;(SP)(SP)-2(SP)+1,(SP))(src)

把一个字从源操作数由SP指向堆栈顶部。

操作如:PUSHAX出栈指令格式:POPdest ; (dest)((SP)+1,(SP)) (SP)(SP)+2把现行SP所指向堆栈顶部的一个字指定的目的操作数,同时进行修改堆栈指针的操作。

操作如:POPBX26(2)堆栈操作指令(堆栈操作指令有两条):26应用时注意:堆栈操作都按字操作。PUSH,POP指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器),段寄存器(CS除外,PUSHCS合法,POPCS非法)存储器,操作数必须是16位的,且不能是立即数。执行PUSH指令,(SP)-2(SP),

低字节放在低地址,高字节放在高地址。

PUSH,POP指令应该成对使用,保持堆栈原有状态。堆栈最大容量即为SP的初值与SS之间的差。27应用时注意:27堆栈应用举例:

例:用BP的基址指令代替POP指令 …MOVBP,SPPUSHAXPUSHBXPUSHCX …MOVCX,[BP-6]

MOVBX,[BP-4]MOVAX,[BP-2] …ADDSP,6例:压入堆栈的内容与弹出内容顺序相反…PUSH AXPUSHBXPUSHCX…POPCXPOPBXPOPAX 28堆栈应用举例:例:用BP的基址指令例:压入堆栈的内容3、交换指令(Exchange)格式:XCHGdest,src ;(dest)(src)执行操作:

把一个字节或一个字的源操作数与目的操作数相交换。可以实现:寄存器之间 寄存器和存储器之间注意:

存储器之间不能交换,两个操作数中必须有一个在寄存器中;段寄存器不能作为一个操作数;允许字或字节操作,不影响标志位。293、交换指令(Exchange)29应用举例: XCHGBL,DL XCHGAX,SI XCHGCOUNT[DI],AX

XCHG[BX],[DI] (错) XCHGDS,AX(错)30应用举例:30XLAT(Translate)换码指令:该指令不影响标志位。格式:XLATstr_table ;(AL)←((BX)+(AL)) 或XLAT str_table——表格符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用BX。

31XLAT(Translate)换码指令:31XLAT指令使用方法:先建立一个字节表格;表格首偏移地址存入BX;需要转换代码的序号(相对与表格首地址位移量)存入AL;(表中第一个元素的序号为0)执行XLAT指令后,表中指定序号的元素存于AL中。(AL)为转换的代码。由于AL只有8位,所以表的长度不能超过256字节.

32XLAT指令使用方法:32XLAT指令应用:

若把字符的扫描码转换成ASCII码;或数字0~9转换成7段数码所需要的相应代码(字形码)等就要用XLAT指令。例:内存的数据段中有一张十六进制数字的ASCII码表。

首地址为:Hex_table,欲查出表中第10个元素(‘A’)33XLAT指令应用:33执行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假设: (DS)=F000H, Hex_table=0040H (AL)=0AH执行XLAT以后:(AL)=41H=(F004AH), 即“A”的ASCII码。30H31H32H...39H41H42H...46H...Hex_tableHex_table+1Hex_table+2Hex_table+0AHHex_table+0BHHex_table+0FH'F''B''A''9''1''2''0'16进制数的ASCII码表34执行指令序列:30H31H32H...39H41H42H..(二)输入输出指令(InputandOutput)输入输出指令共两条:

1、IN(Inputbyteorword)

2、OUT(Outputbyteorword)

输入指令用于CPU从外设端口接受数据,

输出指令用于CPU向外设端口发送数据。无论接受还是发送数据,必须通过累加器AX(字)或AL(字节),又称累加器专用传送指令。

输入、输出指令不影响标志位。35(二)输入输出指令(InputandOutput)35每个外设要占几个端口:数据口,状态口和控制口。36每个外设要占几个端口:数据口,状态口和控制口。36信息交换要通过端口,在IBMPC机里,可以配接许多外部设备,每个外设与CPU之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。端口数:外部设备最多有65536个I/O端口。 A0-A15译码形成。端口号:端口号(即外设端口地址)为0000H-FFFFH。PC机仅使用A0-A9译码形成I/O口地址,即1024H个口地址 端口号:0000H-03FFH其中:A9=1,表示扩充槽上的口地址。37信息交换要通过端口,37长格式:端口号中前256个端口(0-FFH),可以直接写在指令中,这就是长格式(直接寻址)。端口号代替指令中的PORT,机器指令用二字节表示,第二字节就是端口号。短格式:当端口号≥256时,只能使用短格式,必须先把端口号放到DX寄存器中(间接寻址)。不需要用任何段寄存器来修改它的值。38长格式:381、IN(Inputbyteorword)输入指令格式:INacc,port;(acc)(port)具体形式有四种:INAL,data8;端口地址8位,输入一个字节INAX,data8;端口地址8位,输入一个字INAL,DX;端口地址16位,输入一个字节INAX,DX;端口地址16位,输入一个字

必须通过累加器AX(字)或AL(节)输入数据。391、IN(Inputbyteorword)2、OUT(Outputbyteorword)输出指令格式:OUTport,acc ;(port)(acc)具体形式有四种:OUTdata8,AL;端口地址8位,输出一个字节OUTdata8,AX;端口地址8位,输出一个字OUTDX,AL;端口地址16位,输出一个字节OUTDX,AX;端口地址16位,输出一个字必须通过累加器AX(字)或AL(节)输出数据。402、OUT(Outputbyteorword)例1:实现(29H)(28H)→(DATA_WORD) INAX,28H MOVDATA_WORD,AX例2:从端口3FCH送一个字到AX寄存器 MOVDX,3FCH INAX,DX;(AL)←(3FCH), (AH)←(3FDH)

例3:实现将(AL)→(05H) OUT5,AL;(05H)←(AL)41例1:实现(29H)(28H)→(DATA_WORD)41(三)目的地址传送指令(Address-objecttransfer)8086/8088提供三条:

地址指针写入指定寄存器或寄存器对指令。 1、LEA(LoadEffectiveAddress) 2、LDS(LoadpointerusingDS) 3、LES(LoadpointerusingES)42(三)目的地址传送指令(Address-objecttra1、LEA(LoadEffectiveAddress)格式:LEAreg16,mem16;EA(reg16)功能:加载有效地址,用于写进地址指针。把指令指定存储器操作数有效地址装入指定的寄存器例:设(BX)=0400H,(SI)=003CH LEABX,[BX+SI+0F62H]执行指令后:EA=(BX)+(SI)=0F62H=0400H+003CH+0F62H=139EH(BX)=139EH431、LEA(LoadEffectiveAddress)4注意:设 (DS)=3000H BUFFER=1000H (31000H)=0040H(1)LEA指令与MOV的区别 LEABX,BUFFER;(BX)=1000H MOVBX,BUFFER;(BX)=0040HLEA指令与MOV等价 LEABX,BUFFER ;(BX)=1000H MOVBX,OFFSETBUFFER;(BX)=1000H44注意:设44(2)LEA指令中的目标寄存器必须是16位的通用寄存器,源操作数必须是一个存储器。(3)请思考下列指令的正、误 LEADX,BETA[BX][SI] LEADX,AX45(2)LEA指令中的目标寄存器必须是16位的通用寄存器,2、LDS(LoadpointerusingDS)格式:LDSreg16,mem32;(reg16)←(EA) (DS)←((EA)+2))功能:将指令指定32位地址指针送指令指定寄存器和DS。将指令指定mem32单元的前两个单元内容(16位偏移量)装入指定通用寄存器,把后两个单元内容(段地址)装入到DS段寄存器。用于写远地址指针。462、LDS(LoadpointerusingDS)例:假设:(DS)=C000H指令: LDSSI,[0010H]执行指令后:(SI)=0180H(DS)=2000H

47例:473、LES(LoadpointerusingES)格式:LESreg16,mem32;(reg16)←(EA) (ES)←((EA)+2))功能:把源操作数指定的4个相继字节送指令指定的寄存器及ES寄存器中。此指令常常指定DI寄存器。将指令指定mem32单元的前两个单元内容(16位偏移量)装入指定通用寄存器,把后两个单元内容(段地址)装入到ES段寄存器。用于写远地址指针。483、LES(LoadpointerusingES)例:假设:(DS)=B000H (BX)=080AH指令: LESDI,[BX]执行指令后: (DI)=05A2H (ES)=4000H49例:49综合举例:设:(DS)=5000HTABLE=1000H分析下列指令执行结果:MOVBX,TABLE;MOVBX,OFFSETTABLE;LEABX,TABLE;LESBX,TABLE;LDSBX,TABLE;(BX)=0040H(BX)=1000H(BX)=1000H(BX)=0040H,(ES)=3000H(BX)=0040H,(DS)=3000H50综合举例:(BX)=0040H50(四)标志传送指令(Flagregistertransfer)采用了隐含寄存器(AH、Flags)操作数方式。8088有四条标志传送操作指令:1. LAHF(LoadAHintoflags)2. SAHF(StoreAHintoflags)3. PUSHF(Pushflagsontostack)4. POPF(Popflagsoffstack)

51(四)标志传送指令(Flagregistertransf1.LAHF(LoadAHintoflags)格式:LAHF;(AH)←(FLAG的低字节)功能:标志寄存器低八位(AH)。LAHF指令操作图示意521.LAHF(LoadAHintoflags)格式:L2. SAHF(StoreAHintoflags) 格式:SAHF;(FLAG的低字节)←(AH) 功能:(AH)送标志寄存器低八位。3. PUSHF(Pushflagsontostack) 格式:PUSHF ;(SP)←(SP)-2 ((SP)+1,(SP))←(FLAG) 功能:标志进栈。4. POPF(Popflagsoffstack)

格式:POPF;(FLAG)←((SP)+1,(SP)) (SP)←(SP)+2 功能:标志出栈。532. SAHF(StoreAHintoflags)5注意:(1)标志位的影响LAHF、PUSHF不影响标志位,SAHF、POPF由装入的值确定标志位的值,影响标志位。(2)PUSHF、POPF用于保护调用过程前(FLAG),过程返回后恢复。例: … PUSH AX PUSHCX PUSHF CALLTRANSPOPFPOPCXPOPAX…54注意:POPF54下列指令源操作数和目的操作数的寻址方式分别是什么?

(1)MOV

DX,100H

(2)MOV

BX,[0100H]

(3)MOV

CX,DATA[SI]

(4)MOV

ES:[SI],AX

(5)ADD

AX,[BX][DI]

(6)AND

AX,BX

(7)XOR

AX,[BX]

(8)MOV

AL,DATA[BP][DI]

55下列指令源操作数和目的操作数的寻址方式分别是什么?

1第二节8086/8088的指令系统

第一部分 指令系统概述第二部分8086/8088的指令系统8086/8088的指令系统56第二节8086/8088的指令系统第一部分 指令 第一部分 指令系统概述8086/8088的指令系统中的基本指令共133条.可以分成6个功能组:1. 数据传送(Datatransfer)2. 算术运算(Arithmetic)3. 逻辑运算和移位指令(Logic&Shift)4. 串操作(Stringmanipulation)5. 控制转移(ControlTransfer)6. 处理器控制(ProcessorControl)57 第一部分 指令系统概述8086/8088的指令系统中的基本介绍指令系统使用的符号:八位寄存器:AH,AL,BH,BH,BL,CH,CL,DH,DL十六位通用寄存器:AX,BX,CX,DX,SP,BP,SI,DI堆栈指针 SP指令指针 IP(或PC)标志位 Flags目的和源变址寄存器 DI,SI段寄存器 CS,DS,ES,SS通用寄存器 regAL或AX(取决于操作数长度)acc58介绍指令系统使用的符号:4src,dest 源,目的操作数(下列寻址方式都可以用) [BX+SI+n],[BX+DI+n],[BP+SI+n],[BP+DI+n] [SI+n], [DI+n],[BP+n],[BX+n] [N], r

[] 存储器单元的内容(正常在数据段)ES:[] 附加存储器段的内容Sreg段寄存器(CS,DS,ES,SS)MEM内存操作数(MEM8\MEM16)IMM

立即数(IMM8\IMM16)P88位I/O端口号59src,dest 源,目的操作数(下列寻址方式都可以用)8086/8088指令助记符表608086/8088指令助记符表68086/8088指令助记符表(续)618086/8088指令助记符表(续)7学习指令的注意事项指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式——该指令中的操作数可以采用何种寻址方式指令对标志的影响——该指令执行后是否对各个标志位有影响,以及如何影响其他方面——该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等62学习指令的注意事项指令的功能——该指令能够实现何种操作。通常

第二部分8086/8088指令系统一、数据传送指令(Datatransfer)(一)通用传送指令(GeneralPurposeTransfer)(二)输入输出指令(InputandOutput)(三)目的地址传送指令(Address-objecttransfer)(四)标志传送指令(Flagregistertransfer)63 第二部分8086/8088指令系统9一. 数据传送指令功能:负责把数据、地址或立即数传送到寄存器或存储单元。特点:它是计算机最基本、最重要的一种操作,使用比例最高。种类(分四种):

通用传送指令包括:MOV,PUSH,POP,XCHG,XLAT。输入输出指令指令包括:IN,OUT。目的地址传送指令包括:LEA,LDS,LES标志传送指令包括:LAHF,SAHF,PUSHF,POPF

除SAHF和POPF指令外,对标志位没有影响。64一. 数据传送指令10(一)通用传送指令(GeneralPurposeTransfer)8088提供方便灵活的通用的传送操作,适用于大多数操作数。通用传送指令(除了XCHG以外)是唯一允许以段寄存器为操作数指令。通用传送指令包括: 1、MOV(Movement) 2、PUSH(Pushwordontostack) POP(Popwordoffstack)

3、XCHG(Exchange) 4、XLAT(Translate)65(一)通用传送指令(GeneralPurposeTran1. MOV dest, src;(dest)(src)功能:

把一个字节(B)或一个字(W)操作数由源传送至目的。实现: 寄存器寄存器/存储器之间; 立即数寄存器/存储器 寄存器/存储器段寄存器之间的数据传送。通用寄存器AXBXCXDXBPSPSIDIALBLCLDLAHBHCHDH段寄存器CSDSSSES存储器立即数16位8\16位8\16位8\16位MOV指令数据传送方向661. MOV dest, src;(dest)

具体说,通用数据传送指令能实现:①CPU内部寄存器之间的数据的任意传送

(除了码段寄存器CS和指令指针IP以外)。 段寄存器之间不能传送。例: MOVDL,CH ;8位寄存器8位寄存器 MOVAX,DX ;16位寄存器16位寄存器 MOVSI,BP MOVDS,BX ;通用寄存器段寄存器

MOVAX,CS ;段寄存器通用寄存器67具体说,通用数据传送指令能实现:13立即数传送至CPU内部通用寄存器组(AX、BX、CX、DX、BP、SP、SI、DI)。

用于给寄存器赋初值。

不能直接给段寄存器赋值例: MOVCL,04H ;立即数8位寄存器 MOVAX,03FFH ;立即数16位寄存器68立即数传送至CPU内部通用寄存器组14CPU内部寄存器(除CS和IP外)

与存储器(所有寻址方式)之间数据传送。 可以实现一字节或一个字的传送。

存储单元之间不能直接传送

例: MOVMEM,AX ;累加器存储器,直接寻址 MOVMEM,DS ;段寄存器存储器,直接寻址 MOVDISP[BX],CX ;寄存器存储器,变址寻址 MOVAX,DISP[SI] ;存储器累加器,变址寻址 MOVDS,MEM ;存储器段寄存器,直接寻址 MOVCX,DISP[BX][SI] ;存储器累加器,相对基址加变址69CPU内部寄存器(除CS和IP外)15

注意:(1)不能用一条MOV指令实现以下传送。

存储单元之间的传送 MOVMEM2,MEM1错。 MOVAX,MEM1 MOVMEM2,AX对。

立即数送段寄存器

例:MOVDS,2000H错。MOVAX,2000 HMOVDS,AX对。70注意:16

段寄存器之间的传送 MOVES,DS;错 MOVAX,DS MOVES,AX;对。注意CS和IP的使用CS和IP不能作为目标操作数,CS可以作为源操作数。例: MOVCS,AX;错 MOVAX,CS;对。 MOVIP,AX;错

MOVAX,IP;对。71段寄存器之间的传送17(2)段地址的默认 BX、SI、DI间址默认段地址为DS, BP间址默认段地址SS。(3) 凡是遇到给SS赋值指令,系统自动禁止外部中断,执行本条指令和下条指令,恢复对SS寄存器赋值前的中断开放情况。 这样做为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程出现中断。 *在修改SS和SP的指令之间不要插入其他指令。(4) 所有通用传送指令不影响标志位 (除SAHF、POPF以外)。72(2)段地址的默认18

MOV指令应用例:实现将AREA1开始的100个数据传送到AREA2开始的单元。……AREA1:AREA2:100个数据73MOV指令应用……AREA1:AREA2:100个数分析题意:

①可以用200条MOV指令来完成100个数据传送,指令操作重复,每个数据传送后的地址是变化的。②可以利用循环,但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数.74分析题意:20得到如下程序: … MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL

INCSI ;修改地址指针 INCDI ;修改地址指针 DECCX ;修改个数 JNZAGAIN …75得到如下程序:21指出以下这些指令的对或错,并说明原因。

1、MOV52,AH

2、MOVCS,AH

3、MOV[DI],[SI]

4、MOV[1000],[SI]

5、MOVIP,BX

6、MOVDS,1234H

立即数不能作为目的操作数

CS不能作为目的操作数内存单元之间不能直接传送内存单元之间不能直接传送

IP不能作为目的操作数不能用立即数对段寄存器赋值76指出以下这些指令的对或错,并说明原因。

立即数不能作为目的操2.PUSH(Pushwordontostack)POP(Popwordoffstack)这是两条堆栈操作指令。(1)先回忆一下什么是堆栈,为什么需要堆栈 堆栈——按照先进后出原则组织的一段内存区域特点:下推式的(规定堆栈设置在堆栈段内)改变SP的内容,随着推入堆栈内容增加,SP的值减少。后进先出工作原则(LastInFirstOut简称LIFO)772.PUSH(Pushwordontostac堆栈用途:

存放CPU寄存器或存储器中暂时不使用的数据,使用数据时将其弹出;调用子程序,响应中断时都要用到堆栈。调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中断返回时恢复断点。78堆栈用途:24调用子程序时需保留内容:①调用子程序:将下条指令地址即IP值保留下来 (8088中码段寄存器CS和指令指针IP),才能保证子程序执行完后准确返回主程序继续执行。②执行子程序时,通常用到内部寄存器,执行结果会影响标志位,必须在调用子程序之前将现状保护起来③子程序嵌套或子程序递归(自调自)保留许多信息,而且保证正确返回(且后进先出)。

后保留先取出原则(即LIFO-LASTInFirstout)。注意:SP——堆栈指针,始终指向栈顶。 SP初值用MOVSP,im来设定。79调用子程序时需保留内容:注意:SP——堆栈指针,始终指向栈(2)堆栈操作指令(堆栈操作指令有两条):入栈指令格式:PUSHsrc ;(SP)(SP)-2(SP)+1,(SP))(src)

把一个字从源操作数由SP指向堆栈顶部。

操作如:PUSHAX出栈指令格式:POPdest ; (dest)((SP)+1,(SP)) (SP)(SP)+2把现行SP所指向堆栈顶部的一个字指定的目的操作数,同时进行修改堆栈指针的操作。

操作如:POPBX80(2)堆栈操作指令(堆栈操作指令有两条):26应用时注意:堆栈操作都按字操作。PUSH,POP指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器),段寄存器(CS除外,PUSHCS合法,POPCS非法)存储器,操作数必须是16位的,且不能是立即数。执行PUSH指令,(SP)-2(SP),

低字节放在低地址,高字节放在高地址。

PUSH,POP指令应该成对使用,保持堆栈原有状态。堆栈最大容量即为SP的初值与SS之间的差。81应用时注意:27堆栈应用举例:

例:用BP的基址指令代替POP指令 …MOVBP,SPPUSHAXPUSHBXPUSHCX …MOVCX,[BP-6]

MOVBX,[BP-4]MOVAX,[BP-2] …ADDSP,6例:压入堆栈的内容与弹出内容顺序相反…PUSH AXPUSHBXPUSHCX…POPCXPOPBXPOPAX 82堆栈应用举例:例:用BP的基址指令例:压入堆栈的内容3、交换指令(Exchange)格式:XCHGdest,src ;(dest)(src)执行操作:

把一个字节或一个字的源操作数与目的操作数相交换。可以实现:寄存器之间 寄存器和存储器之间注意:

存储器之间不能交换,两个操作数中必须有一个在寄存器中;段寄存器不能作为一个操作数;允许字或字节操作,不影响标志位。833、交换指令(Exchange)29应用举例: XCHGBL,DL XCHGAX,SI XCHGCOUNT[DI],AX

XCHG[BX],[DI] (错) XCHGDS,AX(错)84应用举例:30XLAT(Translate)换码指令:该指令不影响标志位。格式:XLATstr_table ;(AL)←((BX)+(AL)) 或XLAT str_table——表格符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用BX。

85XLAT(Translate)换码指令:31XLAT指令使用方法:先建立一个字节表格;表格首偏移地址存入BX;需要转换代码的序号(相对与表格首地址位移量)存入AL;(表中第一个元素的序号为0)执行XLAT指令后,表中指定序号的元素存于AL中。(AL)为转换的代码。由于AL只有8位,所以表的长度不能超过256字节.

86XLAT指令使用方法:32XLAT指令应用:

若把字符的扫描码转换成ASCII码;或数字0~9转换成7段数码所需要的相应代码(字形码)等就要用XLAT指令。例:内存的数据段中有一张十六进制数字的ASCII码表。

首地址为:Hex_table,欲查出表中第10个元素(‘A’)87XLAT指令应用:33执行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假设: (DS)=F000H, Hex_table=0040H (AL)=0AH执行XLAT以后:(AL)=41H=(F004AH), 即“A”的ASCII码。30H31H32H...39H41H42H...46H...Hex_tableHex_table+1Hex_table+2Hex_table+0AHHex_table+0BHHex_table+0FH'F''B''A''9''1''2''0'16进制数的ASCII码表88执行指令序列:30H31H32H...39H41H42H..(二)输入输出指令(InputandOutput)输入输出指令共两条:

1、IN(Inputbyteorword)

2、OUT(Outputbyteorword)

输入指令用于CPU从外设端口接受数据,

输出指令用于CPU向外设端口发送数据。无论接受还是发送数据,必须通过累加器AX(字)或AL(字节),又称累加器专用传送指令。

输入、输出指令不影响标志位。89(二)输入输出指令(InputandOutput)35每个外设要占几个端口:数据口,状态口和控制口。90每个外设要占几个端口:数据口,状态口和控制口。36信息交换要通过端口,在IBMPC机里,可以配接许多外部设备,每个外设与CPU之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。端口数:外部设备最多有65536个I/O端口。 A0-A15译码形成。端口号:端口号(即外设端口地址)为0000H-FFFFH。PC机仅使用A0-A9译码形成I/O口地址,即1024H个口地址 端口号:0000H-03FFH其中:A9=1,表示扩充槽上的口地址。91信息交换要通过端口,37长格式:端口号中前256个端口(0-FFH),可以直接写在指令中,这就是长格式(直接寻址)。端口号代替指令中的PORT,机器指令用二字节表示,第二字节就是端口号。短格式:当端口号≥256时,只能使用短格式,必须先把端口号放到DX寄存器中(间接寻址)。不需要用任何段寄存器来修改它的值。92长格式:381、IN(Inputbyteorword)输入指令格式:INacc,port;(acc)(port)具体形式有四种:INAL,data8;端口地址8位,输入一个字节INAX,data8;端口地址8位,输入一个字INAL,DX;端口地址16位,输入一个字节INAX,DX;端口地址16位,输入一个字

必须通过累加器AX(字)或AL(节)输入数据。931、IN(Inputbyteorword)2、OUT(Outputbyteorword)输出指令格式:OUTport,acc ;(port)(acc)具体形式有四种:OUTdata8,AL;端口地址8位,输出一个字节OUTdata8,AX;端口地址8位,输出一个字OUTDX,AL;端口地址16位,输出一个字节OUTDX,AX;端口地址16位,输出一个字必须通过累加器AX(字)或AL(节)输出数据。942、OUT(Outputbyteorword)例1:实现(29H)(28H)→(DATA_WORD) INAX,28H MOVDATA_WORD,AX例2:从端口3FCH送一个字到AX寄存器 MOVDX,3FCH INAX,DX;(AL)←(3FCH), (AH)←(3FDH)

例3:实现将(AL)→(05H) OUT5,AL;(05H)←(AL)95例1:实现(29H)(28H)→(DATA_WORD)41(三)目的地址传送指令(Address-objecttransfer)8086/8088提供三条:

地址指针写入指定寄存器或寄存器对指令。 1、LEA(LoadEffectiveAddress) 2、LDS(LoadpointerusingDS) 3、LES(LoadpointerusingES)96(三)目的地址传送指令(Address-objecttra1、LEA(LoadEffectiveAddress)格式:LEAreg16,mem16;EA(reg16)功能:加载有效地址,用于写进地址指针。把指令指定存储器操作数有效地址装入指定的寄存器例:设(BX)=0400H,(SI)=003CH LEA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论