计算机接口技术教案4文档格式.docx
- 文档编号:21052286
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:19
- 大小:22.18KB
计算机接口技术教案4文档格式.docx
《计算机接口技术教案4文档格式.docx》由会员分享,可在线阅读,更多相关《计算机接口技术教案4文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
重
点
难
思
考
题
重难点:
1指令基本格式
2指令系统
参
文
献
[1]《微型计算机原理与接口技术》,吴秀清主编,中国科技大学出版社,2003
[2]《微型计算机技术及应用》,戴梅萼、史嘉权编著,清华大学出版社,2004
课程教案附页
2.38086指令系统
在讨论各种指令的特点、用途和功能,先介绍本节所用到的各种符号:
OPRD泛指各种类型操作数
Mem存储器操作数
acc累加器操作数
dest目标操作数
src源操作数
disp8位或16位偏移量(可用符号地址表示)
DATA8位或16位立即数
port输入输出端口(可用数字或表达式表示)
()表示寄存器的内容
[]表示存储器的内容
3.3.1数据传送类指令
数据传送类指令是程序中使用频度最高的一类指令。
数据传送类指令绝大多数不会对标志寄存器FLAGS产生影响。
数据传送类指令按功能又可分为4小类:
·
通用数据传送指令
目标地址传送指令
标志传送指令
输入输出指令
1.通用数据传送指令
通用数据传送指令由包括一般传送指令MOV、堆栈操作指令PUSH和POP、交换指令XCHG、查表指令XLAT及字位扩展指令,下分别介绍:
1)一般传送指令MOV(move)
指令格式及操作功能
MOVdest,src;
(dest)←(src)
指令中dest表示目标操作数,src表示源操作数,指令功能是将一个操作数由源地址送到目标地址,而源地址中的操作数保持不变。
注意:
在汇编语言中,规定凡具有双操作数的指令,目标操作数写在前面,源操作数写在后面,两者之间用一个逗号隔开。
MOV指令有以下特点:
既可一次传送一个字节操作数(8位),也可一次传送一个字操作数(16位),具体取决于指令中涉及的寄存器或立即数的位数。
可用上节讲过的各种寻址方式。
可实现下述各种传送:
(1)寄存器与寄存器之间的数据传送
16位数据的传送指令,例如:
MOVBX,SI;
变址寄存器SI中的内容送到基址寄存器BX
MOVDS,AX;
累加器AX的内容送到段寄存器DS
MOVAX,CS;
段寄存器CS的内容送到累加器AX
8位数据的传送指令,例如:
MOVAL,CL;
通用寄存器CL中的内容送AL
MOVDL,CH;
通用寄存器CH中的内容送DL
如(CX)=2233H,上两条指令执行后(AL)=33H,(DL)=22H
(2)寄存器与存储器之间的传送
可以是8位数据传送,也可以是16位数据传送,可以是寄存器到存储器的传送,也可以是存储器到寄存器的传送。
例如:
MOVCL,[BP][DI];
SS段偏移地址为(BP)+(DI)的存储单元内容送CL。
如(SS)=8000H,(BP)=1020H,(DI)=0383H,(813A3H)=44H,则上指令执行后,(CL)=44H。
当传送16位数据(字操作数)时,这时对连续两个存储器单元进行存取,且寄存器的低8位对应存储器的低地址单元,寄存器的高8位对应存储器的高地址单元,例如:
MOV[BX],AX;
将AX的内容送连续两个存储器单元
如(DS)=6000H,(BX)=1200H,(AX)=1234H,则上指令执行后,(61200H)=34H,(61201H)=12H。
(3)立即数到寄存器的传送
MOVAL,5;
将立即数05H送累加器AL
MOVBX,3078H;
将立即数3078H送寄存器BX
(4)立即数到存储器的传送
MOVBYTEPTR[BP+SI],5;
将立即数05H送到SS段偏移量为(BP)+(SI)的单
;
元中
MOVWORDPTR[BX],1005H;
将立即数1005H分送DS段偏移地址为(BX)和
(BX)+1的两个存储单元
(5)存储器与段寄存器之间的传送
MOVDS,[1000H];
将DS段偏移地址为1000H和1001H的两个存储单元的
内容送段寄存器DS
MOV[BX],ES;
将段寄存器ES的内容分送DS段偏移地址为(BX)和
如上两指令执行前(DS)=8000H,(ES)=4000H,(BX)=1200H,(81000H)=00H,(81001H)=20H,执行后(DS)=2000H,(21200H)=00H,(21201H)=40H。
用MOV指令进行数据传送必须注意以下几点:
①MOV指令的两个操作数类型必须相同。
下列指令为错误指令:
MOVAX,BL
②不能两个操作数同为存储器操作数。
MOV[BX],[SI]
③不能用立即数给段寄存器赋值(需通过两条指令)
MOVDS,1234H
④不能在段寄存器间直接传送数据(需通过两条指令)
MOVDS,ES
⑤一般情况下,IP和CS的内容不能通过MOV指令修改。
IP、CS不能作目标操作数,只能作源操作数。
⑥FLAGS内容不能通过MOV指令作修改。
MOV传送指令举例:
例:
把内存中首地址为MEM1的200个字节的数据送到首地址为MEM2的区域中。
解:
程序如下(部分指令尚未学到):
MOVSI,OFFSETMEM1;
源数据块首地址(偏移地址)送SI
MOVDI,OFFSETMEM2;
目标数据块首地址(偏移地址)送DI
MOVCX,200;
数据块长度送CX(设循环次数)
NEXT:
MOVAL,[SI];
源数据块(各单元)内容送AL
MOV[DI],AL;
AL内容送目标地址
INCSI;
SI指向下一个单元
INCDI;
DI指向下一个单元
DECCX;
CX减1(修改循环次数)
JNZNEXT;
若循环没到200次,则继续
HLT;
若已到200次,停止
2)堆栈操作指令PUSH(pushontothestack)和POP(popfromthestack)
(1)堆栈
堆栈是内存中一个特定的区域,用以存放各种必须保存的数据(举例说明,如用于保护断口地址,见P.109子程序调用示意图,又如对寄存器内容进行保护,见P.112)它在内存中所处的段称为堆栈段,其段基址放在堆栈段寄存器SS中。
堆栈操作必须遵循以下原则:
堆栈的存取每次必须是一个字。
向堆栈中存放数据,是从高地址向低地址方向增长(与内存中其他段不同),从堆栈取数据时正好相反(见P.109图3-8)。
堆栈操作指令中的操作数只能是寄存器操作数或存储器操作数,而不能是立即数。
堆栈段在内存中的位置由堆栈段寄存器SS决定。
堆栈指针SP总是指向栈顶,即SP的内容为当前栈顶偏移地址。
所谓栈顶是一个存储单元,堆栈操作时,栈顶不参与操作,而把栈顶地址减1和栈顶地址减2这两个单元作为操作对象。
堆栈操作遵循“后进先出(LIFO)”的原则。
(2)堆栈操作指令
堆栈操作指令有两条,分别为压栈指令PUSH和弹出指令POP.
指令格式为:
PUSHsrc
POPdest
该两条指令中的操作对象可为:
寄存器(包括数据寄存器,地址指针寄存器和变址寄存器)
段寄存器(CS除外,PUSHCS合法,而POPCS非法)
存储器单元
注意操作数必须为16位(即一个字)。
如为寄存器必须为16位寄存器。
如为存储器,则应是两个连续的存储单元。
PUSHAX;
AX内容压入堆栈
PUSHBP;
基址寄存器内容压入堆栈
PUSHDATA[SI];
以DS内容为段基址,将以(SI)+DATA为偏移地址及
(SI)+DATA+1为偏移地址的两个单元内容压入堆栈
POPDS;
堆栈顶部两单元内容弹回DS段寄存器
POP[BX];
堆栈顶部两单元内容弹回以DS内容为段基址,以(BX)
为偏移地址及以(BX)+1为偏移地址的两个单元
(3)堆栈指令的执行过程
压栈指令PUSHOPRD执行过程参见P.110图3-10。
OPRD高8位→((SP)-1);
OPRD低8位→((SP)-2);
(SP)→(SP)-2。
即PUSH指令将一个字的源操作数送到堆栈的顶部。
出栈指令POPOPRD执行过程参见P.110图3-11。
((SP))→OPRD低8位;
((SP)+1)→OPRD高8位;
(SP)+2→(SP)。
POP指令将栈顶两个单元的内容(一个字)送到目标地址中。
在程序中PUSH和POP指令一般成对出现,且执行次序相反,从而保证数据合理返回。
堆栈操作指令应用举例:
执行下列程序,分析堆栈区的变化情况。
MOVAX,9000H
MOVSS,AX
MOVSP,0E200H
MOVDX,38FFH
PUSHDX
PUSHAX
┆
POPDX
POPAX
执行结果如P.111图3-12所示。
本例程序中,由于没遵循“后进先出”的原则,结果出栈后,AX和DX的内容没保持压
栈前的状态,而是AX和DX的内容进行了互换。
3)交换指令XCHG(exchange)
XCHGOPRD1,OPRD2;
(OPRD1)←→(OPRD2)
指令的操作功能是使源操作数和目标操作数的内容进行互换。
交换指令对操作数有如下要求:
可以在寄存器与寄存器、寄存器与存储器之间进行数据交换,但不能在存储器与存储器之间进行数据交换。
段寄存器内容不能参与交换。
两个操作数的字长必须相同。
XCHGAX,BX;
(AX)←→(BX)
XCHGCL,DL;
(CL)←→(DL)
XCHG指令应用举例:
设(DS)=2000H,(SI)=0230H,(DL)=88H,(20230H)=44H,试析执行指令XCHG[SI],DL后的结果。
执行后:
(DL)=44H,(20230H)=88H。
即DL的内容与20230H单元的内容进行了交换。
4)查表转换指令XLAT(translate)
XLAT;
(AL)←((BX)+(AL))
或XLATsrctable;
(srctable为表的首地址)
XLAT指令应用举例:
在内存的数据段中存有一个数字符0~9的ASCII码转换表(见P112图3-13),首地址为Hextable,试编程,求数字符8的ASCII码。
程序如下:
LEABX,Hextable;
表首偏移地址送BX
MOVAL,8;
8送AL
XLATHextable;
查表转换,结果在AL中
执行结果:
(AL)=38H
需要指出的是:
由于要查找元素的序号规定放在AL中,所以表格的最大长度不会越过256个字节。
5)字位扩展指令
字位扩展指令完成操作数的扩展,一种是将一个字节的数扩展为字,另一种是将一个字的数扩展为双字,以满足各种特殊需要(以后要用到)。
(1)CBW(convertbytetoword)指令
CBW
CBW指令将一个字节操作数扩展为一个字长的数,源操作数隐含在AL中,目标操作数隐含在AX中。
当(AL)<80H时,(AH)=00H;
否则(AH)=FFH,即为有符号数的扩展。
CBW指令应用举例:
把字节数8EH扩展为字。
MOVAL,8EH
(AX)=FF8EH。
(2)CWD(convertwordtodoubleword)指令
CWD指令将一个字操作数扩展为双字,源操作数隐含在AX中,目标操作数隐含在DX和AX中。
当(AX)<8000H时,(DX)=0000H;
否则(DX)=FFFFH,也为有符号数的扩展。
CWD指令应用举例:
把字43FFH扩展为双字。
MOVAX,43FFH
CWD
(DX):
(AX)=000043FFH
2.输入输出(I/O)指令
(I/O)指令是专门用于向输入输出端口进行读写操作的指令。
有IN和OUT两条指令。
需要特别指出的是只有累加器AL(或AX)才能与I/O端口进行数据传送,所以这两条指令也称为累加器专用传送指令。
8088系统可连接多个外设端口。
在8088的I/O指令中,只允许用两种寻址方式:
直接寻址方式:
指令中包含一个8位的由立即数提供的I/O端口地址。
允许寻址256个端口,端口地址范围为00H~FFH。
寄存器间接寻址方式:
端口地址规定由DX寄存器指定,可寻址64K个端口(地址范围为0000H~FFFFH)。
(1)输出指令IN(input)
INacc,port;
直接寻址,port为8位立即数表示的端口地址
INacc,DX;
间接寻址,DX的内容为16位端口地址
上述指令从端口输入一个字节到AL或输入一个字到AX中,具体有以下四种形式。
INAL,DATA;
端口地址8位,输入一个字节到AL
INAX,DATA;
端口地址8位,由DATA和DATA+1两个端口输入一个
字到AX中
INAL,DX;
端口地址16位,由(DX)端口输入一个字节到AL中
INAX,DX;
端口地址16位,由(DX)和(DX)+1两个端口输入
一个字节到AX中
输入指令IN应用举例。
从地址为03B0H的端口输入一个字节到AL。
MOVDX,03B0H;
将16位端口地址送DX
从地址为03B0H的端口输入一个字节到AL(说明)
(2)输出指令OUT(output)
OUTport,acc;
OUTDX,acc;
上述指令把AL(或AX)的内容输出到指定的端口,具体有以下四种形式:
OUTDATA,AL;
端口地址8位,由AL输出一个字节到DATA端口
OUTDATA,AX;
端口地址8位,由AX输出一个字到DATA和DATA+1
两个端口
OUTDX,AL;
端口地址16位,由AL输出一个字节到(DX)端口
OUTDX,AX;
端口地址16位,由AX输出一个字到(DX)和(DX)+1
输出指令OUT应用举例。
将AX的内容从地址为0043H和0044H的两个端口输出。
MOVDX,0043H;
端口地址0043H送DX
将AX的内容从地址为0043H和0044H的两个端口输出
3.地址传送指令
8088/8086指令系统提供3条用于传送地址的指令:
LEA、LDS、LES。
(1)取偏移地址指令LEA(loadeffectiveaddress)
LEAreg16,mem
LEA指令将存储器的16位偏移地址送到指定的寄存器,这里源操作数必须是存储器操作数,而且传送的是偏移地址。
目标操作数是16位通用寄存器,而该寄存器用来作地址指针。
LEA指令应用举例。
将内存单元BUFFER和BUFFER+1两个单元的内容送AX。
LEABX,BUFFER;
将内存单元BUFFER的偏移地址送BX
MOVAL,[BX];
BUFFER单元内容送AL
MOVAH,[BX+1];
BUFFER+1单元内容送AH
上2、3条指令也可合为MOVAX,[BX]。
又例:
设(BX)=1000H,(DS)=6000H,(61050H)=33H,(61051H)=44H。
试述执行下述两条指令后的结果。
LEABX,[BX+50H]
MOVBX,[BX+50H]
第一条指令执行后(BX)=1050H;
第二条指令执行后(BX)=4433H(见P.115图3-14)
从此例可以说明MOV指令和LEA指令的不同之处。
(2)指令LDS(loadpointintoDS)
指令格式为
LDSreg16,mem32;
(reg16)←(mem32+1):
(mem32)
;
(DS)←(mem32+3):
(mem32+2)
LDS指令源操作数mem32为存储器操作数,给出的是内存中4个连续单元的首地址,目标操作单元有两个。
一个为reg16,是BX、BP、SI、DI四个间址寄存器之一,存放上述4个存储单元的前两个单元内容作偏移地址。
另一个操作单元为隐含的DS,存放上述4个存储单元的后两个单元内容作段基址。
LDS指令应用举例:
设(DS)=6OOOH,内存地址为60348H开始的4个单元存放了一个32位的远指针98011H(作解释),如P.116图3-15所示。
试析执行下两条指令的结果。
LDSSI,[0348H]
MOVAX,[SI]
(SI)=8011H,(DS)=9000H,(AX)=3412H。
(3)指令LES(loadpointintoES)
LESreg16,mem32;
(ES)←(mem32+3):
LES指令和LDS指令相仿,仅将DS换成ES而已。
例见P.116。
4.标志传送指令
标志传送指令共有4条:
LAHF、SAAHF、PUSHF、POPF。
(1)LAHF(loadAHwithflag)指令
LAHF
该指令把标志寄存器低8位(含SF、ZF、AF、PF、CF五个标志位)传送到AH的对应位,如P.116图3-16所示。
指令执行对标志位无影响。
(2)SAHF(storeAHintoflag)指令
SAHF
SAHF指令与LAHF指令执行相反的操作,即将AH中的7、6、4、2、0位内容传送到标志寄存器的SF、ZF、AF、PF、CF位,以改变对应标志位的状态,但其它标志位不受影响。
LAHF指令和SAHF指令一般配对使用。
(3)PUSHF和POPF指令
该两条指令实质上为堆栈操作指令,只不过其操作数为标志寄存器FLAGS而已,操作功能类同堆栈操作指令。
PUSHF和POPF指令用于过程调用时保护标志位的状态。
PUSHF和POPF指令一般配对使用。
时间分配
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 接口 技术 教案