汇编实验报告.docx

上传人:b****7 文档编号:23861494 上传时间:2023-05-21 格式:DOCX 页数:31 大小:766.58KB
下载 相关 举报
汇编实验报告.docx_第1页
第1页 / 共31页
汇编实验报告.docx_第2页
第2页 / 共31页
汇编实验报告.docx_第3页
第3页 / 共31页
汇编实验报告.docx_第4页
第4页 / 共31页
汇编实验报告.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

汇编实验报告.docx

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

汇编实验报告.docx

汇编实验报告

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

一、程序说明

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

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

二、调试说明

1.在DOS提示符下,进入MASM目录。

2.在MASM目录下启动EDIT编辑程序,输入源程序。

3.用汇编程序MASM对源文件汇编产生目标文件OBJ。

4.用连接程序产生执行文件EXE。

5.用Debug进行调试。

用-g命令来用运行程序,用-u命令来显示程序,用-d命令来查看数据段的情况,用-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存器和修改寄存器的值,-q命令用来退出debug程序。

在这些命令的后面加上地址,可以将命令执行到相应的地方。

在debug中用-g来运行程序:

用-u来显示程序:

-g将端点设置在程序的主要部分以前:

-d根据其中指示的ds寄存器内容查看数据段情况:

-e命令修改数据区的字符串:

-q命令退出:

3、源程序

DSEGSEGMENT

STRING1DB'movethecursorbackword'

STRING2DB'movethecursorbackword'

MESS1DB'MATCH!

',0DH,0AH,'$'

MESS2DB'NOMatch!

',13,10,'$'

DSEGENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DSEG,ES:

DSEG

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX

MOVES,AX

LEASI,STRING1

LEADI,STRING2

CLD

MOVCX,24

REPZCMPSB

JZMATCH

LEADX,MESS2

JMPSHORTDISP

MATCH:

LEADX,MESS1

DISP:

MOVAH,9

INT21H

RET

MAINENDP

CSEGENDS

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

程序清单如下:

MOVAX,BX

MOVAX,0304H

MOVAX,[0304H]

MOVAX,[BX]

MOVAX,0001[BX]

MOVAX,[BX][SI]

MOVAX,0001[BX][SI]

HLT

二、调试说明

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

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

 

第二部分先将基本的程序结构编好,

进入debug程序,用-u指令查看一下程序:

再用-a指令从145C:

000B后面输入已给出的程序,然后用-u0指令查看程序:

这时可以先用-t指令将程序逐步执行到指令movax,bx之前,然后用-e300指令安要求修改相关的内存内容,再用-d300指令查看一下修改后的内存内容,结果如下:

然后再用-t指令逐步执行程序,观察每步指令执行后,ax中的内容,结果如下:

可以看出,在执行完指令MOVAX,[0304H]后,ax中的内容为AX=610E,在执行完指令MOVAX,[BX]后,ax中的内容为AX=0B0A,在执行完指令MOVAX,0001[BX]后,ax中的内容为AX=0C0B,在执行完指令MOVAX,[BX][SI]后,ax中的内容为AX=0D0C,在执行完指令MOVAX,0001[BX][SI]后,ax中的内容为AX=0E0D。

做完所有操作后,程序最终执行结果:

最后AX的内容是0E0DH。

三、源程序

第一部分:

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

第二部分:

DATASSEGMENT

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

MOVBX,0300H

MOVSI,0002H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

 

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

1、程序说明

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

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

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

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

2、调试说明

第一个程序先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试。

在进入debug后,先用-u指令查看一下程序:

根据ds寄存器内容,用-d指令查看数据段的情况:

用-g执行程序,再用-d指令查看数据段内容是否清零:

 

第二个程序先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试。

进入debug后先用-u查看程序:

–d查看内存的内容:

然后-g运行到指令repmovsb之前再用,–d查看内存的内容:

3、源程序

1、存储器快清零

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

2、内存块移动

datasegment

sourcedb256dup(055h)

targetdb256dup(0aah)

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

moves,ax

movsi,offsetsource

movdi,offsettarget

movcx,256

repmovsb

jmp$

codeends

endstart

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

一、程序说明

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

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

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

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

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

二、调试说明

将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,最后运行程序:

3、源程序

DATASSEGMENT

string1db'inputerror!

',0ah,0dh,'$'

string2db'$'

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

L0:

MOVAH,1

INT21H

CMPAL,0DH

JZEXIT

CMPAL,'a'

JAEL1

JBL3

L1:

cmpal,'z'

jnaL2

jaL3

L2:

subal,20h

movcl,al

leadx,string2

movah,9

int21h

movdl,0

movdl,cl

movah,2

int21h

movdl,0ah

movah,2

int21h

movdl,0dh

movah,2

int21h

jmpL0

L3:

leadx,string1

movah,9

int21h

jmpL0

exit:

MOVAH,4CH

int21H

codesends

endstart

 

实验五循环程序实验

1、程序说明

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

2、调试说明

先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试。

 

3、源程序

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

 

实验六分支程序实验

1、程序说明

判别键盘上输入的字符:

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

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

若是0-9字符,则显示之。

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

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

2、调试说明

先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后运行程序。

 

3、源程序

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

 

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

1、程序说明

设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。

试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。

2、调试说明

 

3、源程序

datasegment

gradedb76,69,84,90,73,88,99,63,100,80

string1db'<60num:

','$'

string2db0ah,'60~70num:

','$'

string3db0ah,'70~80num:

','$'

string4db0ah,'80~90num:

','$'

string5db0ah,'90~100num:

','$'

string6db0ah,'100num:

','$'

countdb10

dataends

codesegment

assumecs:

code,ds:

data,ss:

stack

mainprocfar

start:

movax,data

movds,ax

xorax,ax

xorbx,bx

xorcx,cx

xordh,dh

calldivide

calloutput

movah,4ch

int21h

mainendp

divideprocnear

movdi,0

compare:

cmpgrade[di],60

jbcase1

cmpgrade[di],70

jbcase2

cmpgrade[di],80

jbcase3

cmpgrade[di],90

jbcase4

cmpgrade[di],100

jbcase5

inccl

jmpcontinue

case1:

incah

jmpcontinue

case2:

incal

jmpcontinue

case3:

incbh

jmpcontinue

case4:

incbl

jmpcontinue

case5:

incch

jmpcontinue

continue:

incdi

deccount

jnzcompare

ret

divideendp

outputprocnear

pushcx

pushbx

pushax

leadx,string1

movah,09h

int21h

popbx

movdl,bh

adddl,30h

movah,02h

int21h

leadx,string2

movah,09h

int21h

movdl,bl

adddl,30h

movah,02h

int21h

leadx,string3

movah,09h

int21h

popbx

movdl,bh

adddl,30h

movah,02h

int21h

leadx,string4

movah,09h

int21h

movdl,bl

adddl,30h

movah,02h

int21h

leadx,string5

movah,09h

int21h

popbx

movdl,bh

adddl,30h

movah,02h

int21h

leadx,string6

movah,09h

int21h

movdl,bl

adddl,30h

movah,02h

int21h

movah,4ch

int21h

outputendp

codeends

endstart

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

当前位置:首页 > 求职职场 > 社交礼仪

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

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