好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

汇编实验报告

汇编实验报告 本文关键词:汇编,实验,报告

汇编实验报告 本文简介:《汇编语言程序设计》第二次上机2-1实验报告院系:计算机科学与技术专业:信息安全班级:0903班姓名:学号:时间:2011-6-6地点:南一楼808一、实验目的3二、题目与实验要求3三、寄存器分配和变量定义说明:3四、流程图5五、源程序及注释7六、实验步骤13七、实验记录13八、体会16一、实验目的

汇编实验报告 本文内容:

《汇编语言程序设计》

第二次上机2-1实验报告

院系:计算机科学与技术

专业:信息安全

班级:0903班

姓名:

学号:

时间:2011-6-6

地点:南一楼808

一、实验目的3

二、题目与实验要求3

三、寄存器分配和变量定义说明:3

四、流程图5

五、源程序及注释7

六、实验步骤13

七、实验记录13

八、体会16

一、实验目的

1、加深对一些常用的汇编指令的理解;

2、加深对常用DOS功能调用指令的理解;

3、进一步熟悉TD的使用。

二、题目与实验要求

1、《80X86汇编语言程序设计》教材中

P95的

3.7

题。

要求:(1)将该题改成一完整的程序(可以省略实验报告中的程序框图)。

(2)请事先指出依次执行每条程序指令后(AX)的内容。

(3)请事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值。

(4)记录上机执行后与(2)、(3)

中对应的内容。

2、《80X86汇编语言程序设计》教材中

P94的

3.3

题。

要求:(1)将该题改成一完整的程序,其中数据段的定义为习题3.1中的数据段(可以省略实验报告中的程序框图)。

(2)请事先画出数据段中数据的存储形式。

(3)请事先指出依次执行每条程序指令后相应寄存器中的内容。

(4)请事先给出各调指令在汇编后的形式。

(5)比较上机执行后,看到的各项内容是否与(2)、(3),(4)内容一致。不一致的应分析错误原因。

3、《80X86汇编语言程序设计》教材中

P96的

3.11

题。

要求:(1)请事先指出程序运行结束后,显示器显示的内容。

(2)若将NUM的定义改成如下形式:

NUM

DB

35

显示的结果是什么?

(3)若将NUM的定义改成如下形式:

NUM

DB

59

显示的结果是什么?

(4)指出程序运行后看到的结果,若不一致,分析产生错误的原因。

4.

从键盘输入两串字符分别存入BUF1和BUF2区,比较两串内容是否相等,

相等显示“MATCH

!”,不相等显示“NO

MATCH

!”。

要求:(1)

使用10号功能调用输入字符串;

(2)

使用

9号功能调用输出提示信息;

提示:先比较长度是否相等。

5

选做题

输入一个无符号的数字串,然后以16进制形式显示出串的值。

例如:

INPUT

A

NUMBER

:

59?

RESULT

:

3BH

其中下划线上的内容(59)为程序运行时输入的串。

三、寄存器分配和变量定义说明:

题目3

1.

存储单元分配:

NUM为一个定义在数据段中的字节变量,存储一个二进制数

BUF为一个定义在数据段中的字节变量,存储回车换行与提示信息

BUF0为一个定义在数据段中的字节变量,存储一个十六进制数

2.

寄存器分配:

DI存储BUF0中某个字节的地址,用于寄存器间接寻址

AL存储NUM中二进制数高四位与低四位对应的数字的ASCII码

题目4

1.

存储单元分配:

BUF1、BUF2为两个定义在数据段中的字节变量,存储输入的字符串信息

BUF3为一个定义在数据段中的字节变量,回车换行

BUF4、BUF5为两个定义在数据段中的字节变量,存储提示信息

2.

寄存器分配:

BX作为变址寻址寄存器使用

题目5(选做题)

1.

存储单元分配:

STR1、STR2为两个定义在数据段中的字节变量,存储提示信息

BUF1为一个定义在数据段中的字节变量,存储输入的字符串信息

BUF2为一个定义在数据段中的字节变量,回车换行

2.

寄存器分配:

AX存储输入的字符串对应的数字

CX用作计数器,控制循环次数

DI用作变址寻址的变址寄存器

四、流程图

题目4

开始

比较两字符串长度是否相等

相等

不想等

结束

输入两个字符串

N

N

Y

Y

比较两字符串是否相等

题目5(选做题)

开始

字符串转化为对应的整数

整数转化为对应的十六进制数的字符

结束

输入数字字符串

输出转化后的十六进制数的字符

五、源程序及注释

题目1

.386

DATASEGMENTUSE16

BUFDB?

DATAENDS

STACKSEGMENTUSE16STACK

DB200

DUP(0)

STACK

ENDS

CODESEGMENTUSE16

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:

MOVAX,DATA

MOVDS,AX

MOVAX,0

DECAX

ADDAX,07FFFH

ADDAX,2

NOTAX

SUBAX,0FFFFH

ADDAX,8000H

ORAX,0BFDFH

ANDAX,0EBEDH

XCHGAH,AL

SALAX,1

RCLAX,1

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

题目2

.386

DATASEGMENTUSE16

STR1DB0,1,2,3,4,5

STR2DB

012345

COUNTEQU30

NUMBDB3

DUP(2)

NUMWDW10H,-60H

POINDW0

DATAENDS

STACKSEGMENTUSE16STACK

DB200

DUP(0)

STACK

ENDS

CODESEGMENTUSE16

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSET

STR1+3

MOVSI,OFFSET

STR2

MOVCL,COUNT

MOVDX,WORD

PTR

NUMB

MOVBP,NUMW+2

MOVAL,3[SI]

MOVAH,[SI+BX+1]

MOVCH,BYTE

PTR

NUMW+3

MOVSXEAX,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

题目3

.386

A1SEGMENTUSE16

NUMDB00111001B

BUFDB0AH,0DH,(NUM)=

BUF0DB4

DUP(?)

A1

ENDS

B1SEGMENTUSE16STACK

DB200

DUP(0)

B1ENDS

C1SEGMENTUSE16

ASSUMEDS:A1,SS:B1,CS:C1

BEGIN:

MOVAX,A1

MOVDS,AX

LEADI,BUF0

MOVAL,NUM

SHRAL,4

ORAL,30H

MOV[DI],AL

INCDI

MOVAL,NUM

ANDAL,0FH

ORAL,30H

MOV[DI],AL

INCDI

MOVBYTE

PTR

[DI],H

INCDI

MOVBYTE

PTR

[DI],$

LEADX,BUF

MOVAH,9

INT21H

MOVAH,4CH

INT21H

C1ENDS

ENDBEGIN

题目4

.386

DATA

SEGMENT

USE16

BUF1

DB

60

DB

?

DB

60

DUP(?)

BUF2

DB

60

DB

?

DB

60

DUP(?)

BUF3

DB

0DH,0AH,$

BUF4DB

MATCH

!$

BUF5DB

NO

MATCH

!$

DATA

ENDS

STACK

SEGMENTUSE16

STACK

DB

200

DUP(0)

STACKENDS

CODESEGMENTUSE16

ASSUMEDS:DATA,CS:CODE,SS:STACK

START:

MOVAX,DATA

MOV

DS,AX

LEA

DX,BUF1

MOV

AH,10

INT

21H

LEADX,BUF3

MOVAH,9

INT21H

LEA

DX,BUF2

MOV

AH,10

INT

21H

LEADX,BUF3

MOVAH,9

INT21H

XORBH,BH

MOVBL,BUF1[1]

;BUF1中的字符串长度存入BL

MOVCL,BUF2[1]

;BUF2中的字符串长度存入CL

CMPBL,CL

;比较两字符串长度

JNENO

INCBL

LOOP1:MOVCL,BUF1[BX]

CMPCL,BUF2[BX]

;比较相同位置的字符是否相同

JNENO

DECBL

CMPBL,1

;判断字符串是否比较完毕

JNELOOP1

LEA

DX,BUF4

MOVAH,9

INT21H

JMPEXIT

NO:LEA

DX,BUF5

MOVAH,9

INT21H

EXIT:MOVAH,4CH

INT21H

CODEENDS

ENDSTART

题目5(选做题)

.386

DATASEGMENTUSE16

STR1DB

INPUT

A

NUMBER:

$

STR2DB

RESULT:

$

BUF1DB

60

DB?

DB60

DUP(0)

BUF2DB0DH,0AH,$

DATAENDS

STACKSEGMENTUSE16STACK

DB200

DUP(0)

STACKENDS

CODESEGMENTUSE16

ASSUMECS:CODE,SS:STACK,DS:DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,STR1

MOVAH,9

INT21H

LEADX,BUF1

MOVAH,10

INT21H

LEADX,BUF2

MOVAH,9

INT21H

LEADX,STR2

MOVAH,9

INT21H

XORAX,AX

XORCH,CH

XORDX,DX

MOVCL,BUF1[1]

;数字字符串长度存入CL

MOVBX,10

MOVDI,2

LOOP1:MULBX

;开始将字符串转化为十进制数存入AX

MOVDL,BUF1[DI]

SUBDX,30H

ADDAX,DX

XORDX,DX

INCDI

LOOPLOOP1

MOVBX,16

LOOP2:INCCX

DIVBX

CMPDX,10

;判断是否小于10

JLJMP1

ADDDX,7

JMP1:ADDDX,30H

;转化为对应的十六进制数

PUSHDX

XORDX,DX

CMPAX,0

JNELOOP2

LOOP3:POPDX

MOVAH,2

INT21H

;从高位至低位依次输出十六进制数

LOOPLOOP3

MOVDL,H

MOVAH,2

;输出字母H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

六、实验步骤

1.

存盘文件名依次为1-1.ASM、1-2.ASM、1-3.ASM、1-4.ASM、1-5.ASM。

2.

使用MASM5.0汇编源文件。

3.

观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。

4.

使用连接程序LINK.EXE将汇编生成的OBJ文件连接成执行文件。

5.

若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成EXE文件。

6.

执行该程序,观察执行现象。

七、实验记录

题目1

事先指出依次执行每条程序指令后(AX)的内容:

0000H,0FFFFH,7FFEH,8000H,7FFFH,8000H,0000H,0BFDFH,

0ABCDH,0CDABH,9B56H,36ADH

事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值:

CF:1,0,1,1

ZF:0,0,0,1

测试结果:

依次执行每条程序指令后(AX)的内容:

0000H,0FFFFH,7FFEH,8000H,7FFFH,8000H,0000H,0BFDFH,

0ABCDH,0CDABH,9B56H,36ADH

执行ADD、SUB、SAL、RCL指令后,CF、ZF的值依次为:

CF:1,0,1,1

ZF:0,0,0,1

题目2

数据段中数据的存储形式:

01H

02H

03H

04H

05H

31H

32H

33H

34H

35H

02H

02H

02H

00H

30H

10H

00H

A0H

FFH

00H

00H

STR1

STR2

NUMB

NUMW

POIN

依次执行每条程序指令后相应寄存器中的内容:

AX:3433,BX:0003,CX:FF1E,DX:0202,

SI:0006,DI:0000,BP:FFA0,SP:00C8,EAX:00003433

给出各调指令在汇编后的形式:

MOVBX,0003

MOVSI,0006

MOVCL,1E

MOVDX,[000C]

MOVBP,[0011]

MOVAL,[SI+3]

MOVAH,[SI+BX+1]

MOVCH,[0012]

MOVSXEAX,AX

测试结果:

数据段中数据的存储:

依次执行每条程序指令后相应寄存器中的内容:

各调指令在汇编后的形式:

题目3

事先指出程序运行结束后,显示器显示的内容:

(NUM)=39H

若将NUM的定义改成如下形式:

NUM

DB

35

显示的结果是:

(NUM)=23H

若将NUM的定义改成如下形式:

NUM

DB

59

显示的结果是:

(NUM)=3BH

测试结果:

NUM

DB

00111001B

NUM

DB

35

NUM

DB

59

错误原因:

转化为十六进制数时,当需要转化的数小于10时,只需加上30H即可转化为该数字对应的ASCII码,当需要转化的数1大于9且小于16时,需要加上37H才能转化为对应的十六进制数,而源程序只考虑了小于10的情况

题目4

测试结果:

题目5(选做题)

测试结果:

八、体会

通过这次上机实验,提高了我对汇编程序源代码的阅读能力,也使我对与各种寻址方法用了更深的了解

17

TAG标签: