总总汇编语言程序设计实验的报告材料材料

上传人:痛*** 文档编号:84001948 上传时间:2022-05-02 格式:DOC 页数:19 大小:125.50KB
收藏 版权申诉 举报 下载
总总汇编语言程序设计实验的报告材料材料_第1页
第1页 / 共19页
总总汇编语言程序设计实验的报告材料材料_第2页
第2页 / 共19页
总总汇编语言程序设计实验的报告材料材料_第3页
第3页 / 共19页
资源描述:

《总总汇编语言程序设计实验的报告材料材料》由会员分享,可在线阅读,更多相关《总总汇编语言程序设计实验的报告材料材料(19页珍藏版)》请在装配图网上搜索。

1、word实 验 报 告实验名称 汇编语言程序设计 |专业班级:信息安全 学 号: 姓 名:实验一 汇编语言上机过程和Debug常用调试命令一 实验目的:学习程序设计的根本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。二 实验题目: 熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在调试过程中,学习与掌握debug程序的各种操作命令。三 问题描述: 试编写一程序:比拟两个字符串string1和string2所含的字符是否一样,假如一样如此显示match; 否如此,显示no match。四 方法说明:a) 使用ws、tc或EDIT编辑程序来建立源

2、文件,然后存盘,使系统返回DOS。b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错如此需重新调用编辑程序修改错误,直至汇编通过为止。c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。e) 使用debug程序调试程序的方法。五 实验步骤:1datarea segment string1 dbmove the cursor backward.string2 dbmove the cursor backward.mess1 db Match.,13,10,$mess2 db No match!.,13,10,$datarea en

3、dsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short disp match: lea dx, mess1disp: mov ah,09 int 21h ret main endpprognam ends end start2 对源文

4、件汇编产生目标文件objD:masm 文件名。Asm3用连接程序link产生执行文件exeD:link文件名。Obj4执行程序D: 文件名5. 使用debug程序调试程序的方法。_1. 用G命令运行程序2. 用U命令显示程序3. 学会设置断点。4. 学会查看数据段的内容情况D5. 用E命令修改数据区的字符串。6. 用A 命令把数据区的内容恢复原状7. T命令逐条跟踪程序的执行8. 学会使用F命令、R命令、Q命令等等五、 实验总结第一次进展汇编实验,主要是学习程序设计的根本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,只有多上机练习,才能更好的掌握汇编语言程序设计的思想。实验二

5、 循环程序设计1循环结构是控制重复执行某一程序段的根本程序结构. 在汇编语言程序设计中, 循环程序的地位也是极为重要,从本质上来看, 循环程序结构是分支程序结构的一种手特殊形式, 也是使用条件转移指令来控制执行循环的.一.实验目的:学会用循环结构进展程序编程。二.实验题目:设计一个按表格形式显示ASC|码为10H100H的所有字符的程序。三.实验要求: 按15行*16列的表格形式显示ASC|码为10H-100H的所有字符,即以行为主的顺序与ASC|码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASC|为0)隔开。四方法说明:(1) 显示每个字符可使用功能

6、号为02的显示输出功能调用,使用方法如下:mov ah,02hmov dl,0AHint 21h 此题中可把dl 初始化为10H, 然后不断使其加1(用INC指令) 以取得下一个字符的ASC|码。(2) 显示空白符时,用其ASC|码0置入dl 存放器,每行完毕时,用显示回车(ASC|为0dh)和换行符(ASC|为oah)来完毕本行并开始下一行。(3) 由于逐个显示相继的ASC|字符时,需要保存并不断修改dl存放器的内容,而显示空白、回车、换行符时也需要使用dl存放器,为此可使用堆栈来保存相继的ASC|字符。具体用法是:在显示空白或回车,换行符前用指令 push dx 把dl 的内容保存到堆栈中

7、去。在显示空白或回车,换行符后用指令 pop dx 恢复dl存放器的原始内容。五、实验代码stack segmentdb 100 dup (?)stack endscode segmentassume cs:code,ss:stackstart: mov dl,10h mov cl,0fhloopc: mov ah,02h mov al,dl int 21hinc dl push dx mov dl,0h mov ah,02h mov al,dl int 21h pop dx loopnz loopcpush dx mov dl,0dhmov ah,02h mov al,dl int 21hm

8、ov dl,0ahmov ah,02h mov al,dl int 21hpop dxmov cl,0fhcmp dl,0h jne loopcmov ah,4ch int 21h code endsendstart六、 实验结果七、 实验总结 本次试验学会用循环结构进展程序编程,学好循环程序是很重要的,在程序设计中,它的地位是极其重要的。实验三 循环程序设计2一.实验目的:学会用循环程序设计进展程序编程。二.实验题目:设计查找匹配字符串SEARCH的程序。三.问题要求:程序接收用户键入的一个关键字以与一个句子。如果句子中不包含关键字如此显示no match;如果句子中包含关键字如此显示mat

9、ch,且把该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下:enter keyword :abcenter sentence :we are studying abc match at location :11H of the sentence enter sentence: xyz ,ok? no match enter sentence :c四. 方法说明:程序可由三局部组成:(1 ) 输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用0AH。(2) 在句子中查找关键字。1 关键字和一个句子中相应字段的比拟可使用串比拟指令,为此必须定义附加段,但附加段和数据段可以定义

10、为同一段,以便于串指令的使用,这样,相应的存放器内容也有了确定的含义,如下:SI 存放器为关键字的指针DI 存放器为句子中正相比拟的字段的指针CX存放器存放关键字的字母个数(长度)2 整个句子和关键字的比拟过程可以用一个循环结构来完成。循环次数为:(句子长度-关键字长度)+1在计算循环次数时,如遇到句子长度小于关键字长度的情况如此应转向显示“no match,循环中还需要用到BX存放器,它用来保存句子中当前正在比拟字段的首地址。(3) 输出信息:用功能调用09h分“找到或“找不到两种情况分别显示不同的信息。在“找到时,还要求显示出匹配字符串在句子中的位置,在“找到时BX存放器的内容为匹配字符串

11、的首地址,将此值减到句子的首地址,再将差值加1 即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。五、 实验代码sseg segment stack dw 256 dup (?) sseg ends data segment msg1 dbEnter keyword:,24h msg2 dbEnter Sentence:,24h cr db 13,10,24h keyword db 250,?,250 dup (?) Sentence db 250,?,250 dup (?) match dbMatch at location:,24h match1 db of t

12、he sentence,13,10,24h nomatch dbNo match,13,10,24h data ends code segmentassume cs:code,ds:data,ss:sseg disp_hex proc near push ax push cx push dx push ax mov cl,4 ror al,cl and al,0fh add al,30h cmp al,39h jna d1 add al,7 d1: mov dl,al mov ah,2 int 21h pop ax and al,0fh add al,30h cmp al,39h jna d2

13、 add al,7 d2: mov dl,al mov ah,2 int 21h mov dl,hmov ah,2 int 21h pop dx pop cx pop ax ret disp_hex endp begin: mov ax,data mov ds,ax mov es,ax mov dx,offset msg1 mov ah,9 int 21h mov dx,offset keyword mov ah,0ah int 21h cmp keyword + 1,0 je quit mov dx,offset cr mov ah,9 int 21h b1: mov dx,offset m

14、sg2 mov ah,9 int 21h mov dx,offset Sentence mov ah,0ah int 21h mov dx,offset cr mov ah,9 int 21h mov dl,Sentence + 1 cmp dl,0 je quit mov dh,keyword + 1 mov di,offset Sentence + 2 b2: cmp dh,dl ja _nomatch mov si,offset keyword + 2 mov cl,dh mov ch,0 cld push di repe cmpsb pop di je _match inc di de

15、c dl jmp b2 _match: mov ax,di sub ax,offset Sentence + 2 inc ax push ax mov dx,offset match mov ah,9 int 21h pop ax call disp_hex mov dx,offset match1 mov ah,9 int 21h jmp b1 _nomatch: mov dx,offset nomatch mov ah,9 int 21h jmp b1 quit: mov ah,4ch int 21h code endsendbegin六、实验结果七、 实验总结本次试验主要考察了串比拟指令

16、的用法,同时将串指令和REPE联合起来用,使得指令变得简单。实验中还用到了一些数据结构,开始时需要定义空间以与缓冲区。另外程序需要运用有两层循环,内循环由CX记录关键字长度控制循环计数,外循环是由ax记录外循环次数控制外循环计数。通过本次实验,使我更加熟悉了课堂上知识,还培养了我将理论知识运用到实际编程中去的能力。实验四 分支程序设计一.实验目的:学会用分支程序设计进展程序编程。二.实验题目:设计一个程序能分类统计字符个数三.实验要求: 程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符完毕),并按字母、数字与其它字符分类计数,然后将结果存入以letter、digit和othe

17、r为名的存储单元中。四.方法说明:程序可采用0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数,也可采用01H功能调用在接收字符后先分类计数然后再存入缓冲区中。程序需进入debug 运行并查看计数结果。五 实验代码DATAS SEGMENTSTRING1 DBInput Your String: $;输入提示信息STRING2 DBDigit: $;各类字符提示信息STRING3 DBLetter: $STRING5 DBOthers: $DIGIT DB 0 ;数字CHARS DB 0 ;字母OTHERS DB 0 ;其他DATAS ENDSCODES SEGMENTASSUM

18、E CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXLEA DX,STRING1 ;显示输入提示信息MOV AH,9INT 21HMOV CX,100 ;设置循环次数足够大L1:MOV AH,1 ;中断调用,单字符输入INT 21HCMP AL,0DH ;假如输入回车符如此完毕JZ OVER2CMP AL,30H OTHER ;假如39H(9),跳转进一步比拟JA HIGHER1JMP DIGITAL ;DIGIT+HIGHER1: CMP AL,41H ;if5AH(Z),跳转继续比拟 JA HIGHER2 JMP CHAR ;ALPHAU+HIGHE

19、R2: CMP AL,61H ;if7AH(z),OTHERS+ JA OTHER JMP CHAR ;ALPHAL+ JMP OVER ;比拟完毕OTHER: INC OTHERS ;OTHERS+ JMP OVERDIGITAL: INC DIGIT ;DIGIT+ JMP OVERCHAR: INC CHARS ;ALPHAL+JMP OVERJMP OVEROVER:NOPLOOP L1 ;循环,输入下一字符OVER2:CALL ENDLINE ;回车换行LEA DX,STRING2 ;输出提示信息MOV AH,9INT 21HXOR AX,AXMOV AL,DIGIT ;将统计的数字

20、送AX,为输出做准备CALL DISPLAY ;调用输出两位数字的子程序CALL ENDLINE ;下同LEA DX,STRING3MOV AH,9INT 21HXOR AX,AXMOV AL,CHARSCALL DISPLAYCALL ENDLINELEA DX,STRING5MOV AH,9INT 21HXOR AX,AXMOV AL,OTHERSCALL DISPLAYMOV AH,4CHINT 21HENDLINE PROC NEAR ;控制输出格式,输出回车换行子程序MOV AH,2MOV DL,0AHINT 21HMOV AH,2MOV DL,0DHINT 21HRETENDLIN

21、E ENDPDISPLAY PROC NEAR ;输出两位数字的子程序MOV BL,10 ;10送BLDIV BL ;AX/BL,AL=商,AH=余数PUSH AX ;保存AX中的信息MOV DL,ALADD DL,30HMOV AH,2INT 21H ;输出十位数POP AX ;出栈送AXMOV DL,AHADD DL,30HMOV AH,2INT 21H ;输出个位数RETDISPLAY ENDPCODES ENDSENDSTART六 实验总结 本次实验要求我们学会用分支程序设计进展程序编程,其中运用到许多跳转和比拟指令,只要细心一点,理清思路就能很容易的将本程序编写出来。实验五 子程序设

22、计一 实验目的:学会用子程序设计进展程序编程。二 实验题目:设计一个能查找phone的程序。三 实验要求:i. 要求程序建立一个可存放50项的表,每项包括人名(20个字符)与(8个字符)两局部;ii. 程序可接收输入人名与相应的,并把它们参加表中;iii. 凡有新的输入后,程序应按人名对表重新排序;iv. 程序可接收需要查找的人名,并从表中查出其,再在屏幕上以如下格式显示出来。name tel * *四 实验提示:程序采用子程序结构,主程序的主要局部如下:. 显示提示符input name:; . 调用子程序input_name接收人名; . 调用子程序stor_name把人名存入表tel_t

23、ab中;. 显示提示符input a telephone number:;. 调用子程序inphone接收,并把它存入表tel_tab中;. 如输入已完毕如此调用name_sort子程序对表按人名排序;. 显示提示符DO you want a telephone number?(y/n); . 回答N如此退出程序;. 回答Y如此再显示提示符 name?;. 调用子程序input_name接收人名; . 调用子程序name_search在表中查找所要的;. 调用子程序printline按要求格式显示人名与; . 重复查号提示符直至用户不再要求查号为止。五、 实验代码datasegmenttel_

24、tabdb50 dup( 28 dup( ); tel_tab本空间tab_lendw0; 已存联系人数目endaddrdw0; 最后一个联系人的地址+28tnamedb21,?,20 dup( ),?; 某某缓冲区tphonedb9,?,8 dup( ),?; 缓冲区tempdb28 dup(?); 一个联系人的临时空间inamedb13,10,Input name:,13,10,$iphonedb13,10,Input a telephone number:,13,10,$go_ondb13,10,Continue insert? ,13,10,$; 提示是否继续插入联系人snamedb1

25、3,10,Name?,13,10,$name_edb13,10,13,10,The name has been in the table! Please input again!,13,10,$ text2db13,10,Name Tel. ,13,10,$text3db13,10,The name is not in the telephone table!,13,10,$text4db13,10,13,10,Do you want a telephone number? ,13,10,$dataendscodesegment; *; 主程序; -mainprocfarassumecs:co

26、de ,ds:data,es:datastart:pushds; 保存旧数据用于返回subax,axpushaxmovax,data; 数据段、附加段初始化movds,axmoves,axinname:leadx,iname; 提示输入某某movah,09hint21hcallinput_name; 调用读入某某子程序callname_search; 调用查找子程序,cmpbx,-1; 如表中不存在该联系人jestor; 如此跳转到storcallcrlf; 回车换行leadx,name_e; 否如此提示该联系人已在表中,提示重新输入movah,09hint21hjmpinnamestor:c

27、allstor_name; 调用某某转存子程序,把某某移动到表中leadx,iphone; 提示输入 movah,09hint21hcallinphone; 调用读入子程序callname_sort; 排序callcrlfleadx,go_on; 提示是否继续插入movah,09hint21hchoice1:movah,07; 读取用户选择int21hcmpal,yjeinnamecmpal,Yjeinnamecmpal,njeprint_all; 如选择不插入,如此显示所有记录cmpal,Njeprint_alljmpchoice1print_all:callprintall; 显示所有记录

28、want_search:callcrlfleadx,text4; 提示是否查找movah,09int21hcallcrlfchoice2:movah,07; 读取用户选择int21hcmpal,yjesearch; 如果为y或Y如此跳转到查找searchcmpal,Yjesearchcmpal,n; 为n或N如此退出程序jeexit_mcmpal,Njeexit_mjmpchoice2search:leadx,sname; 提示用户输入要查找的某某movah,09int21hcallinput_name; 读入某某callname_search; 查找callcrlfcallcrlfcmpbx

29、,-1; 是否查找到?jenot_find; (bx)=1 如此跳转到未找到not_findleadx,text2; 找到如此输出 Name Tel. movah,09int21hcallprintline; 显示查找到的联系人jmpwant_search; 跳转到提示查找not_find:; 未找到callcrlfleadx,text3;输出 The name is not in the telephone table!movah,09hint21hjmpwant_searchexit_m:retprintallproear;*;显示所有。显示表中的所有某某和,查看排序结果是否正确;-cal

30、lcrlfcallcrlfleadx,text2; 输出Name Tel. movah,09int21hleabx,tel_tab; 表基址rept1:callprintline; 显示联系人addbx,28; 求 下一个联系人首地址cmpbx,endaddr; 是否到达表尾?rept1; 未到达如此继续显示retprintallendp;*;输入某某子程序:读入某某到tname缓冲区,并把不满20位的局部;补上空格方便查找时的比拟;-input_nameproearcallcrlfnoinputn:leadx,tname; 某某缓冲区movah,0ah; 调用dos 0ah读入字符串功能in

31、t21hcmptname1,0; 如果输入为回车jenoinputn; 继续等待输入xorbx,bxmovbl,tname1movcx,20subcx,bxset_blank:movtnamebx+2,20h; 把不满20位的局部补空格incbxloopset_blankcallcrlfretinput_nameendp;*;stor_name,该子程序把tname缓冲区的某某转存入表中;-stor_nameproearxorcx,cxmovcl,tname1;字符个数leasi,tname2movdi,endaddrcldrepmovsbinctab_len;联系人人数增1addendadd

32、r,28;最后一个联系人地址增28retstor_nameendp;*;获取子程序:读入用户输入的到tphone缓冲区,然后;转存入表对应位置;-inphoneproearnoinputp:callcrlfleadx,tphonemovah,0ahint21h;调用dos 0a号功能输入字符串cmptphone1,0;判断输入是否为回车jenoinputp;是,如此继续等待输入xorcx,cxmovcl,tphone1leasi,tphone2movdi,endaddrsubdi,8;待插入位置cldrepmovsb;移动retinphoneendp;*;排序子程序用直接插入排序,对表进展按人

33、名从小到大排序;-name_sortproearcmptab_len,1;记录数1,不用排序jeexitnleadi,tel_tab;第一个记录地址movsi,endaddrsubsi,28;最后一个记录-待排序记录的地址next1:movcx,20movax,si;暂存两个地址movdx,dicldrepecmpsb;查找插入位置insertmovsi,axmovdi,dxadddi,28;比拟下一个cmpdi,si;是否比拟完next1;没有如此继续比拟jmpexitn;否如此排序完成insert:movcx,28movsi,axleadi,temprepmovsb;待排序数据放到缓冲区m

34、ovdi,axnext2:movcx,28movsi,disubsi,28repmovsb;记录后移subdi,56cmpdi,dxjanext2movcx,28movdi,dxleasi,temprepmovsb;插入到待插位置exitn:retname_sortendp;*;某某查找子程序。入口参数为tname缓冲区的人名,用存放器bx返回结果,找到如此返回该;某某对应记录的地址,未找到如此返回(bx)=-1;-name_searchproearcmptab_len,0; 记录为0,无法查找jeexit_nofindleasi,tname2; 待查某某地址movax,si; 暂存silea

35、bx,tel_tab; 从第一个记录开始查找rsearch:movcx,20movdi,bxrepecmpsbjzexit_nmovsi,axaddbx,28; 查找下一个cmpbx,endaddrrsearchexit_nofind:movbx,-1;未找到如此bx=-1exit_n:retname_searchendp;*;显示某某和子程序 。待显示的记录的地址保存在bx存放器。;-printlineproearpushax;保存axcallcrlfxorsi,simovcx,28;共28个字符movah,02h;调用dos 2 号显示字符功能nextc:movdl,bxsi;待显示字符i

36、nt21hincsi;输出下一个字符loopnextccallcrlfpopaxretprintlineendp;* *;回车换行子程序;-crlfproearpushaxpushdxmovah,02hmovdl,0dh; 回车int21hmovdl,0ah; 换行int21hpopdxpopaxretcrlfendp;-mainendp; 主程序完毕codeends; 代码段完毕endstart; 程序完毕六、 实验总结 本次实验前应先画好程序框图和模块调用图,并在编码中不断修改完善,对把握程序的整体结构很有帮助。把模块设计成子程序在主程序调用,分解了整个程序功能,降低了设计的难度,同时方便调试和修改。总的来说,此次实验有点难度,但是平时多上机练习,完成此次实验并不是难事。19 / 19

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!