当前位置:文档之家› 实验一c121-田禹-125266

实验一c121-田禹-125266

汇编语言程序设计实验
实验一顺序与分支程序设计
一、实验目的
1) 掌握顺序程序设计方法。

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

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

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

二、实验内容
6)从键盘上接收一位十进制数X ,计算Y 值,并以十六进制形式显示出来,Y 按下列公式计算。

⎪⎪⎩⎪⎪⎨⎧===-=+=)
6(2/)
5()4(2)3(2222X X X X X X X X X X Y 7)从键盘上接收两个一位十六进制数X 和Y ,然后再输入一个A-D 之间的一个字符,按下列要求计算。

a)
当输入字符为A ,则计算X+Y ,并以十六进制形式显示出来 b)
当输入字符为B ,则计算|X-Y|,并以十六进制形式显示出来 c)
当输入字符为C ,则计算X*Y ,并以十六进制形式显示出来 d) 当输入字符为D ,则计算X/Y ,并以十六进制形式显示出来
三、实验设备
PC 机一台
四、实验准备
1) 分析题目,将程序中的原始数据和最终结果的存取方法确定好。

2) 画出流程图。

3) 写出源程序。

4) 对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。

五、实验步骤
1) 输入源程序。

2) 汇编、连接程序,生成.EXE文件,执行文件,检查结果。

六、源程序
6) DATA segment
X DB ?
TABLE DW L1,L2,L3,L4
DATA ends
CODE SEGMENT
assume cs:code,ds:data
START: MOV AX, D ATA
MOV DS, AX
MOV AH,1
INT 21H
CMP AL,33H
JB L
CMP AL,36H
JA L
AND AL,0FH
MOV X,AL
SUB AL,3
SHL AL,1
MOV AH,0
LEA BX,TABLE
ADD BX,AX
JMP [BX]
L1: MOV AL,X
MUL X
ADD AL,X
JMP L5
L2: MOV AL,X
MUL X
SUB AL,X
SUB AL,X
JMP L5
L3: MOV AL,X
MUL X
JMP L5
L4: MOV AL,X
MUL X
mov cl,4
SHR AL,cl
L5: MOV BL,AL
MOV CL,4
SHR AL,CL
CMP AL,9
JLE L6
ADD AL,7
l6:ADD AL,30H
MOV DL,AL
MOV AH,2
int 21H
MOV DL,BL
AND DL,0FH
CMP dL,9
JLE L7
ADD DL,7
L7: ADD DL,30H
MOV AH,2
INT 21H
L: MOV AH,4CH
INT 21H
CODE ENDS
END START
实验结果:
7)DATA SEGMENT
X DB ?
Y DB ?
Z DB ?
W DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX
XOR AX,AX
MOV AH,1
INT 21H
CMP AL,39H
JBE A
SUB AL,07H
A:SUB AL,30H MOV X,AL MOV AH,1
INT 21H
CMP AL,39H JBE B
SUB AL,07H
B:SUB AL,30H MOV Y,AL
MOV AH,1
INT 21H
AP:CMP AL,41H JNE BPP
XOR AL,AL MOV AL,X
ADD AL,Y
MOV W,AL
JMP OUT_PUT BPP:CMP AL,42H JNE CP
XOR AL,AL MOV AL,X
SUB AL,Y
CMP AL,0
JG OUT_PUT
NEG AL
MOV W,AL
JMP OUT_PUT
CP:CMP AL,43H
JNE DP
XOR AL,AL
MOV AL,X
MUL Y
MOV W,AL
JMP OUT_PUT
DP:XOR AX,AX
MOV AL,X
DIV Y
MOV W,AL
OUT_PUT:MOV DL,AL MOV CL,4
SHR DL,CL
CMP DL,9
JNP ONE
ADD DL,07H
ONE:ADD DL,30H
INT 21H
MOV DL,W
AND DL,0FH
CMP DL,9
JNA TWO
ADD DL,07H
TWO:ADD DL,30H
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验结果:
七、实验报告的要求
1) 说明程序中各部分所用的算法。

递归算法
2)说明所用到寄存器的功能。

1.数据寄存器
A .AX和AL 称为累加器,是算术运算的主要寄存器。

此外,所有的I/O指令都使用AX与外部设备传送信息。

B.BX称为基址寄存器,可以作为储存器指针使用。

C.CX称为循环计数器,在循环(LOOP)和串处理指令中存放循环的次数,在移位操作中CL用于保存移位的位数。

D.DX称为数据寄存器,在作双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位字。

此外,对某些I/O操作,DX可用来存放I/O端口地址。

2.段寄存器
A.CS中存放代码段的起始地址。

代码段是一段存储区域,代码段存放当前正在运行的程序。

B.DS中存放数据段的起始地址,数据段存放当前运行程序所用的数据。

如果程序中使用了串处理指令,则其源操作数也存放在数据段中。

3) 总结为什么在设计分支程序时必须解决三个问题:判断、转向和定标号
分支结构可分两分支结构和多分支结构。

分支程序设计需要解决三个问题:判断、定标号和转向。

两分支结构程序只有一个条件判断。

而多分支结构程序存在多个条件判断。

通常处理多分支结构,可以采用逻辑分解法和跳转表法
4) 说明标志位CF、SF和OF的意义。

1.CF进位标志位.记录运算时从最高有效位产生的进位值。

例如,执行加法指令时,最高
有效位有进位时置1,否则置0。

2.SF符号标志位。

记录运算结果的符号,结果为负时置1,否则置0。

3.OF溢出标志位。

在运算过程中,如操作数超出了机器能表示的范围则称为溢出。


时OF位置1,否则置0。

八、实验心得:
通过本次实验,我对汇编语言程序设计的方法和特点有了一点理解,并有以下心得体会。

1. 标号并不是一个独立于主程序的代码段,它只是标明了代码行指令的符号地址,如果指令中没有跳到某个标号的指令,那么这段代码是一直按顺序执行的,即使有标号存在。

2. 对于要从键盘中键入字符的指令,写一次指令,只能输入一个字符,若想输入几个字符,就要用几次指令,并且要及时将输入时存入AL中的内容转移到相应的存储位置,否则,将会在原来的基础上覆盖,则只能留下最后一次输入的结果。

总之,通过这第一次的实验,我觉得对汇编语言程序设计的感觉由茫然转变为了略知一二,通过自己对题目的反复尝试,也渐渐的有了编程的感觉,以后的实验中,一定会更加认真地体会这门课程的内涵与学习方法。

相关主题