微机及汇编语言程序方案实验指导书.docx

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

微机及汇编语言程序方案实验指导书.docx

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

微机及汇编语言程序方案实验指导书.docx

微机及汇编语言程序方案实验指导书

 

微机原理及汇编语言

程序设计

 

 

计算机实验中心

 

目录

 

 

 

实验一DEBUG的使用

【实验目的】

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

2.掌握8088/8086指令系统---数据传送指令、算术指令。

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

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

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

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

BYTEPTR,WORDPTR。

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

8.掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。

【实验性质】

验证性实验<学时数:

2H)

【实验内容】

一、DEBUG命令的使用

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

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

3.用命令E100303132……3F将30H~3FH写入地址为100H开始的内存单元

中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?

4.用命令F100L0F'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/8086常用指令练习

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:

100A内存单元中,用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时,可不用“=”给出执行的首地址?

五、两个多位十进制数相加

要求:

将下面程序在汇编平台下,完整地进行汇编、连接、运行,然后用DEBUG软件调入可执行文件到内存,用反汇编命令查看实际程序及数据区内容,用t命令逐条执行,以观察各寄存器及数据区内存的数据变化情况,然后使用p命令和g命令执行,以观察执行过程有何特点。

将两个5位十进制数相加,要求被加数<本题选47193)和加数<本题选28056)均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前>,结果送回以DATA3为首的5个内存单元中(低位在前>,并显示相加的结果。

实验程序和结果如下:

DATASEGMENT

DATA1DB33H,39H,31H,37H,34H。

存放被加数47193,ASCII码形式,低位在前

DATA2DB36H,35H,30H,38H,32H。

存放加数28056,ASCII码形式,低位在前

DATA3DB5DUP(?

>。

留出5个存放结果的单元

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCX,5。

循环次数置5,5个位要相加5次

MOVSI,0。

SI放地址位移量,每个数的第一字节地址位移量为0

CLC。

CF清0,防止第1个字节相加时ADC指令多加CF中可能的1

NEXT:

MOVAL,DATA1[SI]。

取被加数一个字节送AL,DATA1偏移地址+SI为有效地址

ADCAL,DATA2[SI]。

AL+加数对应字节+CF<低位相加时可能的进位)结果送AL

AAA。

AL中两字节相加的和调整成非压缩的BCD码,进位在CF中

MOVDATA3[SI],AL。

结果送入DATA3对应字节单元中

INCSI。

地址位移量加1指向高一位字节单元

LOOPNEXT。

5次未到,继续循环

MOVSI,5。

显示5个位,SI中的数既是循环次数又作地址位移量

DISP:

ADDDATA3[SI-1],30H。

将结果从高位单元开始把非压缩的BCD码变成ASCII码

MOVDL,DATA3[SI-1]。

将ASCII码送DL以满足2号功能调用的规定要求

MOVAH,2。

功能号送AH

INT21H。

调用2号功能,显示一位数字

DECSI。

次数减1

JNZDISP。

5次未到,继续循环

MOVAH,4CH。

功能号送AH

INT21H。

调用4CH号功能,返回DOS

CODEENDS

ENDSTART

运行结果:

75249

思考题:

1.上述程序只显示了相加的结果,没有显示被加数和加数,如果在上述程序的基础上将显示格式改为47193+28056=75249,则程序如何修改?

2.上述程序没有考虑运算结果最高位有进位的情况,如果考虑可能产生的进位,则要显示完整的结果,程序如何修改?

<提示:

INC和LOOP指令均不影响CF)

【报告要求】

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

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.掌握DOS功能调用INT21H02号功能字符显示输出方法。

4.掌握INT21H4C号功能返回系统的方法。

【实验性质】

验证性实验<学时数:

2H)

【实验内容】

一、完成一个十六位二进制数到十六进制数的转换操作程序设计。

参考程序:

将二进制数一边转换成十六进制数一边显示<用2号功能调用)

DATASEGMENT

BUFADW1111001000110100B。

F234H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

BEG:

MOVAX,DATA

MOVDS,AX

MOVDX,BUFA

MOVCH,4。

循环控制十六进制数显示位数

MOVCL,4

ROTATE:

ROLDX,CL。

循环左移4位,将高位十六进制数移到低位

MOVBX,DX。

保护移动后的数

ANDDX,0FH。

屏蔽掉高位保留该低位数

CMPDL,9

JGL

ADDDL,30H;转换成ASCII码

MOVAH,2;送显示

INT21H

JMPNEXT

L:

ADDDL,37H

MOVAH,2

INT21H

NEXT:

MOVDX,BX

DECCH

JNZROTATE

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

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

参考程序:

CODESEGMENT

ASSUMECS:

CODE

ORG100H

BEG:

JMPSTART

BUFADW0001001000110100B。

1234H(用户程序数据区>

START:

MOVDX,BUFA

MOVCH,4。

循环控制十六进制数显示位数

MOVCL,4

ROTATE:

ROLDX,CL。

循环左移4位,将高位十六进制数移到低位

MOVBX,DX。

保护移动后的数

ANDDX,0FH。

屏蔽掉高位保留该低位数

CMPDL,9

JGL

ADDDL,30H;转换成ASCII码

MOVAH,2;送显示

INT21H

JMPNEXT

L:

ADDDL,37H

MOVAH,2

INT21H

NEXT:

DECCH

MOVDX,BX

JNZROTATE

MOVAH,4CH

INT21H

CODEENDS

ENDBEG

三、参照上述程序完成一个十六位二进制数到十进制数的转换操作程序设计。

四、加分题:

完成从键盘输入一个任意十六位二进制数到十六进制数的转换操作程序设计。

提示:

在数据区定义19个字节的字符串区,用INT21H的10#功能,进行字符串输入,判断实际输入的字节数是否为16个,每个字节的内容是否为30H或31H,不是,则提示重新输入或退出,是,则把该区域的16个ASCII码30H、31H的字符从低位到高位<或相反顺序)转换成1010110101110111的形式,用上述程序进行转换输出。

思考题:

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

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

3)从键盘输入的二进制ASCII字符串,在转换成十六进制数据时,有哪几大步骤?

【实验要求】

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

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

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

4.回答思考题。

实验三数组排序程序

【实验目的】

1.循环控制条件的设计。

2.存储器操作数的寻址方式。

3.对内存的数据处理方法。

【实验性质】

验证性实验<学时数:

3H)

【实验内容】

1、在内存缓冲区存放10个无序整数,按照从小到大的顺序进行排序,用debug查看排序结果。

参考程序:

DATASEGMENT

ST_ADDW23,78,45,99,128,64,32,200,1,0

DATAENDS

PROGRAMSEGMENT

MAINPROCFAR

ASSUMECS:

PROGRAM,DS:

DATA

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVCX,10

DECCX

LOOP1:

MOVDI,CX

MOVBX,0

LOOP2:

MOVAX,ST_AD[BX]

CMPAX,ST_AD[BX+2]

JGECOTINUE

XCHGAX,ST_AD[BX+2]

MOVST_AD[BX],AX

COTINUE:

ADDBX,2

LOOPLOOP2

MOVCX,DI

LOOPLOOP1

RET

MAINENDP

PROGRAMENDS

ENDSTART

2、加分题:

从键盘输入10个无序10进制整数,对这10个数进行排序,将排序后的结果送屏幕显示。

3、加分题:

从键盘输入一个10进制整数,插入前面已整序的10个数中,要求插入后的11个数也是整序好的,将插入后的结果送屏幕显示。

【报告要求】

1.给出该程序的流程图。

2.给出调试通过的自编程序清单和调试记录

3.写出实验体会。

实验四数据的输入与输出程序

【实验目的】

1.掌握键盘输入字符的方法和十六进制数字字符的ASCII码转换为二进制数的原理。

2.掌握子程序定义和调用的方法。

3.掌握循环移位指令的用法和无符号数比较大小的方法。

【实验性质】

验证性实验<学时数:

2H)

【实验内容】

从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。

要求输入的数字字符串以回车键结束。

如果输入的数字超过4个,则以最后输入的4个为准。

若按下的键不是十六进制数字字符,则显示出错信息。

参考程序:

【实验提示】

从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要找出ASCII码与该数字对应的二进制数之间的关系。

关系如下:

十六进制数字字符

字符对应的ASCII码

数字对应的二进制数

0~9

30H~39H

ASCII码-30H

A~F

41H~46H

ASCII码-37H

a~f

61H~66H

ASCII码-57H

【报告要求】

1.给出该问题的程序设计流程图。

2.给出该程序的全部代码,并加上注释。

3.总结实验体会。

 

实验五子程序设计

【实验目的】

掌握一般子程序的调用和返回方法,掌握定义过程的伪指令的用法。

【实验性质】

设计性实验<学时数:

3H)

【实验内容】

1、完成两个四位十进制数相加的程序设计,形式为:

2345+7869=10214

<1)要求所有中断调用全部采用子程序的形式完成。

<2)要求考虑进位位。

完善程序并调试通过。

<3)仿照下述程序,完成八位十进制数相加的程序设计。

要求考虑进位位。

完善程序并调试通过。

参考程序:

DISPMACROVAR

MOVAH,2

MOVDL,VAR

INT21H

ENDM

DATASEGMENT

STR1DB'PLEASEINPUTANUMBER(EXP:

2345>$'

STR2DB'PLEASEINPUTANOTHERNUMBER(EXP:

7868>$'

STR3DB0DH,0AH,'$'

BUF1DB10,?

11DUP(?

>

BUF2DB10,?

11DUP(?

>

BUF3DB4DUP(?

>,'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVDI,OFFSETSTR1

CALLDISPL。

SHOW'PLEASEINPUTNUMBER1:

'

MOVDI,OFFSETBUF1

CALLGETNUM。

GETNUMBER1FROMKEYBOARD

MOVDI,OFFSETSTR3

CALLDISPL。

CRLF

MOVDI,OFFSETSTR2

CALLDISPL。

SHOW'PLEASEINPUTNUMBER2:

'

MOVDI,OFFSETBUF2

CALLGETNUM。

GETNUMBER2FROMKEYBOARD

MOVDI,OFFSETSTR3

CALLDISPL。

CRLF

XORBX,BX

MOVBL,BUF1+1

MOVBUF1+2[BX],'$'。

BEHINDNUMBER1ADD'$'

MOVDI,OFFSETBUF1+2

CALLDISPL。

SHOWNUMBER1

DISP'+'。

SHOW'+'

XORBX,BX

MOVBL,BUF2+1

MOVBUF2+2[BX],'$'。

BEHINDNUMBER2ADD'$'

MOVDI,OFFSETBUF2+2

CALLDISPL。

SHOWNUMBER2

DISP'='。

SHOW'='

LEASI,BUF1+2

LEADI,BUF2+2

CALLDAAD。

ADDNUMBERS

MOVDI,OFFSETBUF3

CALLDISPL。

SHOWRESULT

MOVAH,4CH。

RETURNDOS

INT21H

DAADPROCNEAR。

SUBPROCESSOFADD

MOVBX,4

N1:

MOVAL,[SI+BX-1]

ADCAL,[DI+BX-1]

AAA

ADDAL,30H

MOVBUF3[BX-1],AL

DECBX

JNZN1

RET

DAADENDP

DISPLPROCNEAR。

SUBPROCESSOFDISPLAY

MOVAH,9

MOVDX,DI

INT21H

RET

DISPLENDP

GETNUMPROCNEAR。

SUBPROCESSOFGETNUM

MOVAH,0AH

MOVDX,DI

INT21H

RET

GETNUMENDP

CODEENDS

ENDBEGIN

2、加分题:

根据输入的运算符来实现+、-、*、/四则运算,并考虑进位。

做除运算时,应考虑除数为0。

【实验要求】

1.设计一个子程序,完成将缓冲区中的两个四位十进制数据送屏幕显示功能。

2.设计一个子程序,完成从键盘输入两个四位十进制数的加法操作程序设计。

3.设计一个子程序,完成两个八位十进制数作的加法运算操作程序设计。

4.设计一个子程序,完成两个四位十进制数作四则运算操作。

运算要求从键盘输入。

【报告要求】

1.给出该程序设计的方案步骤。

2.列出自编程序清单并加注释。

3.写出心得体会。

实验六宏调用程序设计

【实验目的】

1.熟悉宏定义的一般结构。

2.掌握宏指令的编写方法和调用方法。

3.能区别宏调用和子程序调用的不同之处。

4.了解LOCAL伪操作的用法。

5.熟悉无参数宏指令和有参数宏指令的定义与调用。

【实验性质】

验证性实验<学时数:

2H)

【实验内容】

1.设计一个子功能,完成显示一串文字信息。

2.设计一个子功能,能实现多个字或字节10进制数据连加或连减的功能。

要求多字节10进制数据从屏幕输入。

加或减按实际输入的符号决定。

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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