汇编语言程序设计实验指导书.docx

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

汇编语言程序设计实验指导书.docx

《汇编语言程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验指导书.docx(62页珍藏版)》请在冰点文库上搜索。

汇编语言程序设计实验指导书.docx

汇编语言程序设计实验指导书

实验一DEBUG的使用

实验目的:

1.学习使用DEBUG程序的各种命令。

2.掌握8088/86指令系统---算数指令。

3.掌握用DEBUG调试自编程序的方法。

4.掌握8088/8086CPU寄存器的用途和存储器组织及它们之间的关系。

5.掌握内存操作数及寻址方法。

6.掌握汇编语言伪操作:

BYTEPTR,WORDPTR。

内容及步骤:

一、DEBUG命令使用:

1、敲DEBUG进入DEBUG环境,显示提示符'_'。

2、用命令D10010F观察内存中的16进制码及屏幕右边的ASCII字符。

3、用命令E100303132……3F将30H~3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?

4、用命令F10010F'A'将'A'的ASCII码填入内存,用D命令查看结果。

5、用命令F11011F41将41H填入内存,用D命令观察结果并比较。

6、用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

7、用R命令将AX,BX内容改写为1234H及5678H。

8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H

(2)56H,78H(3)A5,79H(4)1284H,5678H(5)A758,347FH

二、8088常用指令练习

1、传送指令

1)用A命令在内存100H处键入下列内容:

MOVAX,1234

MOVBX,5678

XCHGAX,BX

MOVAH,34

MOVAL,56

MOVCX,75AB

XCHGAX,CX

2)用U命令检查键入的程序,特别注意左边的机器码。

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。

并注意标志位有无变化。

2、加减法指令:

1)用A命令在内存200H处键入下列内容:

MOVAH,34

MOVAL,2E

ADDAL,AH

SUBAL,78

MOVCX,1234

MOVDX,5678

ADDCX,DX

SUBCX,AX

SUBCX,CX

2)用U命令检查键入的程序及对应的机器码。

3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。

思考题:

这次运行还是打入T,行不行?

如何单步运行上述小程序?

用R命令检查一下IP的内容。

注意T命令与IP的关系。

3、带进位加减法:

1)用A命令在内存300H处键入下列内容,并用U命令检查:

MOVAH,12

MOVAL,89

MOVCH,56

MOVCL,98

ADDAL,CL

ADCAH,CH

MOVDH,A7

MOVDL,58

SUBDL,7F

SBBDH,34

2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?

试修改并运行之。

4、BCD码加减法

1)内容:

MOVAL,58

ADDAL,25

DAA

2)要求:

用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。

三、内存操作数及各种寻址方式使用:

1)用A命令在内存400H处键入下列内容,并用U命令检查:

MOVAX,1234

MOV[1000],AX

MOVBX,1002

MOVBYTEPTR[BX],20

MOVDL,39

INCBX

MOV[BX],DL

DECDL

MOVSI,3

MOV[BX+SI],DL

MOV[BX+SI+1],DL

MOVWORDPTR[BX+SI+2],2846

2)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

注意:

D命令显示结果中右边的ASCII字符及双字节数存放法。

思考题:

有关指令中BYTEPTR及WORDPTR伪操作不加行不行?

试一试。

四、DEBUG下汇编运行程序方法

用A命令汇编程序,编程完成将DS:

1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS:

200A内存单元中,用DEBUG调试运行该程序,并察看运行结果。

内容:

MOVCX,0AH

MOVAL,0

MOVBX,1000

LL:

ADDAL,[BX]

INCBX

DECCX

JNZLL

MOV[BX],AL

INT3

步骤:

1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL用实际地址值代替。

2)用U命令检查键入的程序及对应的机器码。

3)用E10000102030405060708090A将1000H开始的前10个内存单元的内容修改为01,02,03,04,05……0A,用D命令查看修改结果。

4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。

5)用F2000l0A02030405……0B将1000H开始的10个内存单元的内容修改为02,03,04,05……0B。

用D命令查看修改结果。

6)用G=100全速运行上述小程序,用D1000100F查看运行结果。

思考题:

可否随意在DEBUG提示符“-”后不带参数发出命令G?

什么情况下使用命令G时,可不用“=”给出执行的首地址?

实验报告:

1、列出8088常用指令练习部分的逐条运行记录。

2、列出DEBUG下调式运行小程序的运行步骤和运行结果。

3、回答思考题。

附:

DEBUG使用:

1、打DEBUG进入DEBUG,显示提示苻'_'。

2、退出DEBUG命令:

Q

3、显示内存命令:

D起始地址结束地址

4、修改内存命令:

E起始地址,连续修改打空格键。

打回车键退出E命令。

5、检查寄存器命令:

R

标志位显示10

CFCYNC

ZFZRNZ

SFNGPL

AFACNA

OFOVNV

PFPEPO

DFDNUP

IFEIDI

6、修改寄存器命令:

R寄存器名

7、小汇编命令:

A起始地址,不输入指令打回车键退出A命令。

8、反汇编命令:

U起始地址结束地址

9、文件命名命令:

N盘号:

文件名

10、读文件命令:

L内存地址

11、写文件命令:

W内存地址

10、读扇区命令:

L内存地址盘号(0--A:

1--B:

)扇区号扇区数

11、写扇区命令:

W内存地址盘号扇区号扇区数

12、运行命令:

G=起始地址结束(断点)地址

13、单步命令:

T=起始地址运行指令数,进入子程序内部。

14、单步命令:

P=起始地址运行指令数,不进入子程序内部。

15、内存搬家命令:

M起始地址结束地址目的地址

实验二汇编语言程序结构

实验目的:

1、掌握汇编语言程序结构。

2、掌握建立、汇编、链接、调试和运行汇编程序的过程。

3、掌握伪指令:

SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。

4、了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法。

5、熟悉加法调整指令意义及其用法。

实验内容:

一、多字节加法程序。

对两个多位十进制数求和,加数和被加数分别存放在D1和D2开始的数据缓冲区中,相加结果存放在D1开始的单元中(D1和D2均为字节变量,分别存储着压缩BCD数)。

<参考程序>

DATASEGMENT

D1DB12H,34H,56H,78H

D2DB56H,27H,38H,49H,

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADI,D1

MOVCX,4

LEASI,D2

MOVBX,4

CLC

LOP:

MOVAL,[DI+BX-1]

ADCAL,[SI+BX-1]

DAA

MOV[DI+BX-1],AL

DECBX

LOOPLOP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

步骤:

1)从开始菜单/程序/附件选则c:

\命令提示符进入DOS环境。

2)敲cd\退回到根目录。

3)敲cd\masm进入masm子目录。

4)敲dir列出masm目录下文件。

5)敲edit进入全屏幕编辑环境,输入以上程序,存盘命名退出(如abc.asm)。

6)敲masmabc.asm汇编源程序,如无语法错误就会生成abc.obj形式的二进制目标代码文件,如有错误就回到全屏幕编辑环境修改错误,再重新汇编,直到汇编通过为止。

7)敲linkabc.obj链接二进制目标代码文件,生成abc.exe文件。

8)敲DEBUGabc.asm调入DEBUG和文件abc.exe,然后用U命令检查调入程序。

9)用命令G=100J(J用实际地址代替),使程序运行并停在断点J处,检查内存单元的内容是否是预期的结果。

二、把上题改造成COM文件的编程格式,汇编、链接和运行调试该程序。

三、用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同题一。

调试并做记录。

实验说明:

压缩型十进制数就是用四位二进制数表示一个十进制数位,如:

十进制数39表示为0011,1001,非压缩型十进制数即拆开型十进制数,它是用8位二进制数表示一个十进制数位,如:

十进制数39表示为0000,0011,0000,1001。

思考题:

1)若在源程序中把INT21H的'H'省去,会产生什么现象?

2)把INT21H4CH号功能改为INT20H,行不行?

实验报告:

1、列出自编程序的程序清单,并加适当注释。

2、写出汇编,连接及调试程序时产生的错误,其原因及解决办法。

3、总结EXE文件和COM文件的编程格式。

4、回答思考题。

实验三数据串传送和比较

实验目的:

通过实验掌握下列知识:

1、堆栈。

堆栈指示器SP和堆栈操作指令PUSH、POP。

2、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP。

3、数据串比较指令CMPSB及重复前缀REPZ。

4、循环指令ROL。

逻辑与指令AND和清方向位指令CLD。

5、利用汇编集成环境编辑运行自编程序的方法。

实验内容:

一、利用查表方法把DX的内容(16进制数)转换成ASCII码:

<参考程序〉

DATASEGMENT

D1DB‘0123456789ABCDEF’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES:

AX

MOVDX,6C8EH

LEABX,D1

MOVDI,2000H

MOVCX,4

LOP:

PUSHCX

MOVCL,4

ROLDX,CL

POPCX

MOVAL,DL

ANDAL,OF

XLAT

CLD

STOSB

LOOPLOP

INT20H

CODEENDS

ENDSTART

步骤:

1、进入windows桌面,点击“我的电脑”,进入C盘,找到CMASM2文件夹打开,点击CMASM.EXE进入汇编集成环境。

2、按任意键进入主菜单,选择1建立源程序文件名(不需送扩展名)。

如图3.1所示。

图3.1汇编集成环境

3、选择2进入全屏幕编辑环境,送入汇编源程序,存盘退出。

如图3.2所示。

图3.2全屏幕编辑环境

4、选择3产生EXE文件(包括汇编和链接过程),如有语法错误,返回2查找和修改错误,存盘退出,再重新产生EXE文件,直到成功为止。

如图3.3所示。

图3.3汇编和链接

5、选择5进入DEBUG环境,调式运行该程序。

图3.4DEBUG动态调试环境

6、用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)

7、用G命令将此程序运行到结束,并用D命令检查2000H处所转换的结果。

可注意屏幕右边的ASCII字符与DX是否一致。

思考题:

1、为什么不选择4直接运行该程序,而进入DEBUG运行调式该程序?

2、程序中不设附加段可不可以?

二、段寄存器概念及字符串传送指令练习:

1、用A命令键入下列程序:

MOVSI,0

MOVDI,0

MOVAX,1000

MOVDS,AX

MOVAX,1500

MOVES,AX

MOVCX,0F

CLD

REPMOVSB

INT20

2、用A命令DB伪指令在1000:

0000处键入字符串'IBM_PCCOMPUTER',并用D命检查之

3、用D命令检查0F00:

1000处内容,看是否一样。

为什么?

4、用G命令运行此程序,检查目的地址1500:

0000处内容。

并记下DS与ES值。

5、修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?

)仍和原来一样。

三、数据串搬家程序:

编程实现把字符串“Welcometolaboratory!

”从源缓冲区传送到目的缓冲区。

在DEBUG下用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。

实验报告要求:

1、各项实验记录和思考题。

2、调式通过的自编程序清单和调试记录。

实验四屏幕字符显示

实验目的:

通过实验掌握下列知识:

1、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。

2、利用DOS功能调用INT21H的)0AH号功能从键盘输入数据的方法。

3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。

4、IBM-PC机的ASCII码表及控制字符。

5、利用^Break退出程序的方法及局限性。

实验内容及步骤:

一、利用INT21H的09H号功能调用显示字符串。

<参考程序>

CODESEGMENT

ASSUMECS:

CODE,DS:

CODE

ORG100H

START:

JMPBEGIN

MSGDB‘HELLO,WELCOMETOASSEMBLEERWORLD!

’13,10,’$’

BEGIN:

MOVAX,CS

MOVDS,AX

MOVDX,OFFSETMSG

MOVAH,09H

INT21H

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

步骤:

1、进入汇编集成环境输入上述程序,存盘退出编辑环境。

2、汇编链接该程序产生.COM文件。

3、运行该程序,观察结果。

二、利用INT21H0AH号功能显示从键盘输入的字符串。

<参考程序>

DATASEGMENT

BUF1DB‘Pleaseinputastring:

’,0dh,0ah,’$’

BUF2DB80

DB?

DB81DUP(?

BUF3DB0DH,0AH,’$’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,BUF1

MOVAH,09H

INT21H

MOVDX,BUF2

MOVAH,0AH

INT21H

MOVCL,STR1+1

MOVCH,0

MOVSI,OFFSETSTR1+2

ADDSI,CX

MOVBYTEPTR[SI],'$'

MOVDX,OFFSETBUF3

MOVAH,09H

INT21H

MOVDX,OFFSETBUF2+2

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

步骤:

1、进入汇编集成环境输入上述程序,存盘退出编辑环境。

2、汇编链接该程序产生.EXE文件。

3、运行该程序观察结果。

三、利用INT21H2号功能显示字符:

<参考程序>

CODESEGMENT

ASSUMECS:

CODE

START:

XORDL,DL

MOVCX,100H

LOP:

MOVAH,2

INT21H

INCDL

PUSHCX

MOVCX,8

DELY:

PUSHCX

MOVCX,0

J:

LOOPJ

POPCX

LOOPDELY

POPCX

LOOPLOP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

步骤:

1、进入汇编集成环境输入上述程序,存盘退出编辑环境。

2、汇编链接该程序产生.EXE文件。

3、运行该程序,屏幕上依次缓慢的显示256个ASCII字符。

仔细观察每个字符,和IBM-PCASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?

4、按CTRL+BREAK退出此程序,若一次不行可多做几次。

四、直接向VRAM送ASCII码显示字符

<参考程序>

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAX,B800H

MOVDS,AX

XORAL,AL

XORBX,BX

MOVCX,100

LOP:

MOV[BX],AL

INCBX

INCAL

PUSHCX

MOVCX,8

DELY:

PUSHCX

MOVCX,0

J:

LOOPJ

POPCX

LOOPDELY

POPCX

LOOPLOP

INT20H

CODEENDS

ENDSTART

步骤:

1、进入汇编集成环境输入上述程序,存盘退出编辑环境。

2、汇编链接该程序产生.EXE文件。

3、运行该EXE文件,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT21H2号功能调用有何不同?

五、自编程序

1、要求显示AX的内容,即能显示AX=xxxx。

2、编程实现:

屏幕显示“Pleasesetthepassword!

”,随后从键盘输入设定的密码,屏幕接着显示“Pleasesetthepasswordagain!

”,如果再次输入的密码和第一次输入的相同则显示“OK,WELCOMETOASSEMBLEWORLD!

”,否则显示“Passworderror!

”。

实验报告要求:

1、各项实验记录。

2、利用INT21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?

3、调试通过的自编程序清单及调试结果。

实验五条件转移和分支程序

实验目的:

通过实验掌握下列知识:

1、8088指令:

JZ,JNZ,JC,JNC,CMP,SHR。

2、用字符搜索法确定字符串长度。

3、16进制数化为ASCII码的一般方法。

4、掌握利用间接转移指令JMPBX实现多岔分枝的方法。

5、宏替换指令MACRO及ENDM。

6、符号扩展指令CBW。

实验内容:

一、用字符搜索法确定字符串长度:

<参考程序>

CODESEGMENT

ASSUMECS:

CODE,DS:

CODE

ORG100H

START:

JMPBEGIN

MSGDB'Thisistheprogramtomeasure'

DB'thelengthofastring!

$'

BEGIN:

MOVAX,CS

MOVDS,AX

LEABX,MSG

MOVAL,24

XORCL,CL

LOP:

CMPAL,[BX]

JZEXIT

INCBX

INCCL

JMPLOP

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

汇编、连接和运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?

二、16进制数化ASCII码的一般方法(显示内存内容)

<参考程序>

CODESEGMENT

ASSUMECS:

CODE

START:

MOVSI,0

MOVBL,10H

LOP:

MOVDL,[SI]

MOVCL,4

SHRDL,CL

CMPDL,0AH

JCL1

ADDDL,7

L1:

ADDDL,30

MOVAH,2

INT21H

MOVDL,[SI]

ANDDL,0FH

CMPDL,0AH

JCL2

ADDDL,7

L2:

ADDDL,30H

MOVAH,2

INT21H

MOVDL,20H

MOVAH,2

INT21H

INCSI

DECBL

JNZLOP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

汇编、连接和运行此程序,观察结果。

三、综合程序:

编程测量一字符串长度,并用16进制数显示之

四、分支程序:

已知CHR单元有一个二进制数X,编程计算Y,其结果存入RESULT单元中。

Y=

实验报告要求:

1、列出调试通过程序清单并加注释。

2、写出实验体会。

实验六循环程序

实验目的:

1、掌握循环程序设计的方法和技巧。

2、掌握双重循环程序的结构,明晰内外循环层次。

3、掌握排序程序设计方法。

实验内容:

1、将一个十六位二进制数逐位显示输出。

<参考程序>

CODESEGMENT

ASSUMECS:

CODE

BEGIN:

MOVBX,1011000101010111B

MOVCL,16

ROLT:

ROLBX,1

JCDISP

MOVAH,2

MOVDL,30H

INT21H

DISP:

MOVAH,2

MOVDL,31H

INT21H

NEXT:

DECCL

JNZROTL

MOVAH,2

MOVDL,’B’

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

汇编、连接和运行此程序,观察结果。

二、将一批无序的字数组元素按照从小到大的次序进行排序输出。

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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