《微机原理与接口实验.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口实验.ppt(35页珍藏版)》请在三一办公上搜索。
1、1,微机原理与接口实验,实验三 串操作,PART1:汇编语言程序设计,计算机教学实验中心,2,目录,实验目的实验预习要求实验环境实验原理实验内容实验习题,3,实验目的,熟悉串操作指令的功能。了解串操作指令的使用方法。,4,实验预习要求,复习8086指令系统中的串操作类指令。按照题目要求在实验前编写好实验中的程序段。,5,实验环境,微型计算机一台调试程序 TD.EXE(可选DEBUG.EXE),6,TD的使用步骤(1),进入TurboDebugger,在CPU窗口下输入程序段:,7,TD的使用步骤(2),把各标志位的初值均设置为0;,8,TD的使用步骤(3),把IP指针指向程序段开始处;,9,T
2、D的使用步骤(4),单步运行程序,观察指令执行后标志位变化情况;,10,TD的使用步骤(5),分析指令执行后的结果及其对标志位的影响。,11,串操作指令简介,串:顺序放在内存中的一组相同类型的数据。串操作:对串中的元素进行相同的操作。串操作的寻址方式:源操作数指针DS:SI(DS可超越)目的操作数指针ES:DI 每次串操作后:自动修改SI和DI字节1,字2。DF标志决定。(注意:退出串操作后,指针指向最后操作的元素的下一个元素)可完成两个存储单元之间的传送和比较操作(仅串指令可以),12,重复前缀,串操作指令前面可加上重复前缀REP。当使用REP前缀时,串操作指令将重复执行,重复执行次数由CX
3、决定(带有REP前缀的串操作指令每执行一次,CX自动减1)。重复前缀包括:REP CX0 时重复执行REPE/REPZ CX0ZF=1时重复执行 REPNE/REPNZ CX0ZF=0时重复执行,13,串指令使用的一般方法,设置源串地址,设置目标串地址,设置串长度,设置操作方向DF,串指令,MOV SI,源串首地址(或LEA SI,源串变量名),MOV DI,目的串首地址(或LEA DI,目的串变量名),MOV CX,串长度,CLD(或STD),串指令,14,实验内容1,输入以下程序段并运行之,回答后面的问题。CLD MOV DI,1000H MOV AX,55AAH MOV CX,10H R
4、EP STOSW 上述程序段执行后:(1)从DS:1000H开始的16个字单元的内容是什么?(2)(DI)=?(CX)=?并解释其原因。,实验过程演示,15,串存储指令STOS使用提示,STOS指令的形式和操作为:STOSB:(ES):(DI)(AL)DI1 STOSW:(ES):(DI+1)(DI)(AX)DI2指令使用要点:本指令用于把一块存储区域填充成某一初始值(即对存储区进行初始化)。存储区域的首地址要预先设置到ES:DI中。要存储到串中的数据要预先存到AL(AX)中。,16,把从A000H开始的2KB内存单元清零。MOV DI,0A000H MOV AX,0 MOV CX,1024
5、CLD REP STOSW,串存储指令STOS使用举例1,A000H,00,00,1024,00,存储区,A002H,DI,AX,CX,A7FEH,0,A800H,1023,1022,0,17,把1000H开始的100个存储单元填入 ASCII码2AH(*)。MOV DI,1000H;首地址 MOV AL,2AH;*MOV CX,100;重复执行100次 CLD;增量修改DI REPSTOSB,串存储指令STOS使用举例2,存储区,2AH,1000H,2AH,2AH,DI,AX,2AH,1001H,1063H,1064H,100,CX,99,98,0,18,实验内容2,在上题的基础上,再输入以
6、下程序段并运行之,回答后面的问题。MOV SI,1000H MOV DI,2000H MOV CX,20H REP MOVSB程序段执行后:(1)从DS:2000H开始的16个字单元的内容是什么?(2)(SI)=?(DI)=?(CX)=?并分析之。,实验过程演示,19,串传送指令MOVS使用提示,MOVS指令的形式和操作为:MOVSB:(ES):(DI)(DS):(SI)SI1,DI1MOVSW:(ES):(DI+1)(DI)(DS):(SI+1)(SI)SI2,DI2 指令也可写成:MOVS dest,src指令使用要点:src用DS:SI寻址,dest用ES:DI寻址 传送是字节还是字,由
7、操作数的类型决定,20,用串传送指令实现200个字节的数据传送:LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB,串传送指令MOVS使用举例1,存储区,MEM1,MEM2,30H,31H,30H,31H,200,MEM1+1,MEM2+1,SI,DI,CX,199,198,21,串传送指令MOVS使用举例2,显示对应FLASH动画,22,在以上两题的基础上,再输入以下三个程序段并依次运行之。程序段1:MOV SI,1000H MOV DI,2000H MOV CX,10H REPZ CMPSW程序段1执行后:(1)ZF=?根据ZF的状态,你认为两
8、个串是否比较完了?(2)(SI)=?(DI)=?(CX)=?并分析之。,实验内容3,实验过程演示,23,实验内容3(续),程序段2:MOV 2008H,4455H MOV SI,1000H MOV DI,2000H MOV CX,10H REPZ CMPSW程序段2执行后:(1)ZF=?根据ZF的状态,你认为两个串是否比较完了?(2)(SI)=?(DI)=?(CX)=?并分析之。,实验过程演示,24,实验内容3(续),程序段3:MOV AX,4455H MOV DI,2000H MOV CX,10H REPNZ SCASW程序段3执行后:(1)ZF=?根据ZF的状态,你认为在串中是否找到了数据
9、4455H?(2)(SI)=?(DI)=?(CX)=?并分析之。,实验过程演示,25,串比较指令CMPS使用提示,CMPS指令的形式和操作为:CMPSB:(DS):(SI)(ES):(DI)SI1,DI1 CMPSW:(DS):(SI+1)(SI)(ES):(DI+1)(DI)SI2,DI2 指令也可写成:CMPS dest,src 指令的使用要点:比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。,26,串比较指令CMPS使用举例,显示对应FLASH动画,27,串扫描SCAS使用提示,SCAS指令的形式和操作为:对字节:(AL)(ES):(DI)DI1 对字:(AX)
10、(ES):(DI1)(DI)DI2指令的使用要点:搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。,28,在SCAS指令前使用重复前缀,可对串进行连续扫描比较:若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。,29,串扫描SCAS使用举例,在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。提示:在屏幕上显示一个字符
11、的指令段如下:MOV DL,MOV AH,2 INT 21H,30,MOV DI,1000H;(DI)串偏移地址 MOV CX,0AH;(CX)串长度 MOV AL,E;搜索关键字=E CLD;从低地址到高地址进行搜索 REPNZ SCASB;若未找到,继续搜索 JZ FD;找到,转至FD MOV DL,N;串中无E,(DL)N JMP DE;转至DEFD:DEC DI;指针回退 MOV ADDR,DI;ADDRE的地址 SUB DI,1000H MOV NUM,DI;NUM搜索次数 MOV DL,Y;(DL)YDE:MOV AH,2 INT 21H;显示字符,存储区,A,B,AL,E,C,D
12、,E,ADDR,DI,1001H,1002H,1003H,1004H,1005H,1000H,1004H,DL,Y,NUM,4,CX,AH,9H,8H,7H,6H,5H,31,实验内容4,从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。,实验过程演示,32,串载入LODS使用提示,LODS指令的操作为:对字节:(AL)(DS):(SI)SI1 对字:(AX)(DS):(SI1)(DI)
13、SI2指令的使用要点:串装入指令通常不加重复前缀。LODSB等价于:MOV AL,SI INC SILODSW等价于:MOV AL,SI INC SI INC SI,33,+3619,串载入LODS使用举例,将STRING1和STRING2表示的字符转换成相应数字相加后的结果,再转换成ASCII码显示。,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,被加数,加数,8,5,6,2,9,1,6,3,SUM,结果,.,.,07H,07H,02H,06H,2658,6277,34,LEA SI,SUM+3;(SI)SUM+3 MOV CX,4;(CX)
14、和长度 STD;置DF=1,减量修改SI MOV AH,02;(AH)功能号LP:LODSB;取BCD码至AL,且(SI)(SI)-1 ADD AL,30H;转换为ASCII码 MOV DL,AL;(DL)字符 INT 21H;显示字符 DEC CX JNZ LP,SUM,07H,07H,02H,06H,SUM+1,SUM+2,SUM+3,DL,36H,CX,4,+30H,输出,32H,37H,37H,AH,2,AL,06H,02H,07H,07H,3,2,1,0,SI,35,实验报告要求,整理出完整的实验程序段和运行结果,对结果进行分析。简要说明执行串操作指令之前应初始化哪些寄存器和标志位。总结串操作指令的用途及使用方法。,