第3章-2数据传送指令教材_第1页
第3章-2数据传送指令教材_第2页
第3章-2数据传送指令教材_第3页
第3章-2数据传送指令教材_第4页
第3章-2数据传送指令教材_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

80X86的寻址方式和指令系统

数据传送类指令2024/3/2113.38086/8088指令系统8086/8088的指令系统可分为以下6类(功能组) 3.3.1 数据传送类指令

3.3.2 算术运算类指令

3.3.3 逻辑运算与位移

3.3.4 串操作指令

3.3.5 控制转移指令

3.3.6 处理器的控制类指令

2024/3/2123.3.1数据传送类指令数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA2024/3/213一、通用数据传送指令提供方便灵活的通用传送操作有5条指令

MOV

XCHG

XLAT

PUSH/POP2024/3/2141.

传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm;立即数送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存演示2024/3/2151.

传送指令MOV(move)具体传送方向:REG

REG(除了CS和IP以外)MOVAX,BXREG

内存

MOVAX,[2010H]

MOV[SI],CX

REG←立即数MOVAL,32H

内存←立即数

MOVWORDPTR[DI],1080HMOV指令不能实现两个存储单元之间的数据传送。例:

MOVAL,AREA1MOVAREA2,AL2024/3/216MOV指令——立即数传送movCL,4

;CL←4,字节传送movDX,0FFh

;DX←00FFh,字传送movSI,200h

;SI←0200h,字传送movbvar,0Ah

;字节传送;假设bvar是一个字节变量,定义如下:bvar

DB

0movwvar,0Bh

;字传送;假设wvar是一个字变量,定义如下:wvar

DW

0明确指令是字节操作还是字操作以字母开头的常数要有前导02024/3/217MOV指令——寄存器传送movah,al ;ah←al,字节传送mov

bvar,ch ;bvar←ch,字节传送mov

ax,bx ;ax←bx,字传送mov

ds,ax ;ds←ax,字传送mov[bx],al ;[bx]←al,字节传送寄存器具有明确的字节和字类型2024/3/218MOV指令——存储器传送mov

al,[bx] ;al←ds:[bx]mov

dx,[bp] ;dx←ss:[bp+0]movdx,[bp+4] ;dx←ss:[bp+4]mov

es,[si] ;es←ds:[si]MOV传送指令不存在存储器向存储器传送2024/3/219MOV指令——段寄存器传送mov[si],dsmov

ax,ds ;ax←dsmov

es,ax ;es←ax←ds对段寄存器的操作不灵活2024/3/2110例3.1数据传送有如下两条指令:

MOVDS,[1000H] MOV[BX],ES设执行前:

(DS)=4000H,[41000H]=00H,[41001H]=11H,

(ES)=3000H,(BX)=2000H则这两条指令执行后:

(DS)=1100H, [13000H]=00H, [13001H]=30H2024/3/2111MOV指令传送功能图解非法指令的主要现象:两个操作数的类型不一致无法确定是字节量还是字量操作两个操作数都是存储器两个段寄存器之间直接传送数据立即数、CS、IP作为目的操作数立即数直接送段寄存器立即数存储器通用寄存器AXBXCXDXBPSPSIDI段寄存器CSDSESSSMOV指令也并非任意传送!2024/3/2112非法指令——两个操作数类型不一致在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令

MOVAL,050AH ;非法指令,修正:;movax,050ahMOVSI,DL;非法指令,修正:;movdh,0;mov

si,dx2024/3/2113非法指令——无法确定是字节量还是字量操作当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明

MOV[BX+SI],255 ;非法指令,修正: ;mov

byteptr[bx+si],255

;byteptr

说明是字节操作 ;mov

wordptr[bx+si],255

;wordptr

说明是字操作2024/3/2114非法指令——两个操作数都是存储器8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)

MOVbuf2,buf1 ;非法指令,修正: ;假设buf2和buf1是两个字变量 ;movax,buf1 ;movbuf2,ax ;假设buf2和buf1是两个字节变量 ;moval,buf1 ;movbuf2,al2024/3/2115非法指令——段寄存器的操作有一些限制8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活

MOVDS,ES ;非法指令,修正: ;mov

ax,es ;mov

ds,ax MOVDS,100H ;非法指令,修正: ;movax,100h ;mov

ds,ax MOVCS,[SI] ;非法指令 ;指令存在,但不能执行2024/3/21162.交换指令XCHG(exchange)把两个数据进行互换XCHGreg,reg/mem;reg

reg/mem寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据演示2024/3/2117例3.2数据交换movax,1199h ;ax=1199hxchgah,al ;ax=9911h;等同于xchgal,ahmovwvar,5566h ;wvar是一个字量变量xchg

ax,wvar ;ax=5566h,wvar=9911h;等同于xchg

wvar,ax

xchgal,byteptrwvar+1 ;ax=5599h,wvar=6611h ;“byteptrwvar+1”强制为字节量,只取高字节与AL类型交换,否则数据类型不匹配2024/3/2118例3.2数据交换注意:①目的和源操作数不能均为内存操作数。②不允许使用CS和IP。③段寄存器和立即数不能作为操作数。2024/3/21193.换码(查表)指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLAT;al←ds:[bx+al]

或XLAT表首址;表首址置于BX中将一种代码翻译成另一种代码。功能:完成一个字节长的查表转换。演示2024/3/2120换码(查表)指令XLAT(translate)换码指令执行前:建立字节表格BX←表首地址AL←需转换的代码(相对表格首地址的位移量)表格的内容即为转换后的代码 换码指令执行后:将AL寄存器的内容转换为目标代码注意:因AL寄存器只有8位,所以表格的长度≤2562024/3/2121例3.3换码(查表)查平方表,32=?

LEABX,TABLE ;令BX=TABLE地址值MOVAL,3 XLATTABLE ;AL=[BX+3] ;=[TABLE+3] ;=32注:XLAT指令将非线性的代码操作转换化线性的查找操作。2024/3/21224.堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP图示2024/3/2123进栈指令PUSH进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部PUSHr16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/segpushaxpush[2000h]演示2024/3/2124出栈指令POP出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2POPr16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2popaxpopwvar演示2024/3/2125堆栈操作的特点堆栈操作的单位是字,进栈和出栈只对字操作数字操作数据从栈顶压入和弹出时,都是低地址字节送低位字节,高地址字节送高位字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据MOVAX,[BP+04H]堆栈段是程序中不可或缺的一个内存区,常用来临时存放数据传递参数保存和恢复寄存器栈底的定义:SS:SP赋初值—规定堆栈在内存中的位置,SP的初值规定了所用堆栈段的大小。2024/3/2126堆栈操作的特点注意:①堆栈操作总是按字进行,没有字节操作。

PUSHAL×POPDH

×②操作数:reg/seg/内存单元

PUSH1000H

×③PUSHCS

√POPCS

×2024/3/2127二、有效地址传送指令LEA(loadeffectiveaddress)将存储器操作数的有效地址送至指定的16位通用寄存器LEAr16,mem;r16←mem的有效地址EA例题有效地址的获取

movbx,400h

movsi,3chleabx,[bx+si+0f62h];BX←400H+3CH+0F62H=139EH2024/3/2128例3.4地址传送与内容传送与MOV指令的区别:不是传送变量本身,而是传送变量的地址。wvar

dw4142h ;假设偏移地址为04H…mov

ax,wvar ;内容传送:AX=4142Hleasi,wvar ;地址传送:SI=0004H;等同于leasi,[0004h]mov

cx,[si] ;内容传送:CX=4142Hmov

di,offset

wvar ;=movdi,0004h ;利用操作符OFFSET获取变量的有效地址mov

dx,[di] ;内容传送:DX=4142H2024/3/2129地址传送指令LDSLDSReg16,源;

目的REG←“源”开始的两单元内容(地址偏移量)

DS←“源+2”开始的两单元内容(段基地址)

例:LDSSI,[2030H]

若执行前:DS=5000H,[52030H]=0240H,[52032H]=3000H。

指令执行后:SI=0240H,DS=3000H2024/3/2130四、标志位传送FR←→AH(字节);FR←→堆栈(字)单字节指令,操作数——隐含规定,无操作数指令1.读取标志指令LAHF

格式:LAHF

功能:AH←FR的低字节即:AHSFZF×AF×PF×CF2024/3/2131四、标志位传送2.设置标志指令SAHF

格式:SAHF

功能:FR的低字节←AH

这些指令不影响溢出标志、方向标志DF,中断允许标志和跟踪标志。可能影响标志寄存器的SF、ZF、AF、PF和CF,它取决于AH中相应位的状态。2024/3/2132四、标志位传送3.PUSHF

功能:先执行(SP)←(SP)-2;再将FR内容压入堆栈4.POPF

功能:从堆栈弹出一个字送FR,同时(SP)←(SP)+2

这条指令执行后,标志寄存器的标志位就取决于源堆栈顶部单元的内容。用途:①PUSHF和POPF指令一般用于子程序和中断处理程序的首尾,对主程序标志起保护和恢复作用。②实现对跟踪标志TF状态的修改。2024/3/2133五、输入输出指令(InputandOutput)输入输出指令共两条:IN(Inputbyteorword)OUT(Outputbyteorword)

输入指令用于CPU从外设端口接受数据,输出指令用于CPU向外设端口发送数据。无论接受还是发送数据,必须通过累加器AX(字)或AL(字节),又称累加器专用传送指令。输入、输出指令不影响标志位。2024/3/2134关于外设端口每个外设要占几个端口:数据口,状态口和控制口。CPUI/O设备译码数据端口DBABCBI/O接口状态端口控制端口2024/3/2135关于外设端口信息交换要通过端口。在IBMPC机里,可以配接许多外部设备。每个外设与CPU之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。端口数:外部设备最多有65536个I/O端口。A0~A15译码形成。端口号:端口号(即外设端口地址)为0000H~FFFFH。2024/3/2136端口的访问直接寻址:端口号中前256个端口(0~FFH),可以直接写在指令中,这就是直接寻址。间接寻址:当端口号≥256时,只能使用间接寻址必须先把端口号放到DX寄存器中。不需要用任何段寄存器来修改它的值。2024/3/2137IN(Inputbyteorword)输入指令格式:INacc,port;(acc)

(port)具体形式有四种:

INAL,imm8;端口地址8位,

温馨提示

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

评论

0/150

提交评论