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

上传人:b****2 文档编号:24111907 上传时间:2023-05-24 格式:DOCX 页数:20 大小:72.94KB
下载 相关 举报
汇编语言程序设计实验报告.docx_第1页
第1页 / 共20页
汇编语言程序设计实验报告.docx_第2页
第2页 / 共20页
汇编语言程序设计实验报告.docx_第3页
第3页 / 共20页
汇编语言程序设计实验报告.docx_第4页
第4页 / 共20页
汇编语言程序设计实验报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

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

《汇编语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验报告.docx(20页珍藏版)》请在冰豆网上搜索。

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

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

《汇编语言程序设计》实验报告

 

实验室:

S318

最后一次实验时间:

2010年5月18日

第12周星期二1-2节

 

学院:

计算机科学与技术学院

专业:

计算机科学与技术

 

实验一

实验题目:

认识Tddebug集成环境

实验目的:

1.熟悉汇编程序的开发过程。

2.认识Tddebug集成操作软件。

3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。

4.掌握INT21H软件中断来调用DOS内部子程序的方法

实验主要步骤:

1.运行Tddebug软件,选择Edit菜单编写实验程序

2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

3.使用Rmrun菜单中的Run运行程序,观察运行结果。

4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。

单步执行数据传送指令后,观察各寄存器及数据区的内容。

过程如下:

1)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。

每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。

2)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:

●方法1:

在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:

“DS或ES寄存器的值:

偏移地址”,即可显示用户指定的数据区

●方法2:

选择菜单View|Dump,弹出内存数据显示窗口。

3)查看执行结果:

按Alt+F5,切换到用户窗口。

5.更改数据区中的数据,考察、调试程序的正确性。

6.程序代码:

;数据传送实验,采用相对寻址方式

DDATASEGMENT;定义源数据段

MSRDB"HELLO,WORLD!

$"

LENEQU$-MSR

DDATAENDS

EXDASEGMENT;定义附加数据段

MSDDBLENDUP(?

EXDAENDS

MYSTACKSEGMENTSTACK;定义堆栈段

DW20DUP(?

MYSTACKENDS

CODESEGMENT;定义代码段

ASSUMECS:

CODE,DS:

DDATA,ES:

EXDA

START:

MOVAX,DDATA

MOVDS,AX;装载数据段寄存器

MOVAX,EXDA

MOVES,AX;装载附加数据段寄存器

MOVSI,OFFSETMSR

MOVDI,OFFSETMSD

MOVCX,LEN

MOVBX,0

NEXT:

MOVAL,MSR[BX];开始传输数据

MOVES:

MSD[BX],AL

INCBX

LOOPNEXT

PUSHES

POPDS;将附加段寄存器指向的段值赋给数据段寄存器

MOVDX,OFFSETMSD

MOVAH,9

INT21H;显示字符串

MOVAH,4CH

INT21H;返回DOS状态

CODEENDS

ENDSTART

实验结果:

通过Tddebug软件写好实验程序后,对程序进行编译连接,最终生成执行文件,在dos环境下启动后,进入Tddebug,对程序进行单步执行,可看到在每一步执行过程中,程序所分得的地址单元。

连接试验箱后,通过对试验箱的操作,能够看到在dos环境下程序的执行步骤。

代码运行结果:

显示:

“HELLO,WORLD!

心得体会:

通过本次试验,是我回顾了在学习单片机的时候使用的Tddebug集成开发软件使用方法,了解了汇编程序的开发过程。

能够在Tddebug环境下进行编辑、编译、连接程序,掌握了INT21H软件中断的调用DOS内部子程序的方法。

但对于DOS环境下的汇编程序的编辑、编译、连接使用还不是很熟悉,只能是Tddebug集成软件开发环境下熟悉的编译连接运行。

 

实验二

实验名称:

I/O程序设计

实验目的:

1.理解软中断的调用方法及中断过程。

2.掌握INT21H软件中断来调用DOS系统I/O子程序的方法。

3.掌握将存储在内存单元中的数据在屏幕上显示的方法。

4.掌握从键盘输入信息到内存的方法。

实验内容:

1.将指定数据区中一个字节的数据以十六进制数形式显示在屏幕上。

2.编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。

3.从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。

4.编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上

实验步骤:

1.画出实验流程图。

2.运行Tddebug软件,选择Edit菜单编写实验程序

3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

4.使用Rmrun菜单中的Run运行程序,观察运行结果。

5.使用Rmrun菜单中的Debug调试程序。

单步执行指令,观察各寄存器及数据区的内容。

更改数据区中的数据,考察程序的正确性

实验代码:

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

实验结果:

代码运行结果:

显示“61H”

心得体会:

本次实验要求我们将指定数据区的一个数据转换为其十六进制数,通过这次实验,我充分理解了什么是软中断,以及软中断的调用方法和中断过程,并了解了INT21H软中断来调用DOS系统I/O子程序的方法,并知道如何将存储在内存单元中的素具显示在屏幕上。

在老师的讲解过程中,我对试验提供的参考代码有了更深的了解,明白了如何进行调用软中断。

 

实验三

实验名称:

代码转换程序设计

实验目的:

1.了解微机中所使用的各类数制及编码方法。

2.掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。

3.掌握将存储在内存单元中的数据以十六进制数形式、十进制数形式和二进制数形式显示在屏幕上的方法。

实验内容:

1.将5位十进制数的数字串转换为一个字的二进制数

2.编写程序将内存中一个字的数转换为十进制数的数字串显示。

((压栈或者字符串)

3.编程将十进制的数字串转换为BCD码

4.编程将BCD码转换为二进制数

5.编程将二进制数转换为十进制数显示

实验步骤:

1.画出实验流程图。

2.运行Tddebug软件,选择Edit菜单编写实验程序

3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

4.使用Rmrun菜单中的Run运行程序,观察运行结果。

5.使用Rmrun菜单中的Debug调试程序。

单步执行指令,观察各寄存器及数据区的内容。

6.更改数据区中的数据,考察程序的正确性。

实验流程图:

图6-2将5位十进制数的数字串转换为二进制数参考流程

图6-3将十进制数的数字串转换为BCD码参考流程

代码:

DDATASEGMENT

MESDB'Theasciicodeofdecimalcodeare:

$'

BUFDB30H,30H,30H,31H,32H;十进制00012的ASCII码

DB10HDUP(0)

DDATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DDATA

START:

MOVAX,DDATA

MOVDS,AX

MOVSI,OFFSETBUF

MOVBL,0AH;送乘数

MOVCX,0004H;送转换位数

MOVAH,00H

MOVAL,[SI];取第一位ASCII码

SUBAL,30H

A1:

INCSI

IMULBL;乘10(AL*BL)放在AX中

ADDAL,[SI]

SUBAL,30H

LOOPA1

MOVBX,AX

MOVDX,OFFSETMES;显示提示信息

MOVAH,09H

INT21H

MOVAX,BX;显示结果

MOVCX,4

A3:

PUSHCX

MOVCL,4

ROLAX,CL;向左移位

POPCX

MOVBX,AX

ANDAL,0FH;高4位清零,保留低4位的值

CMPAL,0AH

JBA2

ADDAL,07H

A2:

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H

MOVAX,BX

LOOPA3

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

实验结果:

代码运行结果:

显示“00001010”

心得体会:

本次实验要求我们将5位十进制数的数字串转换为一个字的二进制数,通过这次实验,我了解了微机中所使用的各类数制及编码方法,并知道了不同进制数及编码相互转换的程序设计方法,加深了对数码转换的理解,并掌握了将存储在内存单元中的数据以十六进制数形式显示在屏幕上的方法。

在刚开始实验的时候对于将十进制数转换为二进制有点不知道怎么办,虽然知道应该怎么算,但是却不知道怎么样写代码,通过对参考代码的理解,对于将十进制转换为二进制有了一定的概念,知道了要写一个转换进制的实验的基本步骤了。

对上述实验我进行了一定的修改,代码如下:

datasegment

bufdb6,6dup(0)

msg1db'PleaseinputX:

',0ah,0dh,'$'

msg2db0ah,0dh,'PleaseinputP:

',0ah,0dh,'$'

msg3db0ah,0dh,'Result:

',0ah,0dh,'$'

dataends

codesegment

assumecs:

code,ds:

data

;将字符串转换为十进制数的子程序

;输入参数:

字符处首地址

;输出参数:

ax(保存十进制数)

StrToNumproc

pushbx

movbx,10

StrToNum_s1:

mulbx

andbuf[si],0fh

addal,buf[si]

incsi

loopStrToNum_s1

popbx

ret

StrToNumendp

;功能:

输出P进制数子程序

;输入参数:

ax

;输出参数:

Printproc

pushax

pushbx

pushcx

pushdx;保护

xorcx,cx

s1:

movdx,0

divbx

pushdx

inccx

cmpax,0

jnes1

movah,02h

s2:

popdx

adddl,30h

cmpdl,39h

jas1

int21h

loops2

jmpok

adddl,7h

int21h

loops2

ok:

popdx

popcx

popbx

popax

ret

Printendp

start:

movax,data

movds,ax

movdx,offsetmsg1;输出msg1

movah,09h

int21h

movdx,offsetbuf;输入十进制数X

movah,0ah

int21h

movcl,buf[1]

movsi,2

movax,0

callStrToNum;调用将字符串转换为十进制

pushax;暂存ax

movdx,offsetmsg2;输出msg2

movah,09h

int21h

movdx,offsetbuf;输入p

movah,0ah

int21h

movcl,buf[1]

movsi,2

movax,0

callStrToNum;调用将字符串转换为十进制

movbx,ax

movdx,offsetmsg3;输出msg3

movah,09h

int21h

popax

callPrint

movax,4c00hint21h

codeends

endstart

运行结果如下:

PleaseinputX:

//输入一个数

9

PleaseinputP:

//选择显示输出结果的进制数

2

Result:

1001

 

实验四

实验名称:

综合程序设计

实验目的:

掌握子程序的写法、循环的调用,利用汇编语言编写简单的程序。

实验内容:

编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上

要求:

含有子程序,循环

实验步骤:

1.画出实验流程图。

2.运行Tddebug软件,选择Edit菜单编写实验程序

3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

4.使用Rmrun菜单中的Run运行程序,观察运行结果。

5.使用Rmrun菜单中的Debug调试程序。

实验流程图:

实验代码:

;输入一个数,选择显示进制,并在屏幕上显示出来

datasegment

bufdb?

msg1db'PleaseinputX:

',0ah,0dh,'$'

msg2db0ah,0dh,'Result:

',0ah,0dh,'$'

dataends

codesegment

assumecs:

code,ds:

data

d_to_bprocnear

movbuf,2

movcx,8

moval,buf

ed:

clc

rclbyteptrbuf,1

jncone

movah,02h

movdl,'1'

int21h

jmpll

one:

movah,02h

movdl,'0'

int21h

ll:

looped

ret

d_to_bendp

start:

movax,data

movds,ax

movdx,offsetmsg1;输出msg1

movah,09h

int21h

movah,01h

int21h

movbuf,al

movdx,offsetmsg2;输出msg2

movah,09h

int21h

calld_to_b

movax,4c00h;返回

int21h

codeends

endstart

实验结果:

代码运行结果:

PleaseinputX:

6

Result:

00000110

心得体会:

本次实验是一个综合性实验的设计,在本次实验中,要求我们编写一个程序,实现从键盘任意输入一位数,将该数以二进制形式显示在屏幕上,并且在程序中必须包括子程序及循环。

在做这个题目的过程中,遇到了很多问题,刚开始的时候是使用clc清零CF标志位,但是最终的到的结果是,无论输入什么数,都是00000000,最后经过和同学讨论,猜得到最后的正确结果,不是clc的问题而是需要把后面的一句改成“rclbyteptrbuf,1”,最后算是水里完成呢个了本次试验。

通过这次实验,我对于汇编语言有了更深的了解,并学会了如何用汇编进行简单程序的编写。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1