ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:20.67KB ,
资源ID:6516564      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6516564.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中南大学 汇编语言实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中南大学 汇编语言实验报告.docx

1、中南大学 汇编语言实验报告中南大学 汇编语言实验报告 计算机原理与汇编 实 验 报 告 学生姓名 学 号 专业班级 指导教师 贺建飚 学 院 信息科学与工程学院 完成时间 2019年6月 实验一 二进制转十六进制 一、实验目的 (1) 掌握循环程序的设计方法。 (2)掌握汇编语言源程序的编辑、汇编、连接及调试过程。 (3)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。 (4) 学会针对不同的问题,选用不同的组织循环的方法。 二、实验要求 掌握循环程序的过程和汇编实现原理,进一步熟练掌握DEBUG操作指令以及汇编语言源程序的编辑、汇编、连接及调试过程。 三、实验内容 掌握

2、循环排序算法的思想: 二进制到十六进制转换程序 实验代码如下: assume cs:code code segment main proc far start: mov bx,*0b ;待转换成十六进制的二进制数 mov ch,4 ;设置循环次数 rotate: mov cl,4 ;设置循环左移的位数 rol bx,cl ;将bx中的每位依次循环左移4位, ;每左移一次,把最高位同时移入CF和操作数最低位 mov al,bl and al,0fh ;将al高4位清0,保留从rol循环移位到al低四位的值 add al,30h ;将4位二进制数转换成对应的ASCII码 cmp al,3ah ;判

3、定4位二进制数是否大于9 jl print add al,7h print: mov dl,al ;调用中断程序输出单个字符 mov ah,2 int 21h dec ch ;继续循环,直到循环4次为止 jnz rotate main endp mov ax,4c00h int 21h code ends end 四、实验结果 DEBUG调试如下: 五、实验心得 编了这个程序之后发现,想要真正理解一个程序都是需要掌握众多助记符的用法以及它的意思,只有了解并明白了这些之后才可以分析程序或者是编写简单的小程序。 实验二 起泡排序算法的程序实现 一、实验目的 (1)掌握循环程序的设计方法。 (2)掌

4、握汇编语言源程序的编辑、汇编、连接及调试过程。 (3)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。 (4)学会针对不同的问题,选用不同的组织循环的方法。 二、实验原理 循环结构分DO_WHILE和DO_UNTIL两种,无论使用哪种循环结构,循环程序一般应包括以下几部分: 循环初始化。它包括设置循环次数的初始值、地址指针的初始设置等。 循环体。这是循环工作的主体,包括要重复执行的操作,以及循环的修改部分。修改部分包括地址指针的修改、循环控制条件的修改等。 循环控制部分。它是控制循环的关键,判断循环条件满足与否。 特别要注意循环入口和循环次数的正确设置、地址指针及循环控制

5、条件的修改等。否则会得不到期望的结果。 三、实验内容 掌握循环排序算法的思想: 起泡排序算法的程序实现 实验代码如下: DATAS SEGMENT BUFFER DB 100 DUP(?) X DB 5 DUP(?) STRING1 DB PLEASE INPUT DATAS:,$ STRING2 DB AFTER SORT IS:,$ SHIFT DB 13,10,$ SPACE DB 20H,$ DATAS ENDS STACKS SEGMENT DB 256 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STAC

6、KS,ES:DATAS START: MOV AX,DATAS MOV DS,AX MOV ES,AX MOV AX,STACKS LEA SI,BUFFER MOV CX,0 LEA DX,STRING1 MOV AH,09H INT 21H L1: MOV AH,01H ;/键盘输入转成数 INT 21H CMP AL,0DH JE L2 CMP AL,20H JE L3 XOR AH,AH SUB AX,30H XCHG AX,BX MOV DX,10 MUL DX ADD BX,AX JMP L1 L3: INC CX MOV SI,BL ADD SI,1 XOR BX,BX JMP

7、L1 L2: LEA DX,SHIFT MOV AH,09H INT 21H MOV SI,BL LEA DI,X MOV DI,CL LABLE2: LEA SI,BUFFER PUSH CX LABLE: MOV AL,SI CMP AL,SI+1 JBE L4 XCHG AL,SI+1 MOV SI,AL L4: ADD SI,1 ;跳到回车处理 ;空格处理 ;/存储到buffer中;/ 排序算法 POP CX LOOP LABLE2 LEA DX,STRING2 MOV AH,09H INT 21H LEA DI,BUFFER L7: MOV CX,2 MOV BH,DI L6: PU

8、SH CX MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH CMP DL,9 JBE L5 ADD DL,7 L5: ADD DL,30H MOV AH,02H INT 21H POP CX LOOP L6 INC DI LEA DX,SPACE MOV AH,09H INT 21H LEA SI,X MOV BL,SI CMP BL,0 DEC BL LEA SI,X MOV SI,BL JGE L7 MOV AH,4CH INT 21H CODES ENDS END START 四、实验结果 ;/显示字符 DEBUG调试如下: 五、实验心得 1. 在进行循环

9、程序设计时,要注意循环初始化、内外层循环的控制、循环结束条件等的设置,对整个程序的执行逻辑要非常清楚,这样可以避免死循环等意外情况的出现。 2. 多层循环的控制更为复杂,编写代码时,要注意注释重要的循环控制部分,这样思路才不会乱。同时要对照流程图,随时观察代码的逻辑思路是否正确。 3. 当要观察排序结果时,可利用D命令,显示数据段的内容,检查程序是否正常运行。 实验三 查找匹配字符串 一、实验目的 (1)掌握循环程序的设计方法。 (2)掌握汇编语言源程序的编辑、汇编、连接及调试过程。 (3)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。 (4) 学会针对不同的问题,选用

10、不同的组织循环的方法。 二、实验要求 掌握循环程序的过程和汇编实现原理,进一步熟练掌握DEBUG操作指令以及汇编语言源程序的编辑、汇编、连接及调试过程。 三、实验内容 掌握循环排序算法的思想: 查找匹配字符串:程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示NO match!;如果句子中包含关键字则显示MATCH,且把该字在句子中的位置用十六进制数显示出来。 实验代码如下: DATA SEGMENT mess1 DB Enter keyword:,$ mess2 DB Enter Sentence:,$ mess3 DB Match at location:,$ mess

11、4 DB NOT MATCH.,13,10,$ mess5 DB H of the sentence,13,10,$ change DB 13,10,$ stoknin1 label byte max1 db 10 act1 db ? stokn1 db 10 dup(?) stoknin2 label byte max2 db 50 act2 db ? stokn2 db 50 dup(?) DATA ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODE SEGMENT ;*代码段 main proc far assume cs:code,ds:da

12、ta,es:data START: push ds sub AX,AX sub BX,BX sub DI,DI sub SI,SI push AX ;为返回dos并清空后面要用到的寄存器 MOV AX,DATA MOV DS,AX LEA DX,mess1 MOV ah,09 INT 21h ;输出Enter keyword LEA DX,stoknin1 MOV ah,0ah ;用21号中段的0ah号功能获取关键字 INT 21h cmp act1,0 je exit ;如果为空直接退出程序 a10: ;*输入Sentence并判断 LEA DX,change MOV ah,09 INT 2

13、1h ;输出回程,换行 LEA DX,mess2 MOV ah,09 INT 21h ;输出Enter Sentence: LEA DX,stoknin2 MOV ah,0ah INT 21h ;用21号中段的0ah号功能获取句子 MOV AL,act1 CBW MOV CX,AX ;保存关键字长度到cx PUSH CX ;cx入栈 MOV AL,act2 cmp AL,0 je a50 ;保存句子长度到al,若句子为空则跳转显示not match SUB AL,act1 js a50 ;若句子长度小于关键字长度,则跳转显示not match INC AL CBW LEA BX,stokn2

14、;将句子的首地址放进BX MOV DI,0 MOV SI,0 a20: ;*比较,内循环 MOV AH,BX+DI CMP AH,stokn1SI ;遇见字符不相等就跳转到a30 jne a30 INC DI INC SI DEC CX ;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完 CMP CX,0 je a40 jmp a20 a30: ;*外循环,BX+1,清空si,di继续内循环比较 INC BX DEC AL cmp AL,0 je a50 MOV DI,0 MOV SI,0 POP CX push CX jmp a20 a40: ;*ma

15、tch,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出 SUB BX,offset stokn2 INC BX LEA DX,change MOV ah,09 INT 21h LEA DX,mess3 MOV ah,09 INT 21h CALL btoh LEA DX,mess5 MOV ah,09 INT 21h jmp a10 ;*二进制转换十六进制 btoh PROC NEAR MOV CH,4 rotate: MOV CL,4 ROL BX,CL MOV AL,BL and AL,0fh add AL,30h cmp al,3ah jl print

16、it add al,7h printit: MOV dl,al MOV ah,2 int 21h dec ch jnz rotate ret btoh endp a50: ;*显示not match LEA DX,change MOV ah,09 INT 21h LEA DX,mess4 MOV ah,09 INT 21h jmp a10 exit: ret main endp CODE ENDS END 四、实验结果 五、实验心得 与第一次实验相比这次用到了数据段,应该注意数据段的定义和使用。此外应该注意单个字符时的“边缘”情况,因为这时指针的移动和关键字的长度是一致的,但是这并不意味着,两

17、个字符串匹配。 实验四 求Fibonacci递归数 一、实验目的: 掌握子程序的设计方法,熟悉递归程序的设计。 二、实验要求: 掌握递归程序的调用、返回及入口、出口的传递方法。 三、实验内容 程序接受由用户键入的数N,根据给定的N值,计算Fibonacci数。 Fibonacci数的公式如下: Fib(1)=1;当n=1 Fib(2)=1;当n=2 Fib(n)=Fib(n-1)+Fib(n-2) 实验代码如下: DATAS SEGMENT ;此处输入数据段代码 RESULT DB 1D,24 DUP(0) X DB 1D,24 DUP(0) MESS1 DB 0DH,0AH,Please i

18、nput a data :,$ MESS2 DB 0DH,0AH,The result is:,$ MESS3 DB 0DH,0AH,Input Q/q to quit.,$ MESS4 DB 0DH,0AH,= ,$ FLAG DW 0DH MESSERROR DB 0DH,0AH,Input error,please re-enter.,$ QUIT DB 0DH,0AH,You have typed Q/q to exit.,$ DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 DW 128 DUP(?) STACKS ENDS CODES SEGMENT ASS

19、UME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS START: MOV AX,DATAS MOV DS,AX MOV ES,AX MOV AX,STACKS MOV SS,AX ;此处输入代码段代码 REINPUT: PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV AH,09 LEA DX,MESS4 INT 21H LEA DX,MESS3 INT 21H LEA DX,MESS1 INT 21H MOV BX,0 INPUT: MOV AH,01 INT 21H CMP AL,q; JZ END_ CM

20、P AL,Q; JZ END_ CMP AL,0DH; JZ CONT CMP AL,0; JB ERROR; CMP AL,: JNB ERROR SUB AL,30H CBW XCHG AX,BX MOV CX,10D MUL CX XCHG AX,BX ADD BX,AX JMP INPUT ERROR:; MOV AH,09 LEA DX,MESSERROR INT 21H JMP REINPUT END_: MOV AH,09 LEA DX,QUIT INT 21H INT 21H RET CONT:MOV CX,BX; CMP CX,2 JLE PRINT; SUB CX,2; N

21、EXT:MOV DI,CX MOV CX,25 MOV SI,0 ADDE:MOV DL,XSI MOV DH,RESULTSI ADD DL,DH; MOV RESULTSI,DL MOV XSI,DH; CMP DL,10D JAE GREAT; INC SI JMP GOON GREAT:SUB RESULTSI,10D; INC SI ADD XSI,1; GOON:LOOP ADDE MOV CX,DI LOOP NEXT PRINT:LEA DX,MESS2 MOV AH,09 INT 21H MOV CX,25 MOV SI,24 DISPLAY1: CMP FLAG,0; JN

22、Z N2 CMP RESULTSI,0 JZ N3 ADD FLAG,1 N2:MOV DL,RESULTSI; ADD DL,30H MOV AH,02H INT 21H N3:DEC SI LOOP DISPLAY1 MOV FLAG,0 MOV RESULT0,1D MOV SI,1 MOV CX,24 INITIAL:MOV RESULTSI,0 MOV XSI,0 ADD SI,1 LOOP INITIAL MOV SI,0 POP DI; POP SI POP DX POP CX POP BX POP AX JMP REINPUT; MOV AH,4CH INT 21H CODES

23、 ENDS END START 四、实验结果 五、实验心得 在程序的制作过程中,遇到了很多意想不到的困难,自己一个人解决起来有很大的困难,于是也少不了同学的帮助,深刻体会到开发程序不只是一两个人就能很好地完成的,要大家互相帮助,共同探讨问题,才能更好的解决困难。 实验五 分类统计字符个数 一、实验目的 掌握分支程序设计的原理与方法,重点掌握各种程序中形成和判断条件而产生的程序段的设计方法和技巧。 二、实验要求 掌握分支程序的调用及基本子程序的编写,判断程序运行的顺序。 三、实验内容 程序接受用户输入一行字符,并按照字符串中字符所属的类型分类,将结果输出(例如:aaabb1234&中,字母5,数

24、字4,其他字符1) 实验代码如下: DATAS SEGMENT STRING1 DB Input Your String: $;输入提示信息 STRING2 DB Digit: $ ;各类字符提示信息 STRING3 DB UpLetter: $ STRING4 DB LowLetter: $ STRING5 DB Others: $ DIGIT DB 0 ;数字 ALPHAU DB 0 ;大写字母 ALPHAL DB 0 ;小写字母 OTHERS DB 0 ;其他 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,

25、DATAS MOV DS,AX LEA DX,STRING1 ;显示输入提示信息 MOV AH,9 INT 21H MOV CX,100 ;设置循环次数主够大 L1:MOV AH,1 ;中断调用,单字符输入 INT 21H CMP AL,0DH ;若输入回车符则结束 JZ OVER2 CMP AL,30H JB OTHER ;若 CMP AL,39H ;若39H(9),跳转进一步比较 JA HIGHER1 JMP DIGITAL ;DIGIT+ HIGHER1:CMP AL,41H ;if JB OTHER CMP AL,5AH ;if5AH(Z),跳转继续比较 JA HIGHER2 JMP

26、UALPHA ;ALPHAU+ HIGHER2: CMP AL,61H ;if JB OTHER CMP AL,7AH ;if7AH(z),OTHERS+ JA OTHER JMP LALPHA ;ALPHAL+ JMP OVER ;比较结束 OTHER:INC OTHERS ;OTHERS+ JMP OVER DIGITAL:INC DIGIT ;DIGIT+ JMP OVER LALPHA:INC ALPHAL ;ALPHAL+ JMP OVER UALPHA:INC ALPHAU ;ALPHAU+ JMP OVER OVER:NOP LOOP L1 ;循环,输入下一字符 OVER2:CA

27、LL ENDLINE ;回车换行 LEA DX,STRING2 ;输出提示信息 MOV AH,9 INT 21H XOR AX,AX MOV AL,DIGIT ;将统计的数字送AX,为输出做准备 CALL DISPLAY ;调用输出两位数字的子程序 CALL ENDLINE ;下同 LEA DX,STRING3 MOV AH,9 INT 21H XOR AX,AX MOV AL,ALPHAU CALL DISPLAY CALL ENDLINE LEA DX,STRING4 MOV AH,9 INT 21H XOR AX,AX MOV AL,ALPHAL CALL DISPLAY CALL ENDLINE LEA DX,STRING5 MOV AH,9 INT 21H XOR AX,AX MOV AL,OTHERS CALL DISPLAY MOV AH,4CH INT 21H ENDLINE PROC NEAR ;控制输出格式,输出回车换行子程序 MOV AH,2 MOV DL,0AH INT 21H MOV AH,2 MOV DL,0DH INT 21H RET ENDLINE ENDP DISPLAY PROC NEAR ;输出两位数字的子程序 MOV BL,10 ;10送BL DIV BL ;AX/BL,AL=商,AH=余数 PUS

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1