以下为《实验一 熟悉汇编语言环境及建立汇编的过程》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
实验一 熟悉汇编语言环境及建立汇编的过程
实验目的
熟悉汇编语言环境。
掌握汇编语言的上机过程。
了解汇编语言程序的编程格式。
实验要求
通过一个小程序的编写达到以上的实验目的。
实验原理
汇编语言程序的上机过程
用汇编语言编写的程序称为源程序,源程序也不能由机器直接执行,而必须翻译成机器代码组成的目标程序,这个翻译过程称为汇编。在微型机中,当前绝大多数情况下,汇编过程是通过软件自动完成的,用来把汇编语言编写的程序自动翻译成目标的软件叫汇编程序,汇编过程如下:
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字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《实验一 熟悉汇编语言环境及建立汇编的过程》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。