汇编程序设计实验报告Word格式.docx

上传人:b****4 文档编号:16676413 上传时间:2022-11-25 格式:DOCX 页数:31 大小:582.07KB
下载 相关 举报
汇编程序设计实验报告Word格式.docx_第1页
第1页 / 共31页
汇编程序设计实验报告Word格式.docx_第2页
第2页 / 共31页
汇编程序设计实验报告Word格式.docx_第3页
第3页 / 共31页
汇编程序设计实验报告Word格式.docx_第4页
第4页 / 共31页
汇编程序设计实验报告Word格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

汇编程序设计实验报告Word格式.docx

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

汇编程序设计实验报告Word格式.docx

assumecs:

code,ds:

DATA,es:

DATA

start:

movax,DATA

movds,ax

moves,ax

leasi,STRING1

leadi,STRING2

cld

movcx,25

repzcmpsb

jzmatch

leadx,mess2

jmpshortdisp

match:

leadx,mess1

disp:

movah,9

int21h

movah,4ch

ret

mainendp

codeends

endstart

执行结果:

实验二用DEBUG编程:

使用堆栈段将

AX和BX的内容进行交换等

一:

程序说明:

1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;

编一程序段将AX和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

2、设DS=当前段地址,BX=0300H,SI=0002H;

请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。

在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

二:

调试说明

第一部分先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试,用-t命令逐步运行程序,查看AX和BX中内容的变化。

如果发现AX和BX中的内容进行了交换,则说明程序运行成功。

进入debug程序,先用—u指令查看一下程序,结果如下:

用—t指令逐步调试,结果如下:

第二部分:

如前面第一章最终生成可执行程序。

也可进入进入debug进行编写,如下:

程序清单和执行结果:

第一个程序清单:

DATASSEGMENT

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVAX,3000H

MOVBX,5000H

PUSHAX

movAX,BX

POPBX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

在debug中进行调试,逐步执行结果:

第二个程序清单:

DATAS

MOVBX,0300h

MOVSI,0002h

在debug中进行调试,逐步执行结果;

实验三、存储器块清零和内存块移动

一、程序说明:

第一个程序是存储块清零。

程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。

第二个程序是内存块移动。

程序流程框图为:

首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。

调试说明:

第一个程序在进入debug后,先用-u指令查看一下程序,再将断点设置在指令Loopagain之后,通过指令-g加上指令Loopagain后的地址,将程序运行到Loopagain之后停止,然后再通过-d指令查看相关内存内容是否被清零。

第二个程序在进入到debug后,先用-u指令查看一下程序,再将断点设置在指令repmovsb之前,通过指令-g运行后,然后用-d指令查看一下内存块的相关内容,得到的结果如下:

源程序代码和执行结果:

实验一:

datasegment

blockdb256dup(55h)

dataends

codesegment

assumecs:

code,ds:

data

startprocnear

movax,data

movds,ax

movbx,offsetblock

movcx,256

again:

mov[bx],byteptr0

incbx

loopagain

jmp$

codeends

endstart

实验二:

源代码:

地址块加一方法移动块的源程序:

DATASSEGMENT

sourcedb256dup(055h)

targetdb256dup(0aah)

DATAS,ES:

MOVES,AX

movsi,offsetsource

movdi,offsettarget

repmovsb

CODESENDS

第二部分地址块减一方法移动块的源程序:

DATASSEGMENT

movsi,offsetsource

addsi,255

movdi,offsettarget

next:

moval,[si]

mov[di],al

decsi

incdi

loopnext

movah,0

ENDSTART

实验四将键盘输入的小写字母用大写字母显示出来

一、程序说明

本程序用来将小写字母转变为大写,并在屏幕上显示出来。

先利用DOS功能调用INT21H的1号功能从键盘输入字符,然后判断输入的是否是小写字母,若不是小写字母,则显示输入出错,重新输入。

若输入的是小写字母,则通过将其减去20h,从而变为大写字母。

在通过DOS功能调用INT21H的2号功能显示出来。

若输入的是Enter键,则结束程序。

二、调试说明

调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm集成实验环境2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。

调试时可通过-t指令来逐步运行程序,观察相关内容变化,来调试程序。

string1db'

thisnotisazimu!

Pleaseinputbetweenatoz!

'

0ah,0dh,'

string2db'

$'

L0:

movah,1

int21h

cmpal,0dh

jzexit

cmpal,'

a'

jaeL1

jbL3

L1:

z'

jnaL2

jaL3

L2:

subal,20h

movcl,al

leadx,string2

movah,9

int21h

movdl,0

movdl,cl

movah,2

movdl,0ah

movdl,0dh

movah,2

jmpL0

L3:

leadx,string1

jmpL0

exit:

int21H

codesends

执行结果

 实验五:

循环程序设计

第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。

第二个程序是用来判别键盘上输入的字符:

若是1-9字符,则显示之;

若为A-Z或a-z字符,均显示“c”;

若是回车字符<

CR>

z则结束程序,若为其他字符则不显示,继续等待新的字符输入。

首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。

1-9字符,则显示之。

若是若小于0,则重新等待输入。

若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’。

调试时可通过-t指令来逐步运行程序,观察程序是如何进行循环的。

修改AL中的内容,可以通过-r指令来实现,如修改ax中的内容,通过指令-rax来实现,如下图所示:

第一源程序:

CODES

moval,3eh

pushax

movdl,al

movcl,4

shrdl,cl

cmpdl,9

jbenext1

adddl,7

next1:

adddl,30h

popax

anddl,0fh

jbenext2

next2:

第二源程序;

movah,1

jzdone

0'

jbnext

9'

jacharup

jmpSTART

charup:

cmpal,41h

cmpal,5ah

jachrdn

dispc:

movdl,'

c'

next:

jmpSTART

chrdn:

cmpal,61h

jbnext

jmpdispc

done:

MOVAH,4CH

INT21H

实验六:

分支程序设计

一、程序说明

若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’

三、调试说明

调试时可通过-t指令来逐步运行程序,观察程序是如何进行分支的。

修改AL中的内容,可以通过-r指令来实现,如修改ax中的内容,通过指令-rax

来实现,如下图所示:

第一个源程序:

CODESSEGMENT

第二个源程序;

执行结果:

实验七统计不同成绩段学生的人数

本程序用来统计在不同分数段的学生人数并显示出来。

有三个子程序,分别用来统计各分数段的学生人数、输出相关内容、换行回车。

子程序一中,先将每个学生的分数从100、90、80、70、60逐个比较,在哪一分数段,则将其个数加一。

直到所有分数都完成比较。

子程序二则利用DOS功能调用INT21H的9号功能在显示器上显示一个字符串和2号功能在显示器上显示一个字符来实现输出相关内容。

子程序三通过DOS功能调用INT21H的2号功能在显示器上显示一个字符实现换行和回车的。

调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm集成实验环境2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。

我们通过设置断点来改变数据,从而逐步执行达到我们想要的效果。

否是

arraydb50,69,84,94,73,89,99,100,100,80,100

Thenumberof100:

Thenumberof90-99:

string3db'

Thenumberof80-89:

string4db'

Thenumberof70-79:

string5db'

Thenumberof60-69:

string6db'

thenumberoflow60:

STACKSSEGMENT

moval,0

movbx,0

movcx,0

movdh,0

movdl,11

callcount

calloutput

MOVAH,4CH

countprocnear;

子程序一,用来统计各分数段的人数

movsi,0

cmparray[si],100

jzL1

jlnext1

next1:

cmparray[si],90

jaeL2

jlnext2

cmparray[si],80

jaeL3

jlnext3

next3:

cmparray[si],70

jaeL4

jlnext4

next4:

cmparray[si],60

jaeL5

incdh

incsi

decdl

jnznext

jmpexit

incal

incbh

L3:

incbl

L4:

incch

L5:

inccl

decdl

jnznext

exit:

ret

countendp

outputprocnear;

子程序二,用来输出相关内容

pushdx

pushcx

pushbx

leadx,string1;

输出100分的人数

popbx

movdl,bl

adddl,30h

callenter

leadx,string2;

输出90至99分的人数

movdl,bh

callenter

leadx,string3;

输出80至89分的人数

movah,9

leadx,string4;

输出70至79分的人数

int21H

leadx,string5;

输出60至69分的人数

leadx,string6;

输出低于60分的人数

callenter

outputendp

enterprocnear;

子程序三,用来在每行输出后回车换行

movdl,0ah

movah,02h

movdl,0dh

enterendp

实验心得与体会:

汇编语言是基于计算机硬件的操作,所以具有执行速度快,语言简洁等优点,刚开始做实验时,不怎么明白具体是怎么执行的,只是按照书上的顺序执行,随着实验的深入,渐渐了解汇编语言的特点的,。

也让我明白汇编语言和高级语言之间的不同,也更加了解计算机执行程序具体的过程,后面的程序是面向应用的,这样就对编程有了更高的要求,要求学会分解问题,然后再用子程序解决小问题,最后再解决总的问题。

通过这次的实验,让我对计算机

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

当前位置:首页 > 初中教育 > 政史地

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

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