实验一 熟悉汇编语言环境及建立汇编的过程

本文由用户“hjw01592”分享发布 更新时间:2022-04-02 14:13:53 举报文档

以下为《实验一 熟悉汇编语言环境及建立汇编的过程》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

实验一 熟悉汇编语言环境及建立汇编的过程

实验目的

熟悉汇编语言环境。

掌握汇编语言的上机过程。

了解汇编语言程序的编程格式。

实验要求

通过一个小程序的编写达到以上的实验目的。

实验原理

汇编语言程序的上机过程

用汇编语言编写的程序称为源程序,源程序也不能由机器直接执行,而必须翻译成机器代码组成的目标程序,这个翻译过程称为汇编。在微型机中,当前绝大多数情况下,汇编过程是通过软件自动完成的,用来把汇编语言编写的程序自动翻译成目标的软件叫汇编程序,汇编过程如下:

2.汇编、连接过程

实验步骤

打开编辑环境

输入程序

CODE SEGMENT

ASSUME CS:CODE

START: MOV AL,01H

MOV BL,40H

ADD AL,BL

MOV DL,AL

MOV AH,02H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

保存源程序,以.ASM为扩展名。C:\MASM\1.ASM

建立汇编过程

用宏汇编程序汇编源程序C:\MASM>MASM 1.ASM

汇编程序有3个输出文件【.obj】文件,【.LST】文件,【.CRF】文件,.OBJ文件是我们所需要的文件。汇编程序还有另外一个重要功能:可以给出源程序中的错误信息。

用连接程序将OBJ文件转换为可执行的EXE文件C:\MASM>LINK 1.OBJ

执行程序:C:\MASM>1.EXE

实验二 两个多位十进制数相加的实验

一 、实验目的:

1.学习数据传送和算术运算指令的用法。

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

二 、实验内容:

  将两个多位十进制数相加。要求加数和被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

三、 程序框图

 四、实验原理

1.ADC 带进位相加指令的功能和指令格式

2.AAA 、DAA、 AAS、 DAS指令的功能和指令格式

3.伪指令SEGMENT 、ENDS、 ASSUME、MACRO、ENDM的使用

4.子程序的定义(PROC NEAR/FAR ENDP),以及子程序调用和返回指令:CALL、RET的使用

5.循环指令LOOP的格式以及退出循环的条件

6.中断指令的使用

五、实验参考程序

CRLF MACRO ;建立回车换行宏

MOV DL,0DH

MOV AH,02H

INT 21H

MOV DL,0AH

MOV AH,02H

INT 21H

ENDM

DATA SEGMENT ;数据段

DATA1 DB 33H,39H,31H,37H,34H ;第一个数据(作为加数)

DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为被加数)

DATA ENDS

CODE SEGMENT ;代码段

ASSUME CS:CODE,DS:DATA,ES:DATA

START: MOV AX,DATA

MOV DS,AX

MOV SI,OFFSET DATA2

MOV BX,05

CALL DISPL ;显示被加数

CRLF

MOV SI,OFFSET DATA1

MOV BX,05

CALL DISPL ;显示加数

CRLF

MOV DI,OFFSET DATA2

CALL ADDA ;加法运算

MOV SI,OFFSET DATA1

MOV BX,05

CALL DISPL ;显示结果

CRLF

MOV AX,4C00H

INT 21H

DISPL   PROC NEAR ;显示子程序段

DS1:  MOV AH,02H

 MOV DL,[SI+BX-1] ;显示字符串中的一个字符

  INT 21H

 DEC BX ;修改偏移量

  JNZ DS1

 RET

DISPL  ENDP

ADDA   PROC NEAR

MOV DX,SI

MOV BP,DI

MOV BX,05

AD1: SUB BYTE PTR[SI+BX-1],30H ;将ASCII码表示的数字串

SUB BYTE PTR[DI+BX-1],30H ;转化位十六进制的字符串

DEC BX

JNZ AD1

MOV SI,DX

MOV DI,BP

MOV CX,05 ;包括进位位共5位

CLC ;清进位位

AD2: MOV AL,[SI]

MOV BL,[DI]

ADC AL,BL ;带进位相加

AAA ;非组合BCD码的加法调整

MOV [SI],AL ;结果送加数区

INC SI

INC DI ;指向下一位

LOOP AD2 ;循环

MOV SI,DX

MOV DI,BP

MOV BX,05

AD3: ADD BYTE PTR[SI+BX-1],30H ; 十六进制的数字串转化

ADD BYTE PTR[DI+BX-1],30H ; 为ASCII码表示的数字串

DEC BX

JNZ AD3

RET

ADDA ENDP

CODE ENDS

END START

六、实验步骤

1.按实验要求编写程序

2.汇编连接程序生成可执行文件

3. 执行程序观察结果

七、拓展练习

编写程序完成两个多位十进制数相减。要求显示结果格式为: 被减数

减数

相减结果

实验三 字符串匹配程序

一 、 实验目的:

掌握显示提示信息的方法及接收键盘输入信息的方法。

二 、 实验内容:

编写程序,实现两个字符串的比较。如相同,则显示“MATCH”,否则,显示”NO MATCH”。

三 、 程序框图



四 、 实验原理

DB、 DUP、 EQU等伪指令的功能以及使用格式

INT 21H 的09H子功能的功能、工作情况以及使用格式

INT 21H的0AH子功能的功能、工作情况以及使用格式

串扫描指令SCASB的功能以及使用格式

入栈、出栈指令PUSH 、POP的使用情况

五 、 实验参考程序

CRLF MACRO

MOV AH,02H

MOV DL,0DH

INT 21H

MOV AH,02H

MOV DL,0AH

INT 21H

ENDM

DATA SEGMENT

MESS1 DB 'MATCH',0DH,0AH,'$'

MESS2 DB 'NO MATCH',0DH,0AH,'$'

MESS3 DB 'INPUT STRING1:',0DH,0AH,'$'

MESS4 DB 'INPUT STRING2:',0DH,0AH,'$'

MAXLEN1 DB 81

ACTLEN1 DB ?

STRING1 DB 81 DUP(?)

MAXLEN2 DB 81

ACTLEN2 DB ?

STRING2 DB 81 DUP(?)

DATA ENDS

STACK SEGMENT

STA DB 20 DUP(?)

TOP EQU LENGTH STA

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AX,DATA

MOV ES,AX

MOV AX,STACK

MOV SS,AX

MOV SP,TOP ;段寄存器及堆栈初始化

MOV AH,09H

MOV DX,OFFSET MESS3

INT 21H ;显示输入提示1

MOV AH,0AH

MOV DX,OFFSET MAXLEN1

INT 21H ;接收键入的字符串1

CRLF ;回车换行

MOV AH,09H

MOV DX,OFFSET MESS4

INT 21H ;显示输入提示2

MOV AH,0AH

MOV DX,OFFSET MAXLEN2

INT 21H ;接收键入的字符串2

CRLF

CLD

MOV SI,OFFSET STRING1

MOV CL,[SI-1]

MOV CH,00H ;字符串1的实际字符数送CX

KKK: MOV DI,OFFSET STRING2

PUSH CX

MOV CL,[DI-1]

MOV CH,00H ;字符串2的实际字符数送CX

MOV AL,[SI]

MOV DX,DI

REPNZ SCASB ;将串1中的一个字符和串2中的所有字符作比较

JZ GGG ;比较相等转GGG

INC SI ;从串1中取下一个字符

POP CX

LOOP KKK

MOV AH,09H

MOV DX,OFFSET MESS2

INT 21H ;显示‘NO MATCH'

JMP PPP

GGG: MOV AH,09H

MOV DX,OFFSET MESS1

INT 21H ;显示'MATCH'

PPP: MOV AX,4C00H

INT 21H ;返回DOS

CODE ENDS

END START

六 实验步骤

1.按实验要求编写程序

2.汇编连接程序生成可执行文件

3.执行程序观察结果

七、拓展练习

编写程序,实现两个字符串的比较。如字符长度相同并且对应字符顺序相同,则显示“MATCH”,否则,显示“NO MATCH”。

实验四 字符和数据的显示程序

实验目的

掌握字符和数据的显示方法。

实验内容

先显示信息“INPUT STRING ,THE END FLAG IS $”,再接收字符。如为非数字字符即非“0——9”,则计数器加1,并显示字符。如为数字,则直接显示,但不计数。

程序框图

Y

N Y

N

实验原理

1.程序跳转指令JMP的功能及用法

2.比较指令CMP 、JB、 JBE等指令的功能及用法

3.循环移位指令ROL的用法及功能

4.逻辑指令AND的功能及用法

实验参考程序

CRLF MACRO

MOV AH,02H

MOV DL,0DH

INT 21H

MOV AH,02H

MOV DL,0AH

INT 21H

ENDM

DATA SEGMENT

MESS1 DB ‘INPUT STRING,THE END FLAG IS $’

MESS2 DB ‘NON-DIGITAL CHAR COUNT=$’

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA

START: MOV AX,DATA

MOV DS,AX

MOV ES,AX ;初始化

MOV BX,0000H ;计数值清0

MOV AH,09H

MOV DX,OFFSET MESS1

INT 21H

MOV AH,02H

MOV DL,‘$’

INT 21H ;显示提示信息

CRLF

XXX: MOV AH,01H

INT 21H ;接收键入字符

CMP AH,‘$’

JZ UUU ;是‘$’字符则转UUU

CMP AL,0DH

JNZ III

CRLF ;是回车则回车换行

JMP VVV

III: CMP AL,30H

JB YYY

CMP AL,39H

JBE VVV ;非‘0’——‘9’转YYY

YYY: INC BX ;计数值加1

VVV: JMP XXX

UUU: CRLF

MOV AH,09H

MOV DX,OFFSET MESS2

INT 21H ;显示表头

MOV AX,BX

CALL DISP ;显示结果

MOV AH,02H

MOV DL,‘H’

INT 21H 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 区中

INC SI ;指针加1

JMP GGG

BBB: MOV [BX+SI],AL

MOV AL,0AH

MOV [BX+SI+1],AL ;加入换行符

MOV AL,'$'

MOV [BX+SI+2],AL ;再加一个'$'标志字符

MOV AH,09H

MOV DX,BX

INT 21H ;显示转换后的字符串

JMP KKK

PPP: MOV AH,4CH

INT 21H

CODE ENDS

END START

实验步骤

1、按实验要求编写程序

2、汇编连接程序生成可执行文件

3、执行程序观察结果

七、拓展练习

编写程序,接收键盘字符(以^-C为结束),并将其中的大写字母转变为小写字母,然后进行显示。

[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]

以上为《实验一 熟悉汇编语言环境及建立汇编的过程》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览