汇编语言实验报告 2914讲解.docx

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

汇编语言实验报告 2914讲解.docx

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

汇编语言实验报告 2914讲解.docx

汇编语言实验报告2914讲解

合肥工业大学

计算机与信息学院

实验报告

课程:

汇编语言程序设计

专业班级:

信息安全11-1

学号:

20112914

姓名:

王佳淼

实验一Debug程序的使用

一.实验目的

1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二.实验内容

1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:

0200H和DS:

0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:

0200H单元和DS:

0204H单元中的数据相加,并将运算结果存放在DS:

0208H单元中。

要求:

本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三.实验过程和程序

1、启动DOS操作系统

2、运行DEBUG.COM程序(若当前盘为C)

C:

>DEBUG↙

–;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令)

3、用“A”命令编辑和汇编源程序

–A↙

186E:

0100MOVAX,[0200]↙

186E:

0103MOVBX,[0202]↙

186E:

0107ADDAX,[0204]↙

186E:

010BADCBX,[0206]↙

186E:

010FMOV[0208],AX↙

186E:

0112MOV[020A],BX↙

186E:

0116↙

4、用“U”命令反汇编验证源程序

–UCS:

0100↙

186E:

0100A10002MOVAX,[0200]

186E:

01038B1E0202MOVBX,[0202]

186E:

010703060402ADDAX,[0204]

186E:

010B131E0602ADCBX,[0206]

186E:

010FA30802MOV[0208],AX

186E:

0112891E0A02MOV[020A],BX

186E:

0116

注意:

●检查源程序是否有错误,若有则返回到第3步用“A地址”命令进行修改,直到程序无错误。

●DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。

●在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。

●在DEBUG下,大小写不敏感。

5、程序未执行前,用“R”命令观察,相关寄存器的内容。

–R↙

如:

(AX)=0000,(BX)=0000,(SI)=0000,

(DI)=0000,(CS)=1376,(IP)=0100。

6、在程序未执行前,用“D”命令观察DS:

0200H,DS:

0204H、DS:

0208H单元的内容

–D20020B↙

7、用“G”命令运行源程序

–G=1000116↙

8、再用“D”命令观察DS:

0200H~DS:

020BH字节单元中的内容

–D20020B↙

9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。

注意:

●D命令显示内存数据,注意观察多字节数据在内存中的存放方式。

●指令执行的时候,IP寄存器随着变化,注意观察。

 

四.实验结果(包括必要的截图)

利用寄存器的方法:

 

 

五.实验体会

能使用debug在dos界面下编译代码。

能熟练使用各种debug命令,例如-u、-g、-d、-r等命令。

熟练掌握8086/8088的寻址方式及多字节数据的处理方法

实验二汇编语言程序设计(顺序、循环)

一.实验目的

1、掌握顺序和循环程序结构和设计方法;

2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

二.实验内容

1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。

试编写汇编语言程序完成以下功能:

①计算表达式值(V–(X*Y+Z-720))/X;

②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

2、求一个班50名学生成绩的平均值(附加题:

最大值和最小值,并将结果显示出来)

3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:

查找中间是否有‘asm’子串。

如果有,输出‘Yes’;否则,输出‘No’)。

三.实验过程和程序

1、计算表达式并存入内存

Stacksegment

dw512dup(?

Stackends

Datasegment

xdw100

ydw100

zdw100

vdw100

sum1dw?

sum2dw?

Dataends

Codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movax,x;在代码段填入指令序列

movbx,y

imulbx

addax,z

adcdx,0

subax,720

sbbdx,0

movcx,dx

movbx,ax

movax,v

cwd

subax,bx

sbbdx,cx

movbx,x

idivbx

movsum1,ax

movsum2,dx

movah,4ch

int21h

Codeends

endstart

2、求出平均值、最大值、最小值

Stacksegment

dw512dup(?

Stackends

Datasegment

studb25dup(35,37)

s1db'themaxis:

$'

s2db'theminis:

$'

s3db'theavgis:

$'

displaydb5dup('$')

Dataends

Codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

;在代码段填入指令序列

moval,0

movsi,0

movcl,50

movbh,0;max

movbl,100;min

again:

addal,stu[si]

adcah,0

cmpbh,stu[si]

jaL1

movbh,stu[si]

L1:

cmpbl,stu[si]

jbL2

movbl,stu[si]

L2:

incsi

loopagain

movcl,50

divcl;avg在al中

movcl,ah;保存ah

leadx,s3

movah,09h

int21h

movah,cl

callDISP

leadx,s2;最小值输出

movah,09h

int21h

moval,bl

callDISP

movah,02h;输出回车换行

movdl,0ah

int21h

movah,0dh

int21h

leadx,s1;最大值输出

movah,09h

int21h

moval,bh

callDISP

movah,4ch

int21h

DISPproc

pushbx

cmpal,100

jzmf

cmpal,10

jbgw

movah,0

movbl,10

divbl

addal,30h

movdisplay[0],al

addah,30h

movdisplay[1],ah

done:

leadx,display

movah,09h

int21h

movah,02h;输出回车换行

movdl,0ah

int21h

movah,0dh

int21h

popbx

ret

mf:

movdisplay[0],31h

movdisplay[1],30h

movdisplay[2],30h

jmpdone

gw:

addah,30h

movdisplay[0],ah

jmpdone

DISPENDP

Codeends

endstart

3、读入字符串

Codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movah,0ah

leadx,x+2

int21h

movah,02h;输出回车换行

movdl,0ah

int21h

movah,0dh

int21h

movdx,offsetx+2

movah,09h

int21h

leasi,x

leadi,y

movbx,di

movah,48

again:

movcx,3

repzcmpsb

jzfound

incsi

movdi,bx

decah

jnzagain

movah,02h;输出回车换行

movdl,0ah

int21h

movah,0dh

int21h

leadx,s2

jmpdone

found:

leadx,s1

done:

movah,09h

int21h

movah,4ch

int21h

Codeends

endstart

四.实验结果(包括必要的截图)

2.1

2.2

2.3

 

五.实验体会

通过此次试验,我掌握顺序和循环程序结构和设计方法,能在PC上对循环结构和顺序结构进行编程。

熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

实验三汇编语言子程序设计(分支、子程序)

一.实验目的

1、掌握分支和子程序结构和设计方法;

2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

3、通过汇编语言了解高级语言的参数传递等知识。

二.实验内容

1、1.BL中的只有一位为1。

编写程序测试,并输出提示信息“TheXBitis1”,要求:

地址表和转移表。

2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

 

三.实验过程和程序

1、1.BL中的只有一位为1。

编写程序测试,并输出提示信息“TheXBitis1”,要求:

地址表和转移表。

;地址表法

Datasegment

S1DB'The1Bitis1$'

S2DB'The2Bitis1$'

S3DB'The3Bitis1$'

S4DB'The4Bitis1$'

S5DB'The5Bitis1$'

S6DB'The6Bitis1$'

S7DB'The7Bitis1$'

S8DB'The8Bitis1$'

addrtbdwL0,L1,L2,L3,L4,L5,L6,L7

Dataends

Codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movbl,02h

moval,0ffh

again:

incal

shrbl,1

jncagain

shlal,1;al乘以2

movbl,al

movbh,0

jmpaddrtb[bx]

movah,4ch

int21h

 

L0:

leadx,S1

jmpoutput

L1:

leadx,S2

jmpoutput

L2:

leadx,S3

jmpoutput

L3:

leadx,S4

jmpoutput

L4:

leadx,S5

jmpoutput

L5:

leadx,S6

jmpoutput

L6:

leadx,S7

jmpoutput

L7:

leadx,S8

jmpoutput

output:

movah,09h

int21h

movah,4ch

int21h

Codeends

endstart

 

;转移表法

Datasegment

S1DB'The1Bitis1$'

S2DB'The2Bitis1$'

S3DB'The3Bitis1$'

S4DB'The4Bitis1$'

S5DB'The5Bitis1$'

S6DB'The6Bitis1$'

S7DB'The7Bitis1$'

S8DB'The8Bitis1$'

Dataends

Codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movbl,02h

moval,-1

again:

incal

shrbl,1

jncagain

movah,0

movcx,ax

shlax,1

addax,cx;al乘以3

leasi,jmptb

addsi,ax

jmpsi

jmptb:

jmpL0

jmpL1

jmpL2

jmpL3

jmpL4

jmpL5

jmpL6

jmpL7

org$+80h

L0:

leadx,S1

jmpoutput

L1:

leadx,S2

jmpoutput

L2:

leadx,S3

jmpoutput

L3:

leadx,S4

jmpoutput

L4:

leadx,S5

jmpoutput

L5:

leadx,S6

jmpoutput

L6:

leadx,S7

jmpoutput

L7:

leadx,S8

jmpoutput

output:

movah,09h

int21h

movah,4ch

int21h

Codeends

endstart

2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

;堆栈传递

Stacksegment

dw512dup(?

Stackends

Datasegment

xdw100

ydw100

zdw100

Dataends

Codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

subsp,2

movax,x

pushax

movax,y

pushax

callP1

popz

movax,z

movah,4ch

int21h

P1procnear

pushbp

movbp,sp

pushax

pushbx

pushcx

pushdx

movax,6[bp];x的值

movbx,4[bp];y的值

imulbx

movcx,dx

movbx,ax

movax,6[bp]

cwd

addbx,ax

adccx,dx

movax,4[bp]

cwd

subbx,ax

sbbcx,dx

mov8[bp],bx

popdx

popcx

popbx

popax

popbp

ret4

P1endp

Codeends

endstart

;寄存器传递

Stacksegment

dw512dup(?

Stackends

Datasegment

xdw100

ydw100

zdw?

Dataends

Codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movax,x

movbx,y

callP1

movz,bx;bx做出口参数

movax,z;方便查看输出是否正确

movah,4ch

int21h

P1procnear

pushax

pushcx

imulbx

movcx,dx

movbx,ax

movax,x

cwd

addbx,ax

adccx,dx

movax,y

cwd

subbx,ax

sbbcx,dx

popcx

popax

ret

P1endp

Codeends

endstart

四.实验结果(包括必要的截图)

寄存器方式

堆栈方式

 

五.实验体会

实验四汇编语言高级编程专题

一.实验目的

1、汇编语言宏程序设计;

2、掌握中断服务子程序的编写。

3、汇编语言与高级语言的混编。

二.实验内容

1、编写一个宏,求三个数的最小数,原型为:

MIN3x,y,z,min

2、挂接1CH中断,正计时60秒后退出。

要求屏幕显示0-59的秒数。

 

三.实验过程和程序

1、编写一个宏,求三个数的最小数,原型为:

MIN3x,y,z,min

Stacksegment

dw512dup(?

Stackends

Datasegment

xdb21

ydb33

zdb9

mindb?

Dataends

Codesegment

assumecs:

code,ds:

data,ss:

stack

MIN3macrox,y,z,min;宏的定义

moval,x

cmpal,y

jbhuan

moval,y

huan:

cmpal,z

jbdone

moval,z

done:

movmin,al

addal,30h

movdl,al

movah,2;定义输出,方便观察结果

int21h

endm

start:

movax,data

movds,ax

MIN3x,y,z,min

movah,4ch

int21h

Codeends

endstart

四.实验结果(包括必要的截图)

宏定义

计数器

 

 

五.实验体会

 

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

当前位置:首页 > 农林牧渔 > 林学

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

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