太原理工大学硬件实验4
本科实验报告
课程名称: 计算机硬件基础
实验项目: 实验四 汇编语言程序设计:综合程序设计实验
实验地点: 逸夫楼202与计算机硬件实验室701
专业班级: 软件*** 学号: ********
学生姓名: ***
指导教师: 高劲松
2013年 5月17日
实验名称:实验四 汇编语言程序设计:综合程序设计实验 实验目的和要求:
1(通过分支程序设计、循环程序设计实验,掌握无条件转移指令、条件转移指令的格
式、功能及使用方法。
2(掌握分支程序的结构、单分支和多分支程序的设计方法。
3(了解循环程序的基本结构和控制循环的方法。
4(掌握通过DOS中断调用使用键盘和显示器的方法。 实验内容和原理:
1(预习汇编程序上机操作的全过程。
编写一个汇编语言源程序;以下是MASM5环境中运行步骤:(同学们也可以使用CV集成
编译环境)
(1)在dos环境下,如:d:\masm\ 下输入命令:edit
(2)打开编辑窗口
(3)输入如下原程序后保存文件,例如 exp1.asm
(4)输入下列指令进行编译: d:\masm\ masm exp1.asm回车
检查错误,如结果为0错误 0警告则编译成功,产生exp1.obj文件
(5)输入下列指令进行链接: d:\masm\link exp1.obj回车
如结果为0错误 0警告则链接成功,产生exp1.exe文件
(6)运行程序检验结果。d:\masm\ exp1回车
2(对已经汇编连接成功的可执行文件,使用DEBUG命令调试程序找出程序的断点,执行
程序,显示有关寄存器、存储单元的内容,分析程序的结果。 主要仪器设备:HP6460b笔记本
实验记录:
1.编写一个汇编程序,要求对键盘输入的大写字母用小写字母显示出来,键盘输入的小写字
母用大写字母显示出来。
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
X DB 0;
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AH,01H
INT 21H
CMP AL,'a'
JNL NEXT
MOV X,'a'-'A'
ADD X,AL
MOV AH,02H
MOV DL,X
INT 21H
MOV AH,4CH
INT 21H
NEXT: MOV X,'A'-'a'
ADD X,AL
MOV AH,02H
MOV DL,X
INT 21H
MOV AH,4CH
CODE ENDS
END START
2. 编写一个汇编程序,使得从键盘上输入十个以内的字符,以输入空格结束,然后按数
字、字母和其它符号三类统计各自的个数,在屏幕上依次显示出统计结果。
STACK SEGMENT STACK DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
X DB '0'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
SUB AX,AX
MOV BX,0
MOV DX,0
MOV CX,10
AA1: CMP CX,0
JZ STOP
MOV AH,1
INT 21H
CMP AL,20H
JB STOP
CMP AL,'0'
JB CC2
CMP AL,'9'
JA CC1
INC BH
JMP NEXT1 CC1: CMP AL,'A'
JB CC2
CMP AL,'Z'
JB NEXT
CMP AL,'a'
JB CC2
CMP AL,'z'
JA CC2
NEXT: INC BL
JMP NEXT1 CC2: INC DH NEXT1: LOOP AA1
STOP: MOV AH,2
MOV DL,BH
ADD DL,X
INT 21H
MOV AH,2
MOV DL,BL
ADD DL,X
INT 21H
MOV AH,2
MOV DL,DH
ADD DL,X
INT 21H
MOV AX,4C00H
INT 21H4 CODE ENDS END START
实验结果和分析:
:
由实验运行可知,上述两个程序正确。
其中也由于一些编码时的粗心大意而导致一些错误。如在程序端未加 MOV AX,4C00H
INT 21H
而将出现一些无缘无故的错误。并且一般而言使用中断时,必须有栈段。 还有一些小的错误等。
体会:通过使用-u来进行反编译也是一种很好的进行测试的方法。并且对于一些并不熟悉的ASCALL码有时可以通过直接用字符的方法去做,省去记忆字符。