1 / 35

微机原理与接口实验

微机原理与接口实验. PART1 :汇编语言程序设计. 实验三 串操作. 计算机教学实验中心. 目录. 实验目的 实验预习要求 实验环境 实验原理 实验内容 实验习题. 实验目的. 熟悉串操作指令的功能。 了解串操作指令的使用方法。. 实验预习要求. 复习 8086 指令系统中的串操作类指令。 按照题目要求在实验前编写好实验中的程序段。. 实验环境. 微型计算机一台 调试程序 TD.EXE (可选 DEBUG.EXE ). TD 的使用步骤( 1 ). 进入 TurboDebugger ,在 CPU 窗口下输入程序段 :.

hedwig
Download Presentation

微机原理与接口实验

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. TD的使用步骤(4) • 单步运行程序,观察指令执行后标志位变化情况;

  10. TD的使用步骤(5) • 分析指令执行后的结果及其对标志位的影响。

  11. 串操作指令简介 • 串:顺序放在内存中的一组相同类型的数据。 • 串操作:对串中的元素进行相同的操作。 • 串操作的寻址方式: 源操作数指针———DS:SI(DS可超越) 目的操作数指针——ES:DI • 每次串操作后: • 自动修改SI和DI——字节±1,字±2。DF标志决定±。(注意:退出串操作后,指针指向最后操作的元素的下一个元素) • 可完成两个存储单元之间的传送和比较操作(仅串指令可以)

  12. 重复前缀 串操作指令前面可加上重复前缀REP。当使用REP前缀时,串操作指令将重复执行,重复执行次数由CX决定(带有REP前缀的串操作指令每执行一次,CX自动减1)。 重复前缀包括: • REP CX≠0 时重复执行 • REPE/REPZ CX≠0∧ZF=1时重复执行 • REPNE/REPNZ CX≠0∧ZF=0时重复执行

  13. 串指令使用的一般方法 MOV SI, 源串首地址 (或LEA SI, 源串变量名) 设置源串地址 MOV DI, 目的串首地址 (或LEA DI, 目的串变量名) 设置目标串地址 MOV CX, 串长度 设置串长度 CLD(或STD) 设置操作方向DF 串指令 串指令

  14. 实验内容1 • 输入以下程序段并运行之,回答后面的问题。 CLD MOV DI,1000H MOV AX,55AAH MOV CX,10H REP STOSW 上述程序段执行后: (1) 从DS:1000H开始的16个字单元的内容是什么? (2) (DI)= ?(CX)= ? 并解释其原因。 实验过程演示

  15. 串存储指令STOS使用提示 STOS指令的形式和操作为: STOSB: ((ES):(DI))←(AL) DI±1 STOSW: ((ES):(DI+1)(DI))←(AX) DI±2 指令使用要点: • 本指令用于把一块存储区域填充成某一初始值(即对存储区进行初始化)。 • 存储区域的首地址要预先设置到ES:DI中。 • 要存储到串中的数据要预先存到AL(AX)中。

  16. 串存储指令STOS使用举例1 • 把从A000H开始的2KB内存单元清零。 MOV DI,0A000H MOV AX,0 MOV CX,1024 CLD REP STOSW DI AX CX 存储区 0 1024 … 0 1022 1023 … A000H 0 0 A002H 0 0 …… A7FEH 0 0 A800H

  17. 串存储指令STOS使用举例2 • 把1000H开始的100个存储单元填入 ASCII码2AH(*)。 MOV DI, 1000H ; 首地址 MOV AL, 2AH ;‘*’ MOV CX, 100 ; 重复执行100次 CLD ; 增量修改DI REPSTOSB 存储区 CX AX DI 98 99 100 … 0 2AH … 2AH 1000H 1001H 2AH … 2AH 1063H 1064H

  18. 实验内容2 • 在上题的基础上,再输入以下程序段并运行之,回答后面的问题。 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)) SI±1,DI±1 MOVSW: ((ES):(DI+1)(DI))←((DS):(SI+1)(SI)) SI±2,DI±2 指令也可写成:MOVS dest,src 指令使用要点: • src用DS:SI寻址,dest用ES:DI寻址 • 传送是字节还是字,由操作数的类型决定

  20. 串传送指令MOVS使用举例1 • 用串传送指令实现200个字节的数据传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB 存储区 CX SI … 199 200 198 … MEM1 30H MEM1+1 31H … DI 30H MEM2 MEM2+1 31H …

  21. 串传送指令MOVS使用举例2 显示对应FLASH动画

  22. 实验内容3 • 在以上两题的基础上,再输入以下三个程序段并依次运行之。 程序段1: MOV SI,1000H MOV DI,2000H MOV CX,10H REPZ CMPSW 程序段1执行后: (1) ZF=? 根据ZF的状态,你认为两个串是否比较完了? (2)(SI)= ?(DI)= ?(CX)= ? 并分析之。 实验过程演示

  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的状态,你认为在串中是否找到了数据4455H? (2)(SI)= ?(DI)= ?(CX)= ? 并分析之。 实验过程演示

  25. 串比较指令CMPS使用提示 CMPS指令的形式和操作为: CMPSB: ((DS):(SI))-((ES):(DI)) SI±1, DI±1 CMPSW: ((DS):(SI+1)(SI))-((ES):(DI+1)(DI)) SI±2, DI±2 指令也可写成:CMPS dest, src 指令的使用要点: • 比较的结果只反映在标志位上,串本身无变化。 • 本指令可用来检查两个串是否相等。

  26. 串比较指令CMPS使用举例 显示对应FLASH动画

  27. 串扫描SCAS使用提示 SCAS指令的形式和操作为: 对字节:(AL)-((ES):(DI)) DI±1 对字: (AX)-((ES):(DI+1)(DI)) DI±2 指令的使用要点: • 搜索指令执行的仍是比较(减法)操作,结果只影响标志位。 • 要搜索的关键字放在AL(字节)或AX(字)中。 • 本指令用于在串中查找指定的信息。

  28. 在SCAS指令前使用重复前缀 可对串进行连续扫描比较: • 若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX≠0),则继续比较。 • 若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX≠0)就继续比较。

  29. 串扫描SCAS使用举例 • 在ES段的偏移1000H开始处存有10个ASCII码。搜索’E’,若找到则记下搜索次数及存放地址,并在屏幕上显示’Y’;若未找到则显示’N’。 提示:在屏幕上显示一个字符的指令段如下: MOV DL,<字符> MOV AH,2 INT 21H

  30. 存储区 CX DI AL 6H 9H AH 7H 5H 8H ‘E’ … ≠ 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 ;转至DE FD:DEC DI ;指针回退 MOV ADDR, DI ;ADDR←’E’的地址 SUB DI, 1000H MOV NUM, DI ;NUM←搜索次数 MOV DL, ’Y’ ;(DL)←’Y’ DE:MOV AH, 2 INT 21H ;显示字符 1000H ‘A’ ≠ ‘B’ 1001H ≠ ‘C’ 1002H ≠ NUM ‘D’ 1003H √ ‘E’ 4 1004H … 1005H ADDR DL ‘Y’ 1004H

  31. 实验内容4 • 从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。 实验过程演示

  32. 串载入LODS使用提示 LODS指令的操作为: 对字节:(AL)-((DS):(SI)) SI±1 对字: (AX)-((DS):(SI+1)(DI)) SI±2 指令的使用要点: • 串装入指令通常不加重复前缀。 • LODSB等价于: ①MOV AL,[SI] ②INC SI • LODSW等价于: ①MOV AL,[SI] ②INC SI③INC SI

  33. 串载入LODS使用举例 STRING1 38H ‘8’ 被加数 • 将STRING1和STRING2表示的字符转换成相应数字相加后的结果,再转换成ASCII码显示。 35H ‘5’ 36H ‘6’ 32H ‘2’ ... 39H ‘9’ STRING2 2658 31H 加数 ‘1’ +3619 36H ‘6’ 33H ‘3’ 6277 ... 07H SUM 07H 结果 02H 06H

  34. LEA SI,SUM+3 ;(SI)←SUM+3 MOV CX,4 ;(CX)←和长度 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 …… CX AH 1 2 3 0 4 2 SUM 07H AL DL SUM+1 07H +30H 输出 37H 32H 36H 37H 06H 02H 07H 07H SUM+2 02H SUM+3 06H SI

  35. 实验报告要求 • 整理出完整的实验程序段和运行结果,对结果进行分析。 • 简要说明执行串操作指令之前应初始化哪些寄存器和标志位。 • 总结串操作指令的用途及使用方法。

More Related