汇编上机实验报告.docx
- 文档编号:6241500
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:29
- 大小:1.16MB
汇编上机实验报告.docx
《汇编上机实验报告.docx》由会员分享,可在线阅读,更多相关《汇编上机实验报告.docx(29页珍藏版)》请在冰点文库上搜索。
汇编上机实验报告
实验一认识Tddebug集成操作软件实验日志
指导教师曾素华实验时间:
2013年04月02日
学院计算机科学与技术专业计算机科学与技术
班级0411005学号2010211912姓名李新娱实验室s401
一、实验题目
认识Tddebug集成操作软件
二、实验目的
1.熟悉汇编程序的开发过程。
2.认识Tddebug集成操作软件。
3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。
4.掌握INT21H软件中断来调用DOS内部子程序的方法
三、实验内容及说明
1.实验内容:
数据传送实验
1)编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
参见示例出程序。
2)修改此程序,采用字符串传送指令完成。
2.实验中使用DOS功能调用(INT21H):
参见教材《32位微型计算机原理与接口技术》89页
(1)显示字符串
入口:
AH=09H
调用参数:
DS:
DX=串首地址,‘$’为结束字符。
(2)返回DOS系统
入口:
AH=4CH
调用参数:
AL=返回码
四、实验主要步骤
要求一数据传送实验
1.运行Tddebug软件,选择Edit菜单编写实验程序
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
3.使用Rmrun菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:
3)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
4)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:
●方法1:
在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:
“DS或ES寄存器的值:
偏移地址”,即可显示用户指定的数据区
●方法2:
选择菜单View|Dump,弹出内存数据显示窗口。
3)查看执行结果:
按Alt+F5,切换到用户窗口。
5.更改数据区中的数据,考察、调试程序的正确性。
五、心得体会
通过本次试验我初步认识了汇编程序的开发过程,了解了Tddebug软件,在一开始的试验中反应太慢没有跟上老师,但在自主实践缓解通过与同学交流完成了实验,虽然对代码还不是很熟悉,但Tddebug软件的操作方法已经熟悉,并且掌握了在此环境的编辑、编译、链接汇编语言的程序方法和INT21H的中断调用来调用DOS内部子程序的方法。
实验二I/O程序设计实验日志
指导教师邹洋实验时间:
2013年04月16日
学院计算机科学与技术专业计算机科学与技术
班级0411005学号2010211912姓名李新娱实验室s401
一、实验题目
I/O程序设计
二、实验目的
1.理解软中断的调用方法及中断过程。
2.掌握INT21H软件中断来调用DOS系统I/O子程序的方法。
3.掌握将存储在内存单元中的数据在屏幕上显示的方法。
4.掌握从键盘输入信息到内存的方法。
三、实验要求
1.将指定数据区中一个字节的数据以十六进制数形式显示在屏幕上。
设计思路:
首先将该数以十六进制数形式分解,然后将每一位分别转换为ASCII码送屏幕显示。
其中0H~9H之间的数加30H,即可得0H~9H的ASCII码,而AH~FH的ASCII码,则需再加7H,参见表5-1。
参考程序流程如图2-1所示。
示例程序参见参考程序清单。
2.编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。
3.从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。
4.编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上。
四、实验主要步骤
要求二由键盘输入任意一个字符,将ASCII码值显示在屏幕上
1.画出实验流程图。
参考代码:
;将指定数据区SD的数据以十六进制数形式显示在屏幕上
DATASEGMENT
MESDB'Showaashex:
',0AH,0DH,'$'
SDDB'a'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES;显示提示信息
MOVAH,09H
INT21H
MOVSI,OFFSETSD
MOVAL,DS:
[SI]
ANDAL,0F0H;取高4位
MOVCL,4
SHRAL,CL
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;显示字符
MOVAH,02H
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;显示字符
MOVAH,02H
INT21H
MOVAH,4CH;返回DOS
INT21H
CODEENDS
ENDSTART
2.运行Tddebug软件,选择Edit菜单编写实验程序
3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
4.使用Rmrun菜单中的Run运行程序,观察运行结果。
5.使用Rmrun菜单中的Debug调试程序。
单步执行指令,观察各寄存器及数据区的内容。
要求三从键盘输入两个1位十进制数,计算二者之和。
codesegment
assumecs:
code
start:
movcx,2
movbl,0
next:
movah,1
int21h
subal,30h
jcnext
cmpal,9h
janext
addal,bl
daa
movbl,al
movdl,13
movah,2
int21h
movdl,10
int21h
loopnext
movcl,4
movdh,2
next1:
rolbl,cl
movdl,bl
anddl,0fh
adddl,30h
movah,2
int21h
decdh
jnznext1
movah,1
int21h
movah,4ch
int21h
codeends
endstart
五、心得体会
这次实验再次实践了Tddebug软件的使用方法,让我更深层次理解了软中断的调用方法及中断过程,掌握了INT21H软件中断来调用DOS系统I/O子程序的方法和讲存储在内存单元中的数据在屏幕上显示的方法,并且掌握了从键盘输入信息到内存的方法。
在这次实验中我还自己动手写了代码,虽然很多不会都咨询了同学,但后来还是成功实现了功能。
实验三分支程序设计实验日志
指导教师邹洋实验时间:
2013年04月28日
学院计算机科学与技术专业计算机科学与技术
班级0411005学号2010211912姓名李新娱实验室s401
一、实验题目
分支程序设计
二、实验目的
1.掌握比较指令、条件转移指令的用法
2.掌握分支结构程序的组成
3.掌握分支程序的设计、调试方法
三、实验要求
1.判断X的大小,并根据判断结果以不同方式分别显示。
2.键入一个数,判断数是否在5 3.编写程序,在屏幕上显示一组菜单,根据键盘输入的菜单编号,提示你选择的菜单名。 4.从键盘输入一个字符,判断该字符是小写字母、大写字母、数字或其他字符,并给出相应的提示。 四、实验主要步骤 要求一判断X的大小,并根据判断结果以不同方式分别显示。 1.画出实验流程图。 参考代码: ;设NUMBER单元的数X以及数值N1,N2均为单字节无符号数,请判断X的大小,并根据判断结果分别显示: N1<=X<=N2,或X DATASEGMENTUSE16 MESG1DB'N1<=X<=N2$' MESG2DB'X MESG3DB'X>N2$' NUMBERDB66;无符号数X N1EQU22 N2EQU88 DATAENDS CODESEGMENTUSE16 ASSUMECS: CODE,DS: DATA BEG: MOVAX,DATA MOVDS,AX MOVDX,OFFSETMESG1 CMPNUMBER,N1 JAENEXT;X≥N1转 MOVDX,OFFSETMESG2 JMPDISP NEXT: CMPNUMBER,N2 JBEDISP;X≤N2转 MOVDX,OFFSETMESG3 DISP: MOVAH,9 INT21H;显示结果信息 MOVAH,4CH INT21H;返回DOS CODEENDS ENDBEG 2.运行Tddebug软件,选择Edit菜单编写实验程序 3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。 4.使用Rmrun菜单中的Run运行程序,观察运行结果。 5.使用Rmrun菜单中的Debug调试程序。 观察构成分支条件的各标志的变化情况及相关寄存器内容。 6.更改数据区中的数据,考察程序的正确性。 要求二键入一个数,判断数是否在5 DATASEGMENTUSE16 MESG1DB'0$' MESG2DB'-1$' NUMBERDB66 N1EQU5 N2EQU24 DATAENDS CODESEGMENTUSE16 ASSUMECS: CODE,DS: DATA BEG: MOVAX,DATA MOVDS,AX MOVDX,OFFSETMESG1 MOVAH,01H INT21H MOVBL,AL SUBBL,30H CMPBL,N1 JGNEXT MOVDX,OFFSETMESG2 JMPDISP NEXT: CMPBL,N2 JBDISP MOVDX,OFFSETMESG2 DISP: MOVAH,9 INT21H MOVAH,4CH INT21H CODEENDS ENDBEG 五、心得体会 在上一次实验的基础上,我掌握了比较指令、转移指令使用方法,并初步了解了分支程序的设计、调试方法。 这次要求里面的代码对我来说有点难,不能像以前一样的照猫画虎,让我只能自主思考,主动学习指令并应用。 实验四循环程序设计实验日志 指导教师邹洋实验时间: 2013年05月14日 学院计算机科学与技术专业计算机科学与技术 班级0411005学号2010211912姓名李新娱实验室s401 一、实验题目: 循环程序设计 二、实验目的: 1.掌握比较指令、转移指令和循环指令的使用方法 2.掌握循环结构程序的组成 3.掌握循环程序的设计、调试方法 三、实验要求: 1.求某数据区内负数的个数 为统计数据区内负数的个数,需逐个判别区内的每一个数据,然后将所有数据中凡是符号位为1的数据个数累加起来,即得到区内包含负数的个数。 参见程序清单. 2.试编程统计数据区中正数、零和负数的个数。 3.编程求无符号数字节序列中最大值和最小值 实验中可使用BH和BL作为暂存现行最大值和最小值,且在初始时将BH和BL初始化为首字节的内容,循环依次比较每个字节的内容,求得最大值(存于BH中)和最小值(存于BL中),送屏幕显示。 4.从键盘输入一字符串,搜索该字符串中是否有字符“A”,若有请输出其在串中的位置。 四、实验主要步骤: 要求1求某数据区内负数的个数 1.画出实验流程图。 参考代码: ;确定数据区NUMB中负数的个数(存放于BL中) DDATASEGMENT NUMBDB12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H MESDB'Thenumberofnegativeis: $' DDATAENDS CODESEGMENT ASSUMECS: CODE,DS: DDATA START: MOVAX,DDATA MOVDS,AX MOVDI,OFFSETNUMB XORBL,BL MOVCX,10 A1: MOVAL,[DI] TESTAL,80H JEA2 INCBL A2: INCDI LOOPA1;统计负数个数 MOVDX,OFFSETMES MOVAH,09H INT21H MOVAL,BL;显示负数个数,注意与实验二所使用的方法的区别 MOVCX,2 A3: PUSHCX MOVCL,4 ROLAL,CL POPCX MOVBL,AL ANDAL,0FH CMPAL,0AH JBA4 ADDAL,07H A4: ADDAL,30H MOVDL,AL MOVAH,02H INT21H MOVAL,BL LOOPA3 MOVAH,4CH INT21H CODEENDS ENDSTART 2.运行Tddebug软件,选择Edit菜单编写实验程序 3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。 4.使用Rmrun菜单中的Run运行程序,观察运行结果。 5.使用Rmrun菜单中的Debug调试程序。 观察构成分支、循环条件的各标志的变化情况及相关寄存器内容。 6.更改数据区中的数据,考察程序的正确性。 要求三从键盘输入一字符串,搜索该字符串中是否有字符“A”,若有请输出其在串中的位置。 DATASSEGMENT cap1db"pleaseinputastring",0dh,0ah,"$" cap2db"plesaeinputtheletteryousearch",0dh,0ah,"$" str0db40,? 40dup(0) str1db40dup(0) DATASENDS STACKSSEGMENT dw40hdup(? ) STACKSENDS CODESSEGMENT ASSUMECS: CODES,DS: DATAS,SS: STACKS START: MOVAX,DATAS MOVDS,AX movdx,offsetcap1;输出提示“pleaseinputastring" movah,09h int21h movdx,offsetstr0;输入一行字符串 ;movdh,0ah;此处错误 movah,0ah int21h movdl,0ah;以下三行是实现换行功能 movah,02 int21h movdl,13;以下三行是实现回车功能 movah,02 int21h movdx,offsetcap2 movah,09h int21h movah,01h int21h leasi,str0 leadi,str1 ;movdh,dl;此处错误,输入放在al中 movdh,al callsearch xordh,dh movcx,dx ;leadi,str0;以下几句是实现依次输入找到的字符串的位置 leadi,str1; l4: ;loopzl5 ;movcl,[di] movdl,byteptr[di] cmpdl,0 jzl5 adddl,30h movah,02h int21h movdl,'.' movah,02h int21h incdi jmpl4 l5: MOVAH,4CH INT21H searchproc;子程序 pushf pushax ;movcx,[si+1];此处修改 xorcx,cx movcl,byteptr[si+1] movdl,0 movax,1 l3: cmp[si+2],dh jnzl1 incdl mov[di],al incdi l1: incax cmpax,cx jal2 incsi jmpl3 l2: popax popf ret searchendp CODESENDS ENDSTART\ 五、心得体会: 在上一次实验的基础上,熟悉了比较指令和转移指令,着重学习了循环指令及循环指令的使用方法和循环结构程序的组成,并初步了解了循环程序的设计、调试方法。 循环程序的设计对于我是,在课后还需要巩固加深。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 上机 实验 报告