汇编语言 实验报告_第1页
汇编语言 实验报告_第2页
汇编语言 实验报告_第3页
汇编语言 实验报告_第4页
汇编语言 实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、大理大学实 验 报 告课程名称: 微机原理与接口技术 学 院: 工程学院 专 业: 年 级: 班 级: 姓 名: 羽卒兰cl 学 号: 指导教师: 2016 年 5 月 19 日大理学院教务处 制 11 / 11实验名称: 汇编语言实验时间:2016年5月19日地点:工科楼610班组:A组 教 师 评 语成绩教师签名实验报告1  实验目的    熟悉汇编语言语法熟悉8086常用指令掌握BIOS中断调用及DOS功能调用2  实验工具硬件配置:微机原理实验箱(众友)一台、计算机一台软件环境: TD、湖北众友3 实验内容和要求例题4.11,习题4.3

2、2,习题4.33 程序后面添加注释。4 实验方法及结果例题4.11:在以BLOCK开始的存储区域存放着100个字节的8位带符号数,在该存储区域内找出其中的最大数和最小数,分别放在MAX和MIN单元中,编程实现(p216页)。分析:100个8位带符号数,从第一个数开始逐个比较,搜索其中的大数和小数,因为其中字节长度已知,可以用个数作为循环控制的计数器。那么,每次比较,得到一个大数和小数,循环完毕,即可找到最大数和最小数。NAME FOUND ;模块名DATA SEGMENT ;定义数据段BUF DB -2,+5,+4,-8,-70,+45,+65,+36,-36,-89,+128,+45,+88

3、,+21,-67,-32,+70,+34,+3;定义字节数据COUN EQU $-BUF ;数据个数MAX DB ? ;放最大值的存储单元MIN DB ? ;放最大值的存储单元DATA ENDS ;数据段结束STACK SEGMENT STACK ;定义堆栈段STR DB 64H DUP(?) ;堆栈段占64个单元STACK ENDS ;堆栈段结束MYCODE SEGMENT ;定义代码段 ASSUME CS:MYCODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX ;DS值为数据段首地址DATA,DS赋初值 MOV AX,STACK ;SS值为数据

4、段首地址STACK MOV SS,AX ;SS赋初值 MOV SP,LENGTH STR ;设堆栈段指针 MOV CX,COUN-1 ;实际比较次数 MOV SI,OFFSET BUF ;建立地址指针 MOV AL,SI ;取第一个数放AL中,大数放AL MOV BL,SI ;取第一个数放AL中,小数放BL INC SI ;INC加1指令,在书本p112页,目标操作数加1,取下一个数LOP: CMP AL,SI ;CMP比较指令,p114页,将目标操作数AL减;源操作数SI,其差值不送回目标操作数。 JGE NEXT1 ;JGE大于或等于,p142页,AL>=下一个数,不交换 MOV A

5、L,SI ;否则交换,大数在AL中NEXT1:CMP BL,SI ;最小数与下一个单元数比较 JL NEXT ;最小值比较小,BL<=下一个数,不交换 MOV BL,SI ;否则交换,小数放BL中NEXT: INC SI ;目标操作数加1,取下一个数 LOOP LOP ;CX-1到CX,CX不等于0转LOP MOV MAX,AL ;存大数到MAX MOV MIN,BL ;存小数到MIN MOV AH,4CH ;DOS系统功能调用,p201页, INT 21H ;结束本程序运行,返回DOS状态MYCODE ENDS ;代码段结束 END START ;整个源程序汇编结束结果分析:中间有两次

6、比较判断,以便在每次循环中找到该次循环中的大数和小数,100个数比较99次,最后才找到大数放在MAX中,小数放在MIN中(p243页); 找到最大值是+128,放在MAX中,最小值是-89,放在MIN中。 习题4.32:在键盘上输入两个字符存入A,B单元中,比较它们的大小,并在屏幕显示;A>B或A<B或A=B。DATA SEGMENT ;定义数据段 STR1 DB 'A>B','$' ;DB定义数据字节命令p185页,若字节是字符串,必须用, STR2 DB 'A<B','$' ;以$字符结束 STR3 D

7、B 'A=B','$'DATA ENDS ;数据段结束CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;DS值为数据段首地址DATA,DS赋初值MOV AH,01H ;1号功能键调用(键盘输入并显示),等待标准输入设备(键盘);送入一个字符,并放到寄存器AL中INT 21H ;AL中存放键盘输入字符的ASCII码,并在CRT屏幕上显示MOV BL,AL ;将AL寄存器中的数据放到BL寄存器中MOV AH,01HINT 21HCMP BL,AL ;比较指令,将AL和BL寄存

8、器中的数据进行比较JG GOTO1 ;JG如大于,转移到GOTO1 JL GOTO2 ;JL如小于,转移到GOTO2MOV AH,09H ;9号功能键调用(屏幕显示字符串符号)MOV DX,OFFSET STR3 ;回车换行显示字符串STR3INT 21HJMP EXIT ;JMP无条件转移指令,p139页,转EXITGOTO1:MOV AH,09H ;9号功能键调用(屏幕显示字符串符号) MOV DX,OFFSET STR1 ;回车换行显示字符串STR1 INT 21H JMP EXIT ;JMP无条件转移指令,转EXITGOTO2:MOV AH,09H MOV DX,OFFSET STR2

9、 ;回车换行显示字符串STR2 INT 21HEXIT:MOV AH,4CH ;DOS系统功能调用,p201页, INT 21H ;结束本程序运行,返回DOS状态CODE ENDS ;代码段结束 END START ;整个源程序汇编结束结果分析:A输入4,B输入1,结果显示A>B; A输入4,B输入7,结果显示A<B; A输入4,B输入4,结果显示A=B;习题4.33:将count开始存放的n个字节的字符串,统计相同字符的字符个数,找出相同字符最多的字符,存于CORE单元中(p243页)DATA SEGMENT ;定义数据段STR1 DB 'ABCDBBBBDFDSASNM

10、MSWA' ;定义字符串 CHAR DB ? ;?表示仅分配1个储存单元,并不存入如何数据NUM DB 0 ;定义一个变量num 并初始化其内存单元,统计相同字符的字符个数DATA ENDS ;数据段结束CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;DS值为数据段首地址DATA,DS赋初值 MOV SI,OFFSET STR1 ;字符串STR1偏移地址 MOV AL,SI ;取第一个数放AL中,放AL MOV CHAR,AL ;返回参数AL MOV AH,01H ;1号功能键调用(键盘输入并

11、显示)COUNT:MOV BX,SI ;SI寄存器的个数传送到BX寄存器,计数COUNT2:INC BX ;取BX寄存器的下一个 CMP BX,OFFSET CHAR ;比较取的字符与BX中的字符是否相同 JZ REPLACE ;结果为零,转REPLACE CMP AL,BX ;两个数比较 JNZ COUNT2 ;结果不为零,转COUNT2 INC AH ;加1指令 MOV byte ptr BX,0 ;取到BX里面数为0 JMP COUNT2 ;无条件转移COUNT2 REPLACE:CMP NUM,AH ;比较相同字符的字符个数 JG NEXT ;JG如大于,转移到NEXT MOV NUM

12、,AH ;放相同字符的字符个数 MOV CHAR,AL ;放字符NEXT:INC SI ;指向下一个数据 CMP SI,OFFSET CHAR ;比较相同字符个数是否相同 JZ EXIT ;结果为零,转EXIT MOV AL,SI ;取字符串中的字符放AL中,放AL CMP AL,0 ;比较AL与0 JZ NEXT ;结果为零,转EXIT MOV AH,01H ;1号功能键调用(键盘输入并显示) JNZ COUNT ;结果不为零,转COUNTEXIT:MOV AH,4CH ;DOS系统功能调用,p201页 INT 21H ;结束本程序运行,返回DOS状态CODE ENDS ;代码段结束 END

13、 START ;整个源程序汇编结束结果分析:此题找到相同字符最多的字符B,存于CORE单元。附加题:例4.1(p173页)要求把3个16位数相加,其和仍为16位数。NAME ADDHEXSTACK SEGMENT STACK 'STACK' ;定义堆栈段STAPN DB 100 DUP(?) ;定义堆栈段的100个字节的连续存储区TOP EQU LENGTH STAPN ;定义符号TOP,其数值为堆栈区长度STACK ENDS ;定义堆栈段结束DATA SEGMENT ;定义数据段NUM1 DW 1234H ;定义16位数1234H,放在变量NUM1中NUM2 DW 5678H

14、 ;定义16位数5678H,放在变量NUM2中NUM3 DW 0ABCDH ;定义16位数ABCDH,放在变量NUM3中ANS DW ? ;定义变量ANS,存放相加之和DATA ENDS ;定义数据段结束CODE SEGMENT ;定义代码段 ASSUME CS:MYCODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX ;DS值为数据段首地址DATA,DS赋初值 MOV AX,STACK ;SS值为数据段首地址STACK MOV SS,AX ;SS赋初值 MOV SP,TOP ;堆栈指针赋值 MOV AX,NUM1 ;取被加数 ADD AX,NUM2

15、 ;第一个数和第二个数相加,和放在AX中 ADD AX,NUM3 ;再加上第三个数,和放在AX中 MOV ANS,AX ;存三个数相加之和 MOV AH,4CH ;DOS系统功能调用,p201页 INT 21H ;结束本程序运行,返回DOS状态CODE ENDS ;代码段结束 END START ;整个源程序汇编结束例4.6(p212页)编写计算Z=(X2-3*Y)/2的程序。设X、Y均为单字节整数,结果Z仍为1个字节。DATA SEGMENTX DB 25Y DB 32Z DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX

16、,DATA ;初始化DS MOV DS,AX MOV AL,X MUL AL ;A=X2,源操作数*AL送到AX里 MOV BX,0 ;把BX清零 MOV BL,Y ADD BL,BL ADC BH,0 ;处理前面BL+BL的进位 ADD BL,Y ;3*Y ADC BH,0 ;考虑进位 SUB AX,BX ;X2-3*Y SHR AX,1 ;(X2-3*Y)/2 MOV Z,AX ;保存结果 MOV AH,4CH INT 21H ;返回DOSCODE ENDS END START ;汇编结束例4.7(p213页)在存储变量DAT1开始有两个字节的无符号加数,在存储变量DAT2开始有两个字节的

17、无符号被加数,求两个数的和并放在DAT3单元中,设二进制数在存储单元存放的顺序为,低字节在低地址上,高字节在高地址上。NAME MYPROGDATA SEGMENTDAT1 DB 5EH,89HDAT2 DB 40H,0ABHDAT3 DW ?DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART: MOV AX,DATA MOV DS, AX MOV SI, 0 ;位移量初值 MOV AL,DAT1SI ;取被加数低位5EH ADD AL,DAT2SI ;两数相加40H+5EH MOV DAT3SI, AL INC SI ;加1指令,调整位移

18、量 MOV AL, DAT1SI ;取被加数高位89H ADC AL, DAT2SI ;带进位加 MOV DAT3SI,AL MOV AH, 4CH INT 21HCODE ENDS END START大小写互换DATA SEGMENTBEFORE DB 'Before change:',0DH,0AH,'$'AFTER DB 'After change:',0DH,0AH,'$'BUF DB 'CHANGEasdaAJBHBJBabA',0DH,0AH,'$'DATA ENDSCODE SEGME

19、NTASSUME CS:CODE,DS:DATABEGIN:MOV AX,DATA MOV DS,AX MOV DX,OFFSET BEFORE MOV AH,09H INT 21H MOV DX,OFFSET BUF MOV AH,09H INT 21H MOV CL,14H MOV SI,OFFSET BUFLOOP1:MOV AL,SI CMP AL,'A' JB J CMP AL,'Z' JA BG ADD AL,20H JMP JBG:CMP AL,'a'JB JCMP AL,'z'JA JSUB AL,20HJMP J

20、J:MOV SI,AL INC SIDEC CLJNZ LOOP1MOV DX,OFFSET AFTERMOV AH,09HINT 21HMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,01HINT 21HEXIT:MOV AH,4CH INT 21HCODE ENDSEND BEGIN5 实验总结汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的。1.汇编语言程序结构基本程序结构有三种:顺序结构、分支选择结构和循环结构。P212页DATA SEGMENT< 数据定义伪指令序列> 源程序由若

21、干条语句组成DATA ENDS 程序由最多4个段组成,STACK SEGMENT STACK 数据段、堆栈段、代码段、附加段<数据定义伪指令序列> 每个段有一名字,STACK ENDS 并以符合SEGMENT表示段的开始,CODE SEGMENT 以END作为段的结束符号<程序段>CODE ENDSENDS2.汇编语言上机操作步骤(1) 用编辑程序建立.ASM源文件;(2)用宏汇编程序MASM等汇编源文件,生成.OBJ目标码文件;(3)用连接程序LINK对目标码文件等模块进行连接,生成.EXE可执行文件;(4)键入可执行文件名执行该文件,分析执行结果;(5) 用DEBUG等工具调试.ASM源程序,再汇编、连接、运行,直到得出正确结果。为此,除了DOS系统软件和编辑程序外,还需要备置如下程序:汇编程序 masm.exe或asm.exe或tasm.exe等连接程序 link.exe或tlink.exe等汇编调试程序 等交叉引用程序 cref.exe符号索引文件处理程序等3.汇编语言程序调试方法DEBUG.COM程序是一个有效的动态调试工具,用于实现系统维护。1、DEBUG的启动DEBUG的启动格式如下:DEBU

温馨提示

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

评论

0/150

提交评论