合工大汇编语言实验报告解析.docx

上传人:b****2 文档编号:17290279 上传时间:2023-07-23 格式:DOCX 页数:27 大小:410.12KB
下载 相关 举报
合工大汇编语言实验报告解析.docx_第1页
第1页 / 共27页
合工大汇编语言实验报告解析.docx_第2页
第2页 / 共27页
合工大汇编语言实验报告解析.docx_第3页
第3页 / 共27页
合工大汇编语言实验报告解析.docx_第4页
第4页 / 共27页
合工大汇编语言实验报告解析.docx_第5页
第5页 / 共27页
合工大汇编语言实验报告解析.docx_第6页
第6页 / 共27页
合工大汇编语言实验报告解析.docx_第7页
第7页 / 共27页
合工大汇编语言实验报告解析.docx_第8页
第8页 / 共27页
合工大汇编语言实验报告解析.docx_第9页
第9页 / 共27页
合工大汇编语言实验报告解析.docx_第10页
第10页 / 共27页
合工大汇编语言实验报告解析.docx_第11页
第11页 / 共27页
合工大汇编语言实验报告解析.docx_第12页
第12页 / 共27页
合工大汇编语言实验报告解析.docx_第13页
第13页 / 共27页
合工大汇编语言实验报告解析.docx_第14页
第14页 / 共27页
合工大汇编语言实验报告解析.docx_第15页
第15页 / 共27页
合工大汇编语言实验报告解析.docx_第16页
第16页 / 共27页
合工大汇编语言实验报告解析.docx_第17页
第17页 / 共27页
合工大汇编语言实验报告解析.docx_第18页
第18页 / 共27页
合工大汇编语言实验报告解析.docx_第19页
第19页 / 共27页
合工大汇编语言实验报告解析.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

合工大汇编语言实验报告解析.docx

《合工大汇编语言实验报告解析.docx》由会员分享,可在线阅读,更多相关《合工大汇编语言实验报告解析.docx(27页珍藏版)》请在冰点文库上搜索。

合工大汇编语言实验报告解析.docx

合工大汇编语言实验报告解析

合肥工业大学

计算机与信息学院

实验报告

课程:

汇编语言程序设计

专业班级:

学号:

姓名:

实验一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)=0000H,(BX)=0000H,(SI)=0000H,

(DI)=0000H,(CS)=13F5H,(IP)=0100H。

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寄存器随着变化,注意观察。

(六)实验结果分析

1、程序运行结果:

(AX)=1110H,(BX)=1111H

DS:

0208H四字节单元的内容:

11111110H

2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。

(参考下列程序流程图)

 

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

 

五.实验体会

通过这次实验的联系,我熟悉了一些DEBUG程序中的命令,并且学会在DEBUG下调试运行汇编语言源程序掌握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)codesegment

assumecs:

code,ds:

code

xdw02d0h

ydw1h

zdw0ffffh

vdw02d0h

SUM1dw?

SUM2dw?

sumdw?

start:

movax,code

movds,ax

movax,x

imuly

movcx,ax

movbx,dx

movax,z

cwd

addcx,ax

adcbx,dx

subcx,2d0h

sbbbx,0

movax,v

cwd

subax,cx

sbbdx,bx

idivx

movSUM1,ax

movSUM2,dx

movah,4ch

int21h

codeends

endstart

(2)

codesegment

assumecs:

code,ds:

code

strdb10dup(3ah,2dh,60h,5ah,4ch)

start:

movax,code

movds,ax

movbx,0h

movsi,bx

movcx,32h

movax,0h

next:

addal,str[si]

adcah,0h

incsi

loopnext

movbl,32h

idivbl

movdl,al

movdh,ah

movah,4ch

int21h

codeends

endstart

(3)

codesegment

assumecs:

code,ds:

code

strdb50,?

50dup(?

);

crdb0dh

start:

movax,code

movds,ax

movcx,32h

movdl,0

movsi,2

next:

movah,1

int21h

cmpal,cr;

jzet

movstr[si],al

incsi

incdl

loopnext;

et:

movstr+1,dl

movstr[si+1],'$'

movax,segstr+2

movds,ax

movdx,offsetstr+2

movah,9

int21

movah,4ch

int21h

codeends

endstart

 

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

1.

2.

3.

五.实验体会

通过这次实验的训练,我基本掌握了顺序和循环程序结构和设计方法,并且可以自己动手在debug下运用顺序和循环的程序结构自己设计汇编的代码,另外这节课我还学会了在在屏幕上输入和输出字符串,非常的有趣,顺便我又熟悉了一遍在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有符号数内存数)。

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

 

三.实验过程和程序

实验一

地址表:

jmpoutput

func6:

leadx,msg6

jmpoutput

func7:

leadx,msg7

jmpoutput

func8:

leadx,msg8

jmpoutput

output:

movah,9

int21h

movah,4ch

int21h

csegends

endstart

jcjump

movbx,0

again:

shrnum,1

jmpnext

jump:

jmpaddrtbl[bx]

next:

addbx,2

jmpagain

func1:

leadx,msg1

jmpoutput

func2:

leadx,msg2

jmpoutput

func3:

leadx,msg3

jmpoutput

func4:

leadx,msg4

jmpoutput

func5:

leadx,msg5

dsegsegment

msg1db'TheoneBitis1','$'

msg2db'ThetwoBitis1','$'

msg3db'ThethreeBitis1','$'

msg4db'ThefourBitis1','$'

msg5db'ThefiveBitis1','$'

msg6db'ThesixBitis1','$'

msg7db'ThesevenBitis1','$'

msg8db'TheeightBitis1','$'

numdb1

addrtbldwfunc1,func2,func3,func4,func5,func6,func7,func8

dsegends

csegsegment

assumeds:

dseg,cs:

cseg

start:

movax,dseg

movds,ax

 

转移表:

datasegment

s1db'TheoneBitis1','$'

s2db'ThetwoBitis1','$'

s3db'ThethreeBitis1','$'

s4db'ThefourBitis1','$'

s5db'ThefiveBitis1','$'

s6db'ThesixBitis1','$'

s7db'ThesevenBitis1','$'

s8db'TheeightBitis1','$'

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movbl,80h

movcx,8

movsi,0

next:

rorbl,1;循环右移

jcskit;若该位为1,则转移

jmpskit1

skit:

movdx,si;si*3

shldx,1

adddx,si

adddx,offsetjmptable

jmpdx

skit1:

incsi

loopnext

jmptable:

;转移

jmpl1

jmpl2

jmpl3

jmpl4

jmpl5

jmpl6

jmpl7

jmpl8

;org$+80h

l1:

leadx,s1

jmpet

l2:

leadx,s2

jmpet

l3:

leadx,s3

jmpet

l4:

leadx,s4

jmpet

l5:

leadx,s5

jmpet

l6:

leadx,s6

jmpet

l7:

leadx,s7

jmpet

l8:

leadx,s8

et:

movah,9

int21h

movah,4ch

int21h

codeends

endstart

实验2

dsegsegment

xdw2

ydw3

wlabelword

zdd?

dsegends

ssegsegmentstack

dw512dup(?

ssegends

csegsegment

assumeds:

dseg,cs:

cseg,ss:

sseg

start:

movax,dseg

movds,ax

subsp,4

pushx

pushy

callproc1

popw

popw+2

movah,4h

int21h

 

proc1proc

pushbp

movbp,sp

pushax

pushbx

pushcx

pushdx

movax,wordptr[bp+6]

imulwordptr[bp+4]

movbx,ax

movcx,dx

movax,wordptr[bp+6]

cwd

addbx,ax

adccx,dx

movax,wordptr[bp+4]

cwd

subbx,ax

sbbcx,dx

mov[bp+10],cx

mov[bp+8],bx

popdx

popcx

popbx

popax

popbp

ret4

proc1endp

csegends

endstart

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

 

地址表:

 

转移表

实验2

五.实验体会

通过这次实验的练习,我掌握分支和子程序结构和设计方法,特别是地址表和转移表的运用,已经可以熟练的运用转移表和地址表进行分支结构的设计,实验二又让我对子程序参数的调用有了深刻的体会,知道了在运用堆栈进行参数传递时需要注意的要点,另外这次实验又让我再一次熟悉一遍在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

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

一.实验目的

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

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

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

二.实验内容

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

MIN3x,y,z,min

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

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

 

三.实验过程和程序

实验1

min3macrox,y,z,min

localskip,done

movax,x

cmpax,y

jleskip1

movax,y

skip1:

cmpax,z

jledone

movax,z

done:

movmin,ax

endm

dsegsegment

mindw"?

"

dsegends

csegsegment

assumeds:

dseg,cs:

cseg

start:

movax,dseg

movds,ax

min32,3,4,min

movah,4ch

int21h

csegends

endstart

实验2

INTNOEQU1CH

USEINT=1

DATASEGMENT

OLDISRDW?

?

TIMERDB100

COUNTERDW59

COUNTDW0

ISDONEDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,0

MOVES,AX

;PROTECT

IFUSEINT

MOVAL,INTNO

MOVAH,35H

INT21H

;ES:

BX

MOVOLDISR[0],BX

MOVAX,ES

MOVOLDISR[2],AX

ELSE

CLI

MOVAX,ES:

[INTNO*4]

MOVOLDISR[0],AX

MOVAX,ES:

[INTNO*4+2]

MOVOLDISR[2],AX

STI

ENDIF

;SETNEWISR

IFUSEINT

PUSHDS

MOVAX,SEGISR

MOVDS,AX

MOVDX,OFFSETISR

MOVAL,INTNO

MOVAH,25H

INT21H

POPDS

ELSE

CLI

MOVWORDPTRES:

[INTNO*4],OFFSETISR

MOVWORDPTRES:

[INTNO*4+2],SEGISR

STI

ENDIF

;WAITHERE

WAITHERE:

CMPISDONE,1

JNZWAITHERE

EXIT:

;RESTORE

IFUSEINT

PUSHDS

MOVDX,OLDISR[0]

MOVAX,OLDISR[2]

MOVDS,AX

MOVAL,INTNO

MOVAH,25H

INT21H

POPDS

ELSE

CLI

MOVAX,OLDISR[0]

MOVES:

[INTNO*4],AX

MOVAX,OLDISR[2]

MOVES:

[INTNO*4+2],AX

STI

ENDIF

MOVAX,4C00H

INT21H

ISRPROCFAR

PUSHDX

PUSHAX

MOVAX,DATA

MOVDS,AX

STI;便于中断嵌套

;COUNTHERE

INCTIMER

AGAIN:

CMPTIMER,1000/55;18

JBDONE

MOVTIMER,0

;carriage

MOVAH,2

MOVDL,13

INT21H

;printtime

MOVAX,COUNT

MOVDL,10

DIVDL

MOVDH,AH

MOVDL,AL

MOVAH,2

ADDDL,30H

INT21H

MOVDL,DH

ADDDL,30H

INT21H

INCCOUNT

DECCOUNTER

JGEDONE

MOVISDONE,1

DONE:

PUSHF

CALLDWORDPTROLDISR

CLI

POPAX

POPDX

IRET;中断返回

ISRENDP

CODEENDS

ENDSTART

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

实验1

实验2

五.实验体会

这次实验的练习,使我对汇编语言中宏程序有了一定的了解,并且自己动手编写了宏程序,另外我还掌握了中断服务子程序的编写,感觉非常的复杂,很长时间找不到头绪,最后请教了老师,在老师的指导下编写出了实验的题目,虽然花费了一定的时间,但是我觉得还是非常值得的。

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2