汇编语言程序设计实验报告.docx

上传人:h**** 文档编号:26965667 上传时间:2022-07-20 格式:DOCX 页数:18 大小:17.15KB
返回 下载 相关 举报
汇编语言程序设计实验报告.docx_第1页
第1页 / 共18页
汇编语言程序设计实验报告.docx_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《汇编语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验报告.docx(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

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

3、ess2 db No match!.,13,10,$ datarea ends prognam segment main proc far assume cs:prognam,ds:datarea,es:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax lea si,string1 lea di,string2 cld mov cx,25 repz cmpsb jz match lea dx,mess2 jmp short disp match: lea dx, mess1 disp: mov

4、 ah,09 int 21h ret main endp prognam ends end start 2对源文件汇编产生目标文件obj D:masm 文件名。Asm 3用连接程序link产生执行文件exe D:link文件名。Obj 4执行程序 D: 文件名 5. 使用d ebug程序调试程序的方法。 ddebug 文件名.exe _ 1.用G命令运行程序 2.用U命令显示程序 3.学会设置断点。 4.学会查看数据段的内容情况D 5.用E命令修改数据区的字符串。 6.用A命令把数据区的内容恢复原状 7.T命令逐条跟踪程序的执行 8.学会使用F命令、R命令、Q命令等等 五、实验总结 第一次进行

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

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

7、存器 的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可 使用堆栈来保存相继的ASC|字符。具体用法是:在显示空白或回车, 换行符前用指令 push dx 把dl 的内容保存到堆栈中去。在显示空白或回车,换行符后用指令 pop dx 恢复dl寄存器的原始内容。 五、实验代码 stack segment db100 dup (?) stack ends code segment assume cs:code,ss:stack start: mov dl,10h mov cl,0fh loopc: mov ah,02h mov al,dl int 21h inc dl push dx

8、mov dl,0h mov ah,02h mov al,dl int 21h pop dx loopnz loopc push dx mov dl,0dh mov ah,02h mov al,dl int 21h mov dl,0ah mov ah,02h mov al,dl int 21h pop dx mov cl,0fh cmp dl,0h jne loopc mov ah,4ch int 21h code ends end start 六、实验结果 七、实验总结 本次试验学会用循环结构进行程序编程,学好循环程序是很重要的,在程序设计中,它的地位是极其重要的。 实验三循环程序设计2 一.

9、实验目的: 学会用循环程序设计进行程序编程。 二.实验题目: 设计查找匹配字符串SEARCH的程序。 三.问题要求: 程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示no match;如果句子中包含关键字则显示match,且把 该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下: enter keyword :abc enter sentence :we are studying abc match at location :11H of the sentence enter sentence: xyz ,ok? no match enter sentence

10、 :c 四. 方法说明: 程序可由三部分组成: (1 ) 输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用 0AH。 (2)在句子中查找关键字。 1关键字和一个句子中相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指 令的使用,这样,相应的寄存器内容也有了确定的含义,如下: SI 寄存器为关键字的指针 DI 寄存器为句子中正相比较的字段的指针 CX寄存器存放关键字的字母个数(长度) 2整个句子和关键字的比较过程可以用一个循环结构来完成。循环次数为: (句子长度-关键字长度)+1在计算循环次数时,如遇到句子长度小 于关键字长度的情况则应转向

11、显示“no match”,循环中还需要用到 BX寄存器,它用来保存句子中当前正在比较字段的首地址。 (3)输出信息: 用功能调用09h分“找到”或“找不到”两种情况分别显示不同的信息。在“找到”时,还要求显示出匹配字符串在句子中的位置,在“找到”时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加 1 即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。 五、实验代码 sseg segment stack dw256 dup(?) sseg ends data segment msg1 dbEnter keyword:,24h msg2 dbEn

12、ter Sentence:,24h cr db13,10,24h keyword db250,?,250 dup(?) Sentence db250,?,250 dup(?) match dbMatch at location:,24h match1 db of the sentence,13,10,24h nomatch dbNo match,13,10,24h data ends code segment assume cs:code,ds:data,ss:sseg disp_hex proc near push ax push cx push dx push ax mov cl,4 ro

13、r 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 add al,7 d2: mov dl,al mov ah,2 int 21h mov dl,h mov 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 mo

14、v 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 msg2 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

15、 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 dec 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 21

16、h jmp b1 _nomatch: mov dx,offset nomatch mov ah,9 int 21h jmp b1 quit: mov ah,4ch int 21h code ends end begin 六、实验结果 七、实验总结 本次试验主要考察了串比较指令的用法,同时将串指令和REPE联合起来用,使得指令变得简单。实验中还用到了一些数据结构,开始时需要定义空间以及缓冲区。 另外程序需要运用有两层循环,内循环由CX记录关键字长度控制循环计数,外循环是由ax记录外循环次数控制外循环计数。 通过本次实验,使我更加熟悉了课堂上知识,还培养了我将理论知识运用到实际编程中去的能力。 实

17、验四分支程序设计 一.实验目的: 学会用分支程序设计进行程序编程。 二.实验题目: 设计一个程序能分类统计字符个数 三.实验要求: 程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。 四.方法说明: 程序可采用0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数,也可采用01H功能调用在接收字符后先分类计数然后再存入缓冲区中。 程序需进入debug 运行并查看计数结果。 五实验代码 DA TAS SEGMEN T STRING1 DBInput Y our

18、 String: $;输入提示信息 STRING2 DBDigit: $;各类字符提示信息 STRING3 DBLetter: $ STRING5 DBOthers: $ DIGIT DB 0 ;数字 CHARS DB 0 ;字母 OTHERS DB 0 ;其他 DA TAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DA TA S STAR T: MOV AX,DA TAS 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 O THER ;若39H(9),跳转进一步比较 JA HIGHER1 JMP DIGITAL ;DIGIT+ HIGHER1: CMP AL,41H;if5AH(Z),跳转继续比较 JA HIGHER2 JMP CHAR ;ALPHAU+ HIGHER2: CMP AL,61H ;if61H(a),OTHERS+

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com