您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 微机原理与接口技术(3)3_8086寻址方式与指令系统
第3章第3章:3.3数据传送类指令数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA第3章:3.3.1通用数据传送指令提供方便灵活的通用传送操作有3条指令MOVXCHGXLATMOVXCHGXLAT第3章:1.传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm;立即数送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存演示第3章:MOV指令--立即数传送movcl,4;cl←4,字节传送movdx,0ffh;dx←00ffh,字传送movsi,200h;si←0200h,字传送movbvar,0ah;字节传送;假设bvar是一个字节变量,定义如下:bvardb0movwvar,0bh;字传送;假设wvar是一个字变量,定义如下:wvardw0明确指令是字节操作还是字操作以字母开头的常数要有前导0第3章:MOV指令--寄存器传送movah,al;ah←al,字节传送movbvar,ch;bvar←ch,字节传送movax,bx;ax←bx,字传送movds,ax;ds←ax,字传送mov[bx],al;[bx]←al,字节传送寄存器具有明确的字节和字类型第3章:MOV指令--存储器传送moval,[bx];al←ds:[bx]movdx,[bp];dx←ss:[bp+0]movdx,[bp+4];dx←ss:[bp+4]moves,[si];es←ds:[si]不存在存储器向存储器的传送指令第3章:MOV指令--段寄存器传送mov[si],dsmovax,ds;ax←dsmoves,ax;es←ax←ds对段寄存器的操作不灵活第3章:MOV指令传送功能图解MOV指令也并非任意传送!立即数段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存储器非法指令的主要现象:两个操作数的类型不一致无法确定是字节量还是字量操作两个操作数都是存储器段寄存器的操作有一些限制第3章:非法指令--两个操作数类型不一致在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令MOVAL,050AH;非法指令,修正:;movax,050ahMOVSI,DL;非法指令,修正:;movdh,0;movsi,dx第3章:非法指令--无法确定是字节量还是字量操作当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明MOV[BX+SI],255;非法指令,修正:;movbyteptr[bx+si],255;byteptr说明是字节操作;movwordptr[bx+si],255;wordptr说明是字操作第3章:非法指令--两个操作数都是存储器8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)MOVbuf2,buf1;非法指令,修正:;假设buf2和buf1是两个字变量;movax,buf1;movbuf2,ax;假设buf2和buf1是两个字节变量;moval,buf1;movbuf2,al第3章:非法指令--段寄存器的操作有一些限制8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活MOVDS,ES;非法指令,修正:;movax,es;movds,axMOVDS,100H;非法指令,修正:;movax,100h;movds,axMOVCS,[SI];非法指令;指令存在,但不能执行第3章:2.交换指令XCHG(exchange)把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHGreg,reg/mem;regreg/mem演示第3章:例2.2数据交换movax,1199h;ax=1199hxchgah,al;ax=9911h;等同于xchgal,ahmovwvar,5566h;wvar是一个字量变量xchgax,wvar;ax=5566h,wvar=9911h;等同于xchgwvar,axxchgal,byteptrwvar+1;ax=5599h,wvar=6611h;“byteptrwvar+1”强制为字节量,只取高字节与AL类型交换,否则数据类型不匹配第3章:3.换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码XLAT;al←ds:[bx+al]演示第3章:3.3.2堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP图示第3章:进栈指令PUSH进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部PUSHr16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/seg演示pushaxpush[2000h]第3章:出栈指令POP出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2POPr16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2popaxpopwvar演示第3章:堆栈操作的特点堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈段是程序中不可或缺的一个内存区,常用来临时存放数据传递参数保存和恢复寄存器第3章:3.3.3标志操作指令1.标志位操作指令CLC;复位进位标志:CF←0STC;置位进位标志:CF←1CMC;求反进位标志:CF←~CFCLD;复位方向标志:DF←0STD;置位方向标志:DF←1CLI;复位中断标志:IF←0STI;置位中断标志:IF←12.标志寄存器低字节与AH的传送指令3.标志寄存器出入堆栈指令将存储器操作数的有效地址送至指定的16位通用寄存器第3章:有效地址传送指令LEA(loadeffectiveaddress)LEAr16,mem;r16←mem的有效地址EA例题2.5有效地址的获取movbx,400hmovsi,3chleabx,[bx+si+0f62h];BX←400H+3CH+0F62H=139EH第3章:例2.6地址传送与内容传送wvardw4142h;假设偏移地址为04H…movax,wvar;内容传送:AX=4142Hleasi,wvar;地址传送:SI=0004H;等同于leasi,[0004h]movcx,[si];内容传送:CX=4142Hmovdi,offsetwvar;=movdi,0004h;利用操作符OFFSET获取变量的有效地址movdx,[di];内容传送:DX=4142H第3章:调试程序DEBUGDEBUG是常用的汇编语言级调试工具,为汇编语言程序员提供了分析指令、跟踪程序的有效手段常用命令:-A汇编-U反汇编-T单步执行-G断点执行-D数据显示-R寄存器启动方法DOS下执行DEBUG.EXE程序Windows9x中进入MS-DOS环境执行DEBUG.EXE程序Windows2000/XP/NT下运行COMMAND命令(不是CMD命令,也不要从“命令提示符”)进入MS-DOS环境执行DEBUG.EXE程序
本文标题:微机原理与接口技术(3)3_8086寻址方式与指令系统
链接地址:https://www.777doc.com/doc-3176428 .html