汇编实验报告安工大陆勤老师.docx

上传人:b****8 文档编号:27580951 上传时间:2023-07-03 格式:DOCX 页数:26 大小:475.82KB
下载 相关 举报
汇编实验报告安工大陆勤老师.docx_第1页
第1页 / 共26页
汇编实验报告安工大陆勤老师.docx_第2页
第2页 / 共26页
汇编实验报告安工大陆勤老师.docx_第3页
第3页 / 共26页
汇编实验报告安工大陆勤老师.docx_第4页
第4页 / 共26页
汇编实验报告安工大陆勤老师.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

汇编实验报告安工大陆勤老师.docx

《汇编实验报告安工大陆勤老师.docx》由会员分享,可在线阅读,更多相关《汇编实验报告安工大陆勤老师.docx(26页珍藏版)》请在冰豆网上搜索。

汇编实验报告安工大陆勤老师.docx

汇编实验报告安工大陆勤老师

汇编语言实验报告

学院:

计算机学院

姓名:

学号:

班级:

实验一汇编运行环境及方法、简单程序设计

1.程序说明:

本程序用来比较两个字符串string1和string2所含的字符是否相同。

若相同则显示‘Match’,否则显示‘Nomatch’。

在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。

再代码段比较字符串string1和string2,通过比较判断是否相同。

若相同则显示‘Match’,否则显示‘Nomatch’。

2.程序代码(比较两字符串):

;PROGRAMTITLEGOESHERE--Comparestring

;**************************************************************************

datareasegment;definedatasegment

string1db'Movethecursorbackward.'

string2db'Movethecursorbackward.'

;

mess1db'Match.',13,10,'$'

mess2db'Nomatch!

',13,10,'$'

datareaends

;**************************************************************************

prognamsegment;definecodesegment

;--------------------------------------------------------------------------

mainprocfar

assumecs:

prognam,ds:

datarea,es:

datarea

start:

;startingexecutionaddress

;setupstackforreturn

pushds;saveolddatasegment

subax,ax;putzeroinAX

pushax;saveitonstack

;setDSregistertocurrentdatasegment

movax,datarea;datareasegmentaddr

movds,ax;intoDSregister

moves,ax;intoESregister

;MAINPARTOFPROGRAMGOESHERE

leasi,string1

leadi,string2

cld

movcx,25

repzcmpsb

jzmatch

leadx,mess2

jmpshortdisp

match:

leadx,mess1

disp:

movah,09

int21h

ret;returntoDOS

mainendp;endofmainpartofprogram

;-------------------------------------------------------------------------

prognamends;endofcodesegment

;*************************************************************************

endstart;endassembly

3.截图:

该程序是用来判断两字符串string1和string2是否相同,相同则显示match。

实验二用DEBUG编程:

使用堆栈段将AX和BX的内容进行交换等

1.程序说明:

(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中的内容是什么。

2.程序代码:

MOVAX,BX

MOVAX,0304H

MOVAX,[0304H]

MOVAX,[BX]

MOVAX,0001[BX]

MOVAX,[BX][SI]

MOVAX,0001[BX][SI]

HLT

三、实验要求:

1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。

2、本实验只要求在DEBUG调试程序状态下进行,包括汇编程序、调试程序和执行程序。

四、实验报告:

1、程序说明。

说明程序的功能、结构。

2、调试说明。

包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

3、写出源程序清单和执行结果。

3.截图:

先使用-r设置sp,ax,bx,在使用-a输入指令然后再-t单步调试

刚开始ax3000,bx5000debug调试后ax,5000bx3000

 

首先用-r设置bx,si然后再用-e将a,b,c,d,e分配到指定的内存中,-a输入指令最后-t单步调试

执行单步调试后ax的值一直变化从000E,0B0A,0C0B,0D0C,0E0D

 

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

1.程序说明:

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

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

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

程序流程框图为:

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

2.调试及截图:

第一个程序进入debug先用-u指令查看程序代码然后-d查看内存的情况再执行-g讲程序执行完在用-d查看内存

第二个程序进入debug后先用-u查看程序然后-g运行到指令repmovsd之前再用–d查看内存的内容

-g前

-g后

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

1.程序说明:

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

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

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

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

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

2.程序代码:

TITLESHIYAN

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAH,01H

INT21H

CMPAL,61H

JLSTART

SUBAL,20H

MOVDL,AL

MOVAH,02H

INT21H

CODEENDS

ENDSTART

2.截图:

gsm

实验五循环程序设计

1.程序说明:

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

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

若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。

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

1-9字符,则显示之。

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

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

2.程序代码:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAL,3EH

PUSHAX

MOVDL,AL

MOVCL,4

SHRDL,CL

CMPDL,9

JBENEXT1

ADDDL,7

NEXT1:

ADDDL,30H

MOVAH,2

INT21H

POPAX

MOVDL,AL

ANDDL,0FH

CMPDL,9

JBENEXT2

ADDDL,7

NEXT2:

ADDDL,30H

MOVAH,2

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3.截图:

4.程序代码:

codesegment

assumecs:

code

start:

movah,1

int21h

cmpal,0dh

jzdone

cmpal,'0'

jbnext

cmpal,'9'

jacharup

movdl,al

movah,2

int21h

jmpstart

charup:

cmpal,41h

jbnext

cmpal,5ah

jachrdn

dispc:

movdl,'c'

movah,2

int21h

next:

jmpstart

chrdn:

cmpal,61h

jbnext

cmpal,7ah

janext

jmpdispc

done:

movah,4ch

int21h

codeends

endstart

5.截图:

实验六分支程序设计

1.程序说明:

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

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

若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。

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

1-9字符,则显示之。

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

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

2.程序代码:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAL,3EH

PUSHAX

MOVDL,AL

MOVCL,4

SHRDL,CL

CMPDL,9

JBENEXT1

ADDDL,7

NEXT1:

ADDDL,30H

MOVAH,2

INT21H

POPAX

MOVDL,AL

ANDDL,0FH

CMPDL,9

JBENEXT2

ADDDL,7

NEXT2:

ADDDL,30H

MOVAH,2

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3.截图:

可以对ax的值进行修改为00ad

4.程序代码

codesegment

assumecs:

code

start:

movah,1

int21h

cmpal,0dh

jzdone

cmpal,'0'

jbnext

cmpal,'9'

jacharup

movdl,al

movah,2

int21h

jmpstart

charup:

cmpal,41h

jbnext

cmpal,5ah

jachrdn

dispc:

movdl,'c'

movah,2

int21h

next:

jmpstart

chrdn:

cmpal,61h

jbnext

cmpal,7ah

janext

jmpdispc

done:

movah,4ch

int21h

codeends

endstart

5.截图:

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

1.程序说明:

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

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

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

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

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

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

2.程序框图:

3.程序代码:

datasegment

gradedb72,69,83,90,75,80,87,99,63,100

adb'<60renshu','$'

bdb0ah,0dh,'60~70renshu:

','$'

cdb0ah,0dh,'70~80renshu:

','$'

ddb0ah,0dh,'80~90renshu:

','$'

edb0ah,0dh,'90~100renshu:

','$'

fdb0ah,0dh,'100renshu:

','$'

countdb10

dataends

stackssegment

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks

mainprocfar

start:

movax,data

movds,ax

xorax,ax

xorbx,bx

xorcx,cx

xordh,dh

callcountgrade

calloutput

movah,4ch

int21h

mainendp

countgradeprocnear

movdi,0

io:

cmpgrade[di],60

jbl1

cmpgrade[di],70

jbl2

cmpgrade[di],80

jbl3

cmpgrade[di],90

jbl4

cmpgrade[di],100

jbl5

incal

jmpcontinue

l1:

incbh

jmpcontinue

l2:

incbl

jmpcontinue

l3:

incch

jmpcontinue

l4:

inccl

jmpcontinue

l5:

incdh

jmpcontinue

continue:

incdi

deccount

jnzio

ret

countgradeendp

outputprocnear

movah,0

pushax

pushdx

pushcx

pushbx

leadx,a;分数小于60的人数

movah,9

int21h

popbx

movdl,bh

adddl,30h

movah,2

int21h

leadx,b;分数60至69的人数

movah,9

int21h

movdl,bl

adddl,30h

movah,2

int21h

leadx,c;分数70至79的人数

movah,9

int21h

popbx

movdl,bh

adddl,30h

movah,2

int21h

leadx,d;分数80至89的人数

movah,9

int21h

movdl,bl

adddl,30h

movah,2

int21h

leadx,e;分数90至99的人数

movah,9

int21h

popbx

movdl,bh

adddl,30h

movah,2

int21h

leadx,f;分数100的人数

movah,9

int21h

popbx

movdl,bl

adddl,30h

movah,2

int21h

ret

outputendp

codeends

endstart

4.截图:

实验总结:

汇编语言的上机实验主要是在DOS环境下完成的,用link编译链接,之后运行,还有Debug来调试,总体来说实验的操作步骤都差不多,link后执行exe文件,最后看实验的结果了。

通过这几次汇编语言的上机实验,我知道要好好学好这门能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

特别是那些存储速度很快的寄存器以及寻址等等,我发现它们的作用很大,这样只有利用好这门语言才能加强我的专业技能,学会计算机的各种指令。

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

当前位置:首页 > 法律文书 > 调解书

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

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