实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a)使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回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.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datareastart:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件objD:\masm 文件名。
Asm3.用连接程序link产生执行文件exeD:\link文件名。
Obj4.执行程序D:\ 文件名5. 使用debug程序调试程序的方法。
d>debug 文件名.exe_1.用G命令运行程序2.用U命令显示程序3.学会设置断点。
4.学会查看数据段的容情况D5.用E命令修改数据区的字符串。
6.用A 命令把数据区的容恢复原状7.T命令逐条跟踪程序的执行8.学会使用F命令、R命令、Q命令等等五、实验总结第一次进行汇编实验,主要是学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,只有多上机练习,才能更好的掌握汇编语言程序设计的思想。
实验二循环程序设计1循环结构是控制重复执行某一程序段的基本程序结构. 在汇编语言程序设计中, 循环程序的地位也是极为重要,从本质上来看, 循环程序结构是分支程序结构的一种手特殊形式, 也是使用条件转移指令来控制执行循环的.一.实验目的:学会用循环结构进行程序编程。
二.实验题目:设计一个按表格形式显示ASC||码为10H—100H的所有字符的程序。
三.实验要求:按15行*16列的表格形式显示ASC||码为10H----100H的所有字符,即以行为主的顺序及ASC||码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASC||为0)隔开。
四.方法说明:(1) 显示每个字符可使用功能号为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 的容保存到堆栈中去。
在显示空白或回车,换行符后用指令pop dx 恢复dl寄存器的原始容。
五、实验代码stack segmentdb100 dup (?)stack endscode segmentassume cs:code,ss:stackstart:mov dl,10hmov cl,0fhloopc:mov ah,02hmov al,dlint 21hinc dlpush dxmov dl,0hmov ah,02hmov al,dlint 21hpop dxloopnz loopcpush dxmov dl,0dhmov ah,02hmov al,dlint 21hmov dl,0ahmov ah,02hmov al,dlint 21hpop dxmov cl,0fhcmp dl,0hjne loopcmov ah,4chint 21hcode endsend start 六、实验结果七、实验总结本次试验学会用循环结构进行程序编程,学好循环程序是很重要的,在程序设计中,它的地位是极其重要的。
实验三循环程序设计2一.实验目的:学会用循环程序设计进行程序编程。
二.实验题目:设计查找匹配字符串SEARCH的程序。
三.问题要求:程序接收用户键入的一个关键字以及一个句子。
如果句子中不包含关键字则显示’no match’;如果句子中包含关键字则显示‘match’,且把该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下:enter keyword :abcenter sentence :we are studying abcmatch at location :11H of the sentenceenter sentence: xyz ,ok?no matchenter sentence :^c四. 方法说明:程序可由三部分组成:(1 ) 输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用0AH。
(2)在句子中查找关键字。
1.关键字和一个句子中相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指令的使用,这样,相应的寄存器容也有了确定的含义,如下:SI 寄存器为关键字的指针DI 寄存器为句子中正相比较的字段的指针CX寄存器存放关键字的字母个数(长度)2.整个句子和关键字的比较过程可以用一个循环结构来完成。
循环次数为:(句子长度--关键字长度)+1在计算循环次数时,如遇到句子长度小于关键字长度的情况则应转向显示“no match”,循环中还需要用到BX寄存器,它用来保存句子中当前正在比较字段的首地址。
(3)输出信息:用功能调用09h分“找到”或“找不到”两种情况分别显示不同的信息。
在“找到”时,还要求显示出匹配字符串在句子中的位置,在“找到”时BX寄存器的容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加1 即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。
五、实验代码sseg segment stackdw256 dup(?)sseg endsdata segmentmsg1 db'Enter keyword:',24hmsg2 db'Enter Sentence:',24hcr db13,10,24hkeyword db250,?,250 dup(?)Sentence db250,?,250 dup(?)match db'Match at location:',24hmatch1 db' of the sentence',13,10,24hnomatch db'No match',13,10,24hdata endscode segmentassume cs:code,ds:data,ss:ssegdisp_hex proc nearpush axpush cxpush dxpush axmov cl,4ror al,cland al,0fhadd al,30hcmp al,39hjna d1add al,7d1:mov dl,almov ah,2int 21hpop axand al,0fhadd al,30hcmp al,39hjna d2add al,7d2:mov dl,almov ah,2int 21hmov dl,'h'mov ah,2int 21hpop dxpop cxpop axretdisp_hex endpbegin:mov ax,datamov ds,axmov es,axmov dx,offset msg1mov ah,9int 21hmov dx,offset keywordmov ah,0ahint 21hcmp keyword +1,0 je quitmov dx,offset crmov ah,9int 21hb1:mov dx,offset msg2mov ah,9int 21hmov dx,offset Sentencemov ah,0ahint 21hmov dx,offset crmov ah,9int 21hmov dl,Sentence + 1cmp dl,0je quitmov dh,keyword + 1mov di,offset Sentence + 2b2:cmp dh,dlja _nomatchmov si,offset keyword + 2mov cl,dhmov ch,0cldpush direpe cmpsbpop dije _matchinc didec dljmp b2_match:mov ax,disub ax,offset Sentence + 2inc axpush axmov dx,offset matchmov ah,9int 21hpop axcall disp_hexmov dx,offset match1mov ah,9int 21hjmp b1_nomatch:mov dx,offset nomatchmov ah,9int 21hjmp b1quit:mov ah,4chint 21hcode endsend begin六、实验结果七、实验总结本次试验主要考察了串比较指令的用法,同时将串指令和REPE联合起来用,使得指令变得简单。