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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

大学课程汇编语言的实验报告Word文件下载.docx

1、$data endsstack segment para stack stack db 50 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,data mov ds,ax mov dx,offset message mov ah,9 int 21hagain: mov ah,1 cmp al,1bh je exit cmp al,61h jc nd cmp al,7ah ja nd and al,11011111bnd: mov dl,al mov ah,2 jmp againexit: mov

2、ah,4chcode endsend start实验步骤:1 用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为ASM。2 用MASM对源文件进行汇编,产生OBJ文件和LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3 用TYPE命令显示1产生的LST文件。4 用LINK将OBJ文件连接成可执行的EXE文件。5 在DOS状态下运行LINK产生的EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。六、 思考题1、 若在源程序中把INT 21H的H

3、省去,会产生什么现象?代码编译连接均为正常,但是运行时无法输入与输出,也无法退出。2、 把 INT 21H 4CH号功能改为 INT 20H,行不行?更改后,编译链接均正常,输入输出也正常,但是按下ESC退出时会出现错误,错误如下:七、 参考资料IBM-PC汇编语言程序设计汇编语言实验指导书-(2)字符串处理实验 2011.11.20/21 实验成绩: _ 一. 实验目的1熟悉串操作指令的功能与应用;2掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。二实验内容1字符串统计。自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。2

4、在给定的字符串中,删除重复的字符,其余的字符向前递补。三. 实验要求1认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。2按正常的方法将删除字符程序编成子程序,规定子程序的入口和出口参数。四实验环境MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境五实验步骤 1. 用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。程序每次执行,都能得到不同的结果。;COUNTDC.ASMDATA SEGMENTSTRN DB 80 DUP(?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: M

5、OV AX, DATA MOV DS, AX LEA DI, STRN MOV CL, 0AGAIN: MOV AH,1 INT 21H CMP AL, 0DH JZ DONE MOV DI, AL INC DI INC CL JMP AGAINDONE: LEA SI, STRN MOV CH, 0 MOV BL, 0 CLDCYCLE: LODSBCMP AL, 61H MP AL,7AHCJA NEXT INC BLNEXT: LOOP CYCLE MOV AL, BL MOV AH,0 MOV CL, 10 DIV CL XCHG AH, AL PUSH AX MOV DX,0DH M

6、OV AH,2 MOV DX,0AH POP AX MOV DL, AH OR DL, 30H MOV AH, 2PUSH AXINT 21HPOP AXMOV DL, AL1 OR DL, 30H1 INT 21HOR DL, 30HMOV AH,2MOV AH, 4CHCODE ENDSEND START编译源程序:如下,发现地29行有错误。用EDIT命令找到错误地方,并进行修改,如下图所示:修改后保存程序,重新编译:重新编译后程序没有错误,用反汇编查看指令代码:如下图所示:运行程序,验证程序设计结果的正确性。从键盘上输入字符串“ADKJjkdjfljdeowekdjg”,共二十个字符,其

7、中小写字母十六个,显示结果如下:由运行结果可知,程序运行正确,实现了设计要求。 实验2课参考教材第五章练习10的解法,但要编写一个在同一个字符串中删除字符,并将其余字符向前递补。删除字符串中重复字符的源程序清单:REPEAT: PUSH SI PUSH CX PUSH CX;CX为内循环计数 POP DX;DX为外循环计数 DEC CXMOV AL, SI CMP AL,0 JE NEXT1;若为空字符,则跳过COMP: DEC SI CMP AL,SI MOV BYTE PTRSI,0GOON: LOOP COMP ;查出与该字符重复的所有字符,并用0NEXT1: POP DX POP SI

8、 DEC DX MOV CX,DX JNZ REPEAT;对所有重复字符都进行查找 LEA SI,STRN;删除重复字符 MOV CL,LEN MOV CH,0 MOV AL,SI CMP AL,0;是重复字符吗? JNZ NEXT;不是,查找下一个字符 DEC CX;递补子串长度送CX JZ ALLDONE CALL DELE;删除该空字符并递补 DEC SI INC SI LOOP CYCLEALLDONE:MOV DL,0AH MOV DL,0DH LEA DX,STRN MOV AH,9 MOV AH,4CH INT 21HDELE PROC PUSH SI PUSH CX CLD M

9、OV DI,SI;空字符处为目的首址 INC SI;下一个地址为源串首址 REP MOVSB POP CX POP SI RETDELE ENDPDELE ENDPCODE ENDS END START 编译源程序,检查程序的正确性,如下图所示:源程序在27行有错误,有提示的消息可知,此处需要用到变址或基址寄存器,用EDIT命令找到错误的地方,并改正:修改程序保存再编译以检查是否还有错误:有上图编译可知,程序修改正确,接下来连接成目标程序:生成的目标程序名为DELD.EXE用反汇编命令查看程序代码:运行程序,检验程序设计的正确性:执行程序,输入字符串”DKJKLDKEIOWEJDLJAHNVL

10、”,根据编写要求,显示的结果为“KIOWEDJAHNVL“,既删除字符串中重复的字符。如上图所示。 -(3)子程序实验 2011.12.8/15 实验成绩: 1. 掌握主程序与子程序之间的调用关系及调用方法;2. 掌握子程序调用过程中近程调用与远程调用的区别;3. 掌握通过堆栈转送参数的方法。1. 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。2. 编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符”b”的个数.子程序的参数是字符串的首地

11、址TABLE,字符串长度N及字符”b”.子程序返回字符”b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。1. 第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。2. 第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用

12、后,堆栈中保留了返回地址的段地址及段内偏移量。3. 第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。4. 预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图; 熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。1. 编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2. 用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参

13、数和子程序取出的参数是返回参数的详细过程。3. 检查程序执行的结果是否正确。实验内容1流程图: 主程序 子程序HEXASC子程序DISP实验内容1结果:实验内容2流程图: 主程序 子程序实验内容2结果:实验内容1代码:DATA SEGMENTBUF DB 0ABH,0CDH,0DEH,01H,02H,03HDB 3AH,4BH,5CH,6FH MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CX,0AHLOP: MOV AL,BX CALL HEXASC INC BX LOOP LOP MOV AH,4CHHEXASC PROC NEAR MOV DL,AL MOV

14、CL,4 SHR DL,CL CALL DISP AND DL,0FH POP CX RETHEXASC ENDPDISP PROC NEAR CMP DL,9 JBE NEXT ADD DL,7 ADD DL,30HDISP ENDP END START实验内容2代码:CHAR DB bBUF DB 50H,?,50H DUP(?MCODE SEGMENTMCODE,DS: LEA DX,BUF MOV AH,10 MOV DL,0AH MOV AH,2 LEA SI,BUF MOV CL,SI+1 MOV CH,0 INC SI MOV AL, CHAR MOV AH,0 PUSH SI

15、PUSH AXCALL FAR PTR CHECK POP AX MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE J1 ADD DL,7J1: ADD DL,30H AND DL,0FH JBE J2J2: INT 21H MCODE ENDSSCODE SEGMENTSCODECHECK PROC FAR PUSH BP MOV BP,SP MOV SI,BP+10 MOV CX,BP+8 MOV AX,BP+6 XOR AH,AH JNE NEXT1 INC AH INC SI LOOP AGAIN MOV AL,AH MOV BP+10,AX POP

16、BP RET 4CHECK ENDPSCODE ENDS END START分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。答:在近程调用中CS值不变,而在远程调用中CS值发生改变;近程调用中SP+2,远程调用中SP+4。-(4)中断程序设计实验 2011.12.11/16 实验成绩:一、实验目的:1.加深对中断程序的理解,掌握中断程序结构2.掌握中断程序的设计,调试方法二、实验内容:编制程序:程序开始时要有输入数字的提示,通过键盘输入一个十进制数(0-65535),用中断程序调用来读取键盘输入的字符、显示该字符。如果输入09以外的字符不显示该字符,并且继续输入的

17、09紧跟在前面的字符后面,在屏幕上面要以十六进制形式显示;当用户按下回车键时可以再次输入一个十进制数,当用户按下空格键时程序结束。三、实验环境四、 实验步骤1.编写编辑、汇编源程序,生成相应的可执行文件(.EXE),得源程序如下:COUNT DW 1MESS DB Haha!, 0DH,0AH,CODE, DS:DATA, ES: DATA JMP GO DW 100 DUP(?OLD_IP DW ?OLD_CS DW ?GO: MOV AX,CS MOV DS,AX MOV SS,AX MOV SP,OFFSET OLD_IP MOV AL,9H ;取中断向量 MOV AH,35H MOV

18、OLD_CS,ES ;存原中断向量段址 MOV OLD_IP,BX ;存原中断向量偏移量 PUSH DS MOV DX, OFFSET MYINT9 ;新偏移量送DX MOV AX, SEG MYINT9 MOV DS, AX ;新段址送DS MOV AL, 9H MOV AH, 25H INT 21H ;写入新的中断向量 POP DS JMP NEXT MYINT9 PROC FAR PUSH DX IN AL,60H TEST AL,80H JNZ EXIT ;以下输出输入字符的键盘扫描码 SHR AL,1 CMP AL,9 JBE ADD30H ADD AL,7ADD30H: ADD A

19、L,30H AND AL,0FH JBE ADD_30HADD_30H:输出回车换行 MOV DL,0AH MOV DL,0DHEXIT: MOV AL,20H OUT 20H,AL IRETMYINT9 ENDP文件命名为:INT9H.EXE此源程序段没有采用调用原来键盘中断程序,若要调用则在结尾处改为: JMP DWORD PTR OLD_IP 2.运行INT9H.EXE,得结果如下:没有采用调用原来键盘中断程序:在键盘上依次输入:q、w、e、r、t、y、u、i、o、p、a、s、d、f2 调用原键盘中断程序:在键盘重复依次输入得结果如下:所得结果是相同的。-(5)C+调用汇编子程序 电10

20、4 2011.12.17/18 实验成绩:一实验目的1掌握主程序与子程序之间的调用关系及调用方法;2掌握子程序调用过程中近程调用与远程调用的区别;3掌握通过堆栈转送参数的方法。1将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。2编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符b的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。三实验环境四实验步骤1编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。3检查程序执行的结果是否正确。五实验结果 实验程序:1. DATA SEGMENTBUF DB 0ABH,0CDH,0DEH,01H,02H,03HDB 3AH,4BH,5CH,6FH ASSUME CS:CODE,DS:START: MOV AX,DATA MOV DS,AX MOV CX,10 LEA BX,BUFAGAIN: MOV AL,BX LOOP AGAIN MOV AH,4CHMOV DL,ALPUSH CXMOV CL,4SHR DL,CLP

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

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