总总汇编语言程序设计实验的报告材料材料_第1页
总总汇编语言程序设计实验的报告材料材料_第2页
总总汇编语言程序设计实验的报告材料材料_第3页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

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

2、返回DOS。b)用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错课,直至汇编通过为止。c)用连接程序link产生执行文件EXE.d)执行程序,可直接从DOS执行程序。e)使用debug程序调试程序的方法。五. 实验步骤:1.调用字处理程序EDIT建立以sample, asm文件datarea segmentstring1 db"move the cursor backward'string2 db"move the cursor backward,messldb "Match./ ,13,10,mess

3、2db “No match!.,13,10, 7 $,datareaendsprognamsegmentmain proc farassume cs:prognam ds:datarea, es:datareastart:push dssubax, axpushaxmov ax,datarea mov ds, ax mov es, ax lea si,string1 lea di,string2 cldmov ex, 25 repz cmpsbjz matchlea dxt mess2jmp short dispmatch:lea dx, messldisp:mov ah, 09int 21h

4、rotma inendpprognam endsend start2. 对源文件汇编产生目标文件obj D:masm 文件名。Asm3. 用连按程序I ink产生执行文件exe D:link 文件名。Obj4. 执行程序D:文件名5. 使用debug程序调试程序的方法。 d>debug文件名exe1. 用G命令运行程序2. 用U命令显示程序3. 学会设覺斷点。4. 学会查看数据段的内容情况D5. 用E命令修改数据区的字符串。6. 用A命令把数据区的内容恢复原状7. T命令逐条跟踪程序的执行8. 芋会使用F命令.R命令.Q命令等等五、实验总结第一次进行汇編实验,主要是学习程序设计的基本方法

5、和技能,熟练掌握用汇编语言 设计、编写、调试和运行程序的方法,只有多上机练习,才能更好的掌握汇编语言程序设 计的思想。实验二循环程序设计1循环结构是控制重复执行某一程序段的基本程序结构.在汇编语言程序 设计中,循环程序的地位也是极为重要,从本质上来看,循环程序结构是分支 程序结构的一种手特殊形式,也是使用条件转移指令来控制执行循环的.一. 实验目的:学会用循环结构进行程序编程。二. 实验题目:设计一个按表格形式显示ASC| |码为10H100H的所有字符的程序。三. 实验要求:按15行*16列的表格形式显示ASC|码为10H100H的所有字符, 即以行为主的顺序及ASC| |码递增的次序依次显

6、示对应的字符。每16个字 符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。四. 方法说明:(1) 显示每个字符可使用功能号为02的显示输出功能调用,使用方法 如下:mov ah,02hmov dl,OAH int 21h本题中可把dl初始化为10H,然后不断使其加1(用INC指令)以 取得下一个字符的ASC|码。(2) 显示空白符时,用其ASC|码0置入dl寄存器,每行结束时,用 显示回车(ASC| |为Odh)和换行符(ASC| |为oah)来结東本行并开始下一 行。(3) 由于逐个显示相继的ASC|字符时,需要保存并不断修改dl寄存 器的内容,而显示空白、回车、换行符时也

7、需要使用dl奇存器,为此 可使用堆栈来保存相继的ASC|字符。具体用法是:在显示空白或回车, 换行符前用指令push dx 把dl的内容保存到堆栈中去。在显示空白或回车, 换行符后用指令pop dx 恢复dl番存器的原始内容。五、实验代码stacksegmentdb100 dup (?)stackendscodesegmentassume cs:code,ss:stackstart:movdI,10hmovcI,Ofhloopc:movah, 02hmovi ntal, dl21hi nc push movdldxdl.Ohmovah,02hmovi ntal, dl21hpopdxIoopn

8、zI oopcpush movdxdl,Odhmovah,02hmovi ntal, dl21hmovdI,Oahmovah,02hmovi ntal, dl21hpopdxmovcI,Ofhcmp jnedl.OhI oopcmovi nt codeah,4ch21hendsendstart六、实验结果:;<I J KX V Z g h iV w X a a c 40 0 u u n MJL TB-Z- TMn ! X E2u吕 6 6H:;:L 丄-onl8G Vet Aa £ IT « J7Fud s*e ffi-a - Bro rGEf qc0AS=3&

9、; 2RPnilo-mIin-0?-Nl-6/ >Mk z:e0-6 IF rs<-Vo-TL nu>- 一一 L J y-e-ua-L r +-七. 实验总结本次试验学会用循环结构进行程序编程,学好循环程序是很重要的,在程序 设计中,它的地位是极其重要的。实验三循环程序设计2一. 实验目的:学会用循环程序设计进行程序编程。二. 实验题目:设计查找匹配字符串SEARCH的程序。三. 问题要求:程序接收用户键入的一个关键字以及一个句子。如果句子中不包含 关键字则显示'nomatch ;如果句子中包含关键字则显示'match',且 把该字在句子中的位置用十

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

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

12、址,将此值减到句子的首地址, 再将差值加1即是所要的匹配字符串在句子中的位置,可将位置转换为十 六进制数从屏幕上显示出来。dw256 dupssegendsdatasegmentmsg1db * Entermsg2db'Entercr db 13,10, 24hkeyword db 250,Sentence db 250match db * Matchmatchi db *onomatch db'Nodataendscodesegmentassume cs:code,«disp_.hex proc npushaxpushexpushdxpushaxmovcl,4ror

13、al, clanda 1,Ofhadda 1,30hcmpa 1,39hjnad1addal,7a i:movdl, almovah, 2i nt21hpopaxandal,Ofhadda 1,30hcmpa 1,39hjnad2addal,7d2:movdl, almovah, 2i nt21hmovdl, hmovah, 2int21hpopdxpopexpopaxretdisp_hex endp?,250,?, 250atf the五.实验代码sseg segmentstack(?)keyword:', 24h Sentence:*, 24hdup (?)dup (?)I oca

14、tion:', 24h sentencer, 13,10,24hmatch',13,10,24h,ss:ssegbegin:movax, datamovds, axmoves, axmovdx,offsetmsg1movah, 9int21hmovdx,offsetkeywordmovah, Oahi nt21hcmpkeyword 亠 1,0jequitmovdx,offsetcrmovah, 9i ntb1:21hmovdx,offsetmsg2movah, 9i nt21hmovdx,offsetSentencemovah, Oahint21hmovdx,offsetcr

15、movah, 9int21hmovdl,Sentence+ 1cmpdl,0jequitmovdh, keyword+ 1movdi,offsetSentence+2b2:cmp dh, d Ija_nomatchmovsi, offsetkeyword “2movcl, dhmovch, 0oldpushdirepecmpsbpopdije_matchi ncdidecdljmpb2_match:movax, disubax,offsetSentence + 2i ncaxpushaxmovdx,offsetmatchmovah, 9i nt21hpopaxca I Idi sp_hexmo

16、vdx,offsetmovah, 9i nt21hjmpb1_nomatch:movdx,offsetmovah, 9i nt21hjmpb1quit:movah, 4chi nt21hcodeendsmatch1nomatchendbeg in六.实验结果® D:JMSOFT1MaMmbinDWTemp.exeEnterkeyword:woEnte厂Sentence:ni wo taMatch 日t location:04h of the sentenceEnterSentence:haNo matchEnter Sentence:hei na j jNo match匚n + Qc

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

18、它字符分类计数,然后将结果存入以 letter> digit和other为名的存储单元中。四. 方法说明:程序可釆用0AH功能调用把键入字符直接送到缓冲区中,然后再逐个 取出分类计数,也可釆用01H功能调用在接收字符后先分类计数然后再存 入缓冲区中。程序需进入debug运行并查看计数结果。五. 实验代码OATAS SEGMENTSTRING1 DB ' Input Your Str ing: S'诒入提示信息STRING2 DB Digit: $;各矣字转提示信息STRING3 DB Tetter: $*STRING5 DB * Others: $'DIGIT D

19、B 0 ;數字CHARS DB 0 ;字母OTHERS DB 0 :其他DATAS ENDSCODES SEGMENTASSUME CS:CODES. DS:DATASSTART:MOV AX. DATASMOV DS. AXLEA DX.STRING1 :显示输入提示仕息MOV AH. 9I NT 21HMOV CX. 100 ;设Jt循环次软足够大LI: MOV AH.1 :中斯调用.单字将約入INT 21HCMP AL. OOH ;若输入回牟符刘结束JZ 0VER2CMP AL. 30HJB OTHER :若<30H(0), OTHERS*CMP AL. 39H ;若>39H

20、(9) 跳梓进一步比校JA HIGHER1JMP DIGITAL :DIGITSHIGHER1: CW> AL.41H : if<41H(A). OTHERS JB OTHERCMP AL.5AH : if>5AH(Z),%转绝续比校JA HIGHER2JMP CHAR ;ALPHAU卄HIGHER2: CMP AL.61H : if<61H(a).0THERS JB OTHERCMP AL.7AH ;if>7AH (z). OTHERS+JA OTHERJMP CHAR ;ALPHAL卄JMP OVER :比校甘束OTHER: INC OTHERS ;OTHER

21、S+JMP OVERDIGITAL: INC DIGIT :DIGITSJMP OVERCHAR: INC CHARS ;ALPHAL+JMP OVERJMP OVEROVER:NOPLOOP L1 ;馆坏诒入下一字H0VER2:CALL ENOL INE ;回车换ifLEA DX.STRING2 :統出提示信息MOV AH. 9INT 21HXOR AX. AXMOV AL.DIGIT :将统计的&字送AX.CALL DISPLAY :调用約出L 的予極序CALL ENDLINE :下同LEA DX.STRING3MOV AH. 9INT 21HXOR AX. AXMOV AL.CH

22、ARSCALL DISPLAYCALL ENDLINELEA DX.STRING5MOV AH. 9INT 21HXOR AX. AXMOV AL. OTHERSCALL DISPLAYMOV AH.4CHINT 21HENDLINE PROC NEAR :控制約出菇式.输出回车提行子哲序MOV AH. 2MOV DL. OAHINT 21HMOV AH. 2MOV DL.OOHINT 21HRETENDLINE ENDPDISPLAY PROC NEAR ; ; H:两位软字的:MOV BL. 10 :10送BLDIV BL :AX/BL.AL二商,AH二余敦PUSH AX ;保存从中的信息

23、MOV DL. ALADD DL. 30HMOV AH. 2INT 21H ;输出十位软POP AX ;出找送AXMOV DL.AHADD DL. 30HMOV AH. 2INT 21H ;输出个位软RETDISPLAY ENDPCODES ENOSEND START六. 实验总结本次实验要求我们学会用分支程序设计进行程序编程,其中运用到许多跳转 和比较指令,只要细心一点,理清思路就能很容易的将本程序编写出来。实验五子程序设计一. 实验目的:学会用子程序设计进行程序编程。二. 实验题目:设计一个能查找电话号码phone的程序。三. 实验要求:i.要求程序建立一个可存放50项的电话号码表,每项包

24、括人名(20个字符)及电话号码(8个字符)两部分;i i.程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;i i i.凡有新的输入后,程序应按人名对电话号码表重新排序;IV.程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。name teI四. 实验提示:程序釆用子程序结构,主程序的主要部分如下:显示提示符'input name:f ;.调用子程序i nput_name接收人名;调用子程序stor_name把人名存入电话号码表tel_tab中; 显示提示符 'input a te I ephone n umber:f

25、;.调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab 中;.如綸入已结束则调用name_sort子程序对电话号码表按人名排序;.显示提示符'DO you want a telephone number?(y/n)f ;回答N则退出程序;.回答Y则再显示提示符'name?'.调用子程序i nput_name接收人名;.调用子程序name_search在电话号码表中查找所要的电话号码;.调用子程序Printline按要求格式显示人名及电话号码;重复查号提示符直至用户不再要求查号为止。五、实验代码datasegmenttel_tabdb50 dup(

26、28 dupC *):tcl_tab 电话空tab_lcndw0;已存联系人敦目endaddrdw0;最总一个联系人的地址+28t namedb2t?.2O dupC ).?;4±名媒冲区tphonedb9.?8 dupC ').?;号码煤冲区tenpdb28 dup(?);一个联系人的临时空间i namedb13,10. ' 1 nput name: 13,10, 'S*i phonedb13.10.* Input a telephonenurber:', 13, 10, ' $*go_ondb13,10/Continue insert? &

27、lt;Y/N>13J0. S*;提示是否维续插入联系人snamcdb13.10/Namc?13. 10.namc_cdb0, *Thc name hasbeen in the table! Please input again! 13.10.tcxt2db13.10. 'NameTei.jajo/s*text3db13.10. 'The name is not inthe telephone table!13.10.*$'tcxt4db0, *Do you wanta teIcphonc number? <Y/N>

28、; 13, 10. S'dataendscodesegment:主枉序mainprocfarassumecs:codc ds:datacs:datastart:pushds;保存旧數据用于返回subax. axpushaxmovax. data;软据緩、附加鮫初诒化movds. axmovcs. axi nnamc:leadx. inamc;提示输入昱名movah. 09hint21hcal 1i nput_namc;调用读入姓名子程序cal 1namc_scarch;销用查找子程序.enpbx.-1;如友中不存在该联系人jcstor;则跳转到storcal 1er If;回丰换行le

29、adx. namc_c;否则提示该联系人已在長中.提示重新输入movah. 09hint jnp21hi nnamcstor:cal 1stor_namc;诅用姓名转存子程序,把娃名務动到表中leadx. iphonc;堤示输入电话号码movah. 09hint21hcal 1i nphonc;调用读入号码子程序cal 1namc_sort;排序cal 1er Ifleadx. go_on;堤示旻否绘续括入movah. 09hint21hchoiccl:movah. 07;读取用户逸择int21henpal/y*jci nnamcCITpal, 丫jei nnamcenpal, 'rf

30、jcpr int_alI;如逸择不垢入.则显示所有记录CITpal/N*jepr int_alIjnpchoice!print_al1:cal 1pr intal I;显示所冇记录want_scarch:cal 1er Ifleadx.tcxt4;堤示是否查找号码movah. 09int21hcal 1er Ifchoicc2:movah. 07;读取用户逸择int21henpal/y*jcsearch;如果为y或Y则跳转到妄找searchCITpal, 丫jesearchenpal, 'rf;为n或N则逍出程序jccxit_mCITpal/N*jecxit_mjnpchoicc2se

31、arch:leadx. sname;堤示用户输入要查找的姓名movah. 09int21hcal 1input_namc;读入姓名cal 1namc_scarch;盘找cal 1er Ifcal 1er Ifenpbx.-l;是否查找到?jenot_find;(bx)=1则跳转到未找not_f indleadx.tcxt2;找到则输出Namemovah. 09int21hcal 1pr intlinc;显示支找到的联系人j叩want_scarch;跳转到提示查找not_f ind:;未找到cal 1er Ifleadx. tcxt3:牝出'The name is not in the

32、teIcphonc table!'movah. 09hint21hjnpwant_scarchexit:retprintal1procn car*材*神许*卅甘*衬*卅卄*卅*神卄*衬*神林*衬林*卄*卄*卅*神卄*衬*神卄*材*神神 .cal 1er Ifcal 1er Ifleadx. tcxt2;揄出.NameTel.movah. 09int21hleabx.tcl_tab;号码表如址rcptl:cal 1pr intlinc;显示联系人addbx.28;求下一个联系人询地址cirpbx.endaddr:是否斜达表尾?jbrcptl;未列达创绝续显示retprintal1cndp

33、*材*神许*卅甘*衬*卅卄*卅*神卄*衬*神林*衬林*卄*卅科*叶*衬)卄*卅料*输入4±名子档序:读入姓名到tnamc缓冲区.并把不满20位的部分 补上空格(方便交找时的比轨)i nput_namc procnearcal 1er Ifnoinputn:leadx. tname;姓名绥冲区movah. Oah:调用dos Oah读入字符串功絶int21hCITptnafnc1. 0;如果休入为回车jenoinputn;煤续等侍休入xorbx. bxmovbl. tname1movex. 20subex. bxset_blank: movtnamebx*2, 20h ;把不满20位的

34、部分补空格incbxloopsct_bIankcal 1er Ifretnput_namc cndp*卅审神卄*林卄*卄*卅來神卄*林卄*卅审神卄*卅审神卄*材*!Her*卅 料*林*衬*stor_name该子租序把tnamc缓冲区的姓名转存入号马表中nearxorex. exmovcl. tname1;字符个敦leasi. tname2movdi.endaddreldrepmovsbinctab_lcn:朕系人人敎用1addendaddr, 28;报£一个联系人地址增28retstor_ name endp:*衬*林卄*神卄*衬审神卅*材*!材*钟卄*衬林神科*卄*衬林*林*审;获

35、取号码子档序:读入用户綸入的号码« tphonc冲区然E;转存入号码長对SLliXi nphoncprocn carnoinputp:cal 1er Ifleadx. tphoncmovah. Oahint21hdos Oa号功克綸入字幷串enptphone1,0;判斷输入足否为回车jcnoinputp;是.则堆隸等侍係入xorex. exmovcl. tphonc1leasi tphonc2movdi.endaddrsubdi.8;特括入位盜eldrepmovsbreti nphoncendp排序子程序(用直孩妬入孙序).对号码表邊斤按人名从小到大摊序name_sor tprocnearenptab_lcn,1;亿录敷1,不用排序jecxitnleadi. tcl_tab:第一个记录地址movsi.endaddrsubsi.28:iiE 个记录-特排序记录的地址nextl:movex. 20movax. si:%存两个地址movdx. dieldrepecnpsb;盘找括入位JLjbinsertmovsi. axmovdi.

温馨提示

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

评论

0/150

提交评论