河北工业大学实验报告.docx

上传人:b****8 文档编号:11465047 上传时间:2023-03-01 格式:DOCX 页数:58 大小:199.80KB
下载 相关 举报
河北工业大学实验报告.docx_第1页
第1页 / 共58页
河北工业大学实验报告.docx_第2页
第2页 / 共58页
河北工业大学实验报告.docx_第3页
第3页 / 共58页
河北工业大学实验报告.docx_第4页
第4页 / 共58页
河北工业大学实验报告.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

河北工业大学实验报告.docx

《河北工业大学实验报告.docx》由会员分享,可在线阅读,更多相关《河北工业大学实验报告.docx(58页珍藏版)》请在冰豆网上搜索。

河北工业大学实验报告.docx

河北工业大学实验报告

汇编语言程序设计实验

实验一顺序与分支程序设计

一、实验目的

1)掌握顺序程序设计方法。

2)掌握分支程序的结构及分支程序的设计,调试方法。

2)学习数据传送及算术和逻辑运算指令的用法。

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

二、实验内容

1)有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。

EXAM1-1

DATASEGMENT

BUF1DW9348H

BUF2DW4DUP(0),0AH,0DH,‘$’

BUF3DW4DUP(0),‘$’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAX,BUF1

ADDAX,0

JSNEXT

MOVBUF2,AX

MOVBUF3,AX

JMPEEE

NEXT:

ANDAX,7FFFH

NOTAX

MOVBUF2,AX

INCAX

MOVBUF3,AX

EEE:

MOVCX,0004H

MOVDI,OFFSETBUF2

MOVDX,[DI]

ADDDI,03

BBB:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBQQQ

ADDAL,07H

QQQ:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04H

SHRDX,CL

POPCX

LOOPBBB

MOVCX,0004H

MOVSI,OFFSETBUF3

MOVDX,[SI]

ADDSI,03H

CCC:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBDDD

ADDAL,07H

DDD:

ADDAL,30H

MOV[SI],AL

DECSI

PUSHCX

MOVCL,04H

SHRDX,CL

POPCX

LOOPCCC

MOVDX,OFFSETBUF2

MOVAH,09H

INT21H

MOVDX,OFFSETBUF3

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

执行程序EXAM1-1·EXE,屏幕上显示结果:

ECB7

ECB8

2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。

相加若有进位不存入存储单元。

EXAM1-2

DATASEGMENT

ADB34H,18H,2DUP(0),’$’

BDB56H,83H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,A

MOVBL,B

ADDAL,BL

MOVAH,A+1

MOVBH,B+1

ADCAH,BH

MOVA,AL

MOVA+1,AH

MOVCX,0004H

MOVDI,OFFSETA

MOVDX,[DI]

ADDDI,03

NEXT:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBQQQ

ADDAL,07H

QQQ:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRDX,CL

POPCX

LOOPNEXT

MOVDX,OFFSETA

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

执行程序EXAM1-2·EXE,屏幕上显示结果:

9B8A

 

3)在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。

STACKSEGMENTSTACK

DB1024DUP(0)

STACKENDS

DATASEGMENT

BUFDB70H,35H,1FH

MAXDB2DUP(?

),‘$’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAL,BUF

CMPAL,BUF+1

JNBLP1

MOVAL,BUF+1

LP1:

CMPAL,BUF+2

JAELP2

MOVAL,BUF+2

LP2:

MOVCX,02H

MOVDI,OFFSETMAX

MOVDL,AL

INCDI

LP3:

ANDAL,0FH

CMPAL,0AH

JBLP4

ADDAL,07H

LP4:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRDL,CL

POPCX

MOVAL,DL

LOOPLP3

MOVDX,OFFSETMAX

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

执行程序EXAM1-3·EXE,屏幕上显示结果:

70

4)要求同上,只是比较的数为有符号数。

EXAM1-4

STACKSEGMENTSTACK

DB1024DUP(0)

STACKENDS

DATASEGMENT

BUFDB98H,75H,32H

MAXDB2DUP(?

),‘$’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAL,BUF

CMPAL,BUF+1

JGLP1

XCHGAL,BUF+1

LP1:

CMPAL,BUF+2

JGLP2

XCHGAL,BUF+2

LP2:

MOVMAX,AL

MOVCX,02H

MOVDI,OFFSETMAX

MOVDL,[DI]

INCDI

LP3:

MOVAL,DL

ANDAL,0FH

CMPAL,0AH

JBLP4

ADDAL,07H

LP4:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRDX,CL

POPCX

LOOPLP3

MOVDX,OFFSETMAX

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

执行程序EXAM1-4·EXE,屏幕上显示结果:

75

5)将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。

本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。

EXAM1-5

ORG2000H

2000BE0010MOVSI,1000

2003BF0910MOVDI,1009

20068A14MOVDL,[SI]

200880C200ADDDL,00

200B7B0BJPO2018

200D8615XCHGDL,[DI]

200F8814MOV[SI],DL

20114FDECDI

201239FECMPSI,DI

20147407JE201D

2016EBF0JMP2008

201846INCSI

20198A14MOVDL,[SI]

201BEBF5JMP2012

201DF4HLT

6)

从键盘上接收一位十进制数x,计算y值,并以十六进制形式显示出来,y按下列公式计算。

实验六

DATESEGMENT

XDB?

DATEENDS;数据段

CODESEGMENT

ASSUMECS:

CODE,DS:

DATE

START:

MOVAX,DATE;代码段

MOVDS,AX;初始化ds寄存器

MOVAH,1

INT21H;读文件到缓冲区

CMPAL,33H;比较指令

JBL0;A

CMPAL,36H

JAL0

ANDAL,0FH;逻辑与指令

MOVX,AL;al给x

MOVAL,X

CMPAL,3H

JEL1;执行L1命令

CMPAL,4H

JEL4;执行L4命令

CMPAL,5H

JEL6;执行L6命令

CMPAL,6H

JEL7;执行L7命令

L1:

MULAL

ADDAL,X;al+x

L5:

MOVBL,AL

MOVCL,4

SHRAL,CL;移位指令

CMPAL,9

JLEL2;转移指令。

小于或等于,或者不大于则转移

ADDAL,7

L2:

ADDAL,30H;寄存器al加0x30

MOVDL,AL

MOVAH,2;把2放入ah里

INT21H

ANDBL,0FH;逻辑与运算指令

CMPBL,9

JLEL3

ADDBL,7;相加

L3:

ADDBL,30H

MOVDL,BL

MOVAH,2

INT21H

JMPL0

L4:

MULAL

SUBAL,X

SUBAL,X

JMPL5

L6:

MULAL

JMPL5

L7:

MULAL

SHRAL,1

JMPL5

L0:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

7)

实验内容:

从键盘上接收两个一位十六进制数x和y,然后再输入一个a-d之间的一个字符,按下列要求计算。

a)当输入字符为a,则计算x+y,并以十六进制形式显示出来

b)当输入字符为b,则计算|x-y|,并以十六进制形式显示出来

c)当输入字符为c,则计算x*y,并以十六进制形式显示出来

d)当输入字符为d,则计算x/y,并以十六进制形式显示出来

实验七

DATASEGMENT

XDB0

YDB0

WDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

XORAX,AX

MOVAH,1

INT21H

CMPAL,39H

JBEL1

SUBAL,07H

L1:

SUBAL,30H

MOVX,AL

MOVAH,1

INT21H

CMPAL,39H

JBEL2

SUBAL,07H

L2:

SUBAL,30H

MOVY,AL

MOVAH,1

INT21H

A:

CMPAL,41H

JNEB

XORAL,AL

MOVAL,X

ADDAL,Y

MOVW,AL

JMPL3

B:

CMPAL,42H

JNEC

XORAL,AL

MOVAL,X

SUBAL,Y

MOVW,AL

CMPAL,0

JGL3

NEGAL

MOVW,AL

JMPL3

C:

CMPAL,43H

JNED

XORAL,AL

MOVAL,X

MULY

MOVW,AL

JMPL3

D:

XORAX,AX

MOVAL,X

DIVY

MOVW,AL

L3:

MOVDL,AL

MOVCL,4

SHRDL,CL

CMPDL,9

JNAL4

ADDDL,07H

L4:

ADDDL,30H

MOVAH,02H

INT21H

MOVDL,W

ANDDL,0FH

CMPDL,9

JNAL5

ADDDL,07H

L5:

ADDDL,30H

MOVAH,02H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

实验七结果

3、实验心得:

(1)通过实验使我知道了和熟悉了汇编程序设计的步骤

1.建立数学模型遇到一个题目,首先要进行全面的分析,根据问题提出的条件,特点,找出规律,找出问题的数学模型或者制定解决问题的规律。

2.绘制程序流程图流程图能够把比较抽象的问题变得而形象化,并且有助于理清楚思路,便于程序的编制,在程序的易读性和易维护性上有很大的帮助。

3.合理分配存储空间和寄存器汇编语言能够直接的调用存储器和寄存器。

程序运行时,大两量的数据,中间结果或最后的结果都存放在存储器中,且运行的程序目标代码在存储器中,节约空间是一个好的程序应该注意的问题。

4.编制程序根据语法指令编制程序

5.人工检查用人工的方式检查程序是否有错,并及时的改正。

6.上机调试只有通过上机才能验证程序是否正确,经过反复的运行调试,才能得到正确的程序。

(2)掌握了分支程序的结构及分支程序的设计,调试方法和数据传送及算术和逻辑运算指令的用法。

实验二循环与子程序程序设计

一、实验目的

1)加深对循环结构的理解。

2)掌握循环程序的设计方法。

3)学习子程序的定义和调用方法。

4)掌握子程序、子程序的嵌套、递归子程序的结构。

5)掌握子程序设计、编制及调试。

6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容

1)编制在屏幕上显示九九乘法表的程序。

2)编制在屏幕上显示用*组成的三角形的程序。

3、实验代码

实验一

DATASEGMENT

S2DB?

S1DB?

XDB1

YDB1

SDB0AH

FCH=2AH

FDH=3DH

FKG=20H

FHH=0AH

FHC=0DH

DATAENDS

STACK1SEGMENTSTACK

DB20HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVCL,9

LL1:

PUSHCX;将CL压入堆栈段

MOVCL,Y

LL2:

CALLL1;调用子程序L1

INCX

LOOPLL2

MOVX,1

INCY

MOVDL,FHH;输出换行和回车

MOVAH,2

INT21H

MOVDL,FHC

MOVAH,2

INT21H

POPCX;从堆栈段中取出CL

LOOPLL1

MOVAH,4CH;程序结束

INT21H

L1PROC;计算X*Y=Z并且输出X*Y=Z的子程序

MOVDL,X

ADDDL,30H

MOVAH,2

INT21H

MOVDL,FCH

MOVAH,2

INT21H

MOVDL,Y

ADDDL,30H

MOVAH,2

INT21H

MOVDL,FDH

MOVAH,2

INT21H

MOVAL,X

MULY

DIVS

MOVS1,AH

ADDAL,30H

MOVDL,AL

MOVAH,2

INT21H

ADDS1,30H

MOVDL,S1

MOVAH,2

INT21H

MOVDL,FKG;输出空格

MOVAH,2

INT21H

RET

L1ENDP;子程序结束

CODEENDS

ENDSTART

实验二

DATASEGMENT

NDB?

FCH=2AH

FDH=3DH

FKG=20H

FHH=0AH

FHC=0DH

DATAENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,1;输入一位16进制数确定输出行数INT21HCMPAL,39HJBEL1SUBAL,07H

L1:

SUBAL,30HMOVN,AL

XORBX,BX

MOVDL,FCH

MOVCL,N

MOVDL,FHH;输出换行和回车

MOVAH,2

INT21H

MOVDL,FHC

MOVAH,2

INT21H

LOP:

PUSHCX

INCBL

MOVCL,BL

MOVDL,FCH

LOP2:

MOVAH,02H

INT21H

LOOPLOP2

POPCX

MOVDL,0AH

MOVAH,02H

INT21H

MOVDL,FHC

MOVAH,02H

INT21H

CMPBL,9

JZL2

LOOPLOP

L2:

MOVAH,4CH;程序结束

INT21H

CODESENDS

ENDSTART

4、实验结果:

实验一结果

实验二结果

5、实验心得

6、循环程序由初始化部分、循环部分、调整部分、控制部分组成

1〉两种方式,一种是先判断在执行,另一种是先执行再判断。

2〉两种控制循环的方式

a〉计数控制循环

一般使用LOOP指令,要先将循环的次数放入CX中,在多重循环的计数控制中要注保存和复原上一次循环的断点信息,在保留和复原时可以使用堆栈进行处理。

自认为可以理解为一根盘绕了确定的圈数的绳子,又进入的头,又出去的尾。

b〉条件控制循环

一般使用JMP指令使程序跳到这一段的开头,用CMP在循环中进行比较判断,再根据程序要求,选择适当的转移条件,跳出循环。

自认为可以理解为一圆形的导轨,并在导轨上设置一个初口,在符合条件时就在导轨上脱离,否则,将会在导轨上一直的转下去。

3〉再循环中可以同时使用两者,当即已知循环的次数限制范围,但又要求在符合条件时结束循环是,就要同时使用两者。

7、子程序的使用大大的简化了程序设计的思路,在完成一个程序时,可以简单的把一个程序划分为几个完整的几部分,使每一部分独立的完成特定的一部分和计算任务。

子程序的使用还可以大大的减小程序的体积,在一程序中,如果需要多次反复的是用某一段代码的话,就可以将这段代码设定为子程序,以后想使用时,只要一CALL再一RET就OK啦。

我认为使用子程序的关键在于明白子程序的机理,明白子程序是如何保存和恢复断点的信息的,只有真正的理解了这一点才能更好地利用好子程序。

子程序的参数传递的方式有很多种,但是在堆栈段传递参数时,应该注意使用带立即数的返回的方式,在利用寄存器BP访问堆栈段来取得参数。

实验三算术运算与代码转换程序设计

一、实验目的

1)掌握算术运算程序的设计方法。

2)掌握代码转换程序的设计方法。

3)进一步掌握各种程序结构。

4)熟练掌握和使用用DEBUG调试程序。

二、实验内容

1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。

2)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。

3)编写程序把从键盘输入的以回车为结束符的字符串中的空格去掉并按相反的顺序输出。

三实验代码、

实验1

DATASEGMENT

NUM1DB22H,33H,44H,55H,66H,77H

NUM1LDB6H

NUM2DB22H,22H,22H,22H

NUM2LDB4H

OUTCOME1DB10HDUP(0)

OUTCOME2DB10HDUP(0)

NDB0H

DATAENDS

STACK1SEGMENTPARASTACK

DW20HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVCH,0

MOVSI,OFFSETNUM1

MOVDI,OFFSETNUM2

MOVAH,NUM1L

MOVAL,NUM2L

CMPAH,AL

JAECHA

XCHGSI,DI

XCHGAH,AL

CHA:

SUBAH,AL

MOVCL,AL

CLC

MOVBX,OFFSETOUTCOME1

LOP1:

MOVAL,[DI]

PUSHCX

MOVCL,[SI]

ADCCL,AL

MOV[BX],CL

INCBX

INCSI

INCDI

POPCX

LOOPLOP1

MOVCL,AH

JCXZLOP3

LOP2:

PUSHCX

MOVCL,BYTEPTR[SI]

ADCCL,0

MOV[BX],CL

POPCX

INCBX

INCSI

LOOPLOP2

LOP3:

MOVCH,0

MOVSI,OFFSETNUM1

MOVDI,OFFSETNUM2

MOVAH,NUM1L

MOVAL,NUM2L

CMPAH,AL

JAECHA1

XCHGSI,DI

XCHGAH,AL

CHA1:

SUBAH,AL

MOVCL,AL

CLC

MOVBX,OFFSETOUTCOME2

LOP11:

MOVAL,[DI]

PUSHCX

MOVCL,[SI]

SBBCL,AL

MOV[BX],CL

INCBX

INCSI

INCDI

POPCX

LOOPLOP11

MOVCL,AH

JCXZLOP7

LOP21:

PUSHCX

MOVCL,BYTEPTR[SI]

SBBCL,0

MOV[BX],CL

POPCX

INCBX

INCSI

LOOPLOP21

LOP7:

MOVDI,OFFSETOUTCOME1

ADDDI,10H

MOVCX,11H

LOP4:

MOVDL,[DI]

DECDI

CMPN,0H

JNELOP5

CMPDL,0H

JELOP9

LOP5:

PUSHDX

PUSHCX

MOVCL,4H

SHRDL,CL

POPCX

CMPDL,9H

JBELOP6

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

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

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

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