河北工业大学汇编语言程序的设计实验.docx
《河北工业大学汇编语言程序的设计实验.docx》由会员分享,可在线阅读,更多相关《河北工业大学汇编语言程序的设计实验.docx(47页珍藏版)》请在冰豆网上搜索。
河北工业大学汇编语言程序的设计实验
汇编语言程序设计实验
网络******
实验一顺序与分支程序设计
一、实验目的
1)掌握顺序程序设计方法。
2)掌握分支程序的结构及分支程序的设计,调试方法。
2)学习数据传送及算术和逻辑运算指令的用法。
3)熟悉在pc机上建立、汇编、连接、调试和运行汇编语言程序的过程。
二、实验容
1.实验六
从键盘上接收一位十进制数x,计算y值,并以十六进制形式显示出来,y按下列公式计算。
2..实验七
实验容:
从键盘上接收两个一位十六进制数x和y,然后再输入一个a-d之间的一个字符,按下列要求计算。
a)当输入字符为a,则计算x+y,并以十六进制形式显示出来
b)当输入字符为b,则计算|x-y|,并以十六进制形式显示出来
c)当输入字符为c,则计算x*y,并以十六进制形式显示出来
d)当输入字符为d,则计算x/y,并以十六进制形式显示出来
3、实验代码
实验六
DATESEGMENT
XDB?
DATEENDS;数据段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATE
START:
MOVAX,DATE;代码段
MOVDS,AX;初始化ds寄存器
MOVAH,1
INT21H;读文件到缓冲区
CMPAL,33H;比较指令
JBL0;A
CMPAL,36H
JAL0
ANDAL,0FH;逻辑与指令
MOVX,AL;al给x
MOVAL,X
CMPAL,3H
JEL1;执行L1命令
CMPAL,4H
JEL4;执行L4命令
CMPAL,5H
JEL6;执行L6命令
CMPAL,6H
JEL7;执行L7命令
L1:
MULAL
ADDAL,X;al+x
L5:
MOVBL,AL
MOVCL,4
SHRAL,CL;移位指令
CMPAL,9
JLEL2;转移指令。
小于或等于,或者不大于则转移
ADDAL,7
L2:
ADDAL,30H;寄存器al加0x30
MOVDL,AL
MOVAH,2;把2放入ah里
INT21H
ANDBL,0FH;逻辑与运算指令
CMPBL,9
JLEL3
ADDBL,7;相加
L3:
ADDBL,30H
MOVDL,BL
MOVAH,2
INT21H
JMPL0
L4:
MULAL
SUBAL,X
SUBAL,X
JMPL5
L6:
MULAL
JMPL5
L7:
MULAL
SHRAL,1
JMPL5
L0:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验七
DATASEGMENT
XDB0
YDB0
WDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
XORAX,AX
MOVAH,1
INT21H
CMPAL,39H
JBEL1
SUBAL,07H
L1:
SUBAL,30H
MOVX,AL
MOVAH,1
INT21H
CMPAL,39H
JBEL2
SUBAL,07H
L2:
SUBAL,30H
MOVY,AL
MOVAH,1
INT21H
A:
CMPAL,41H
JNEB
XORAL,AL
MOVAL,X
ADDAL,Y
MOVW,AL
JMPL3
B:
CMPAL,42H
JNEC
XORAL,AL
MOVAL,X
SUBAL,Y
MOVW,AL
CMPAL,0
JGL3
NEGAL
MOVW,AL
JMPL3
C:
CMPAL,43H
JNED
XORAL,AL
MOVAL,X
MULY
MOVW,AL
JMPL3
D:
XORAX,AX
MOVAL,X
DIVY
MOVW,AL
L3:
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JNAL4
ADDDL,07H
L4:
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,W
ANDDL,0FH
CMPDL,9
JNAL5
ADDDL,07H
L5:
ADDDL,30H
MOVAH,02H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4、实验结果:
实验六结果
实验七结果
5、实验心得:
(1)通过实验使我知道了和熟悉了汇编程序设计的步骤
1.建立数学模型遇到一个题目,首先要进行全面的分析,根据问题提出的条件,特点,找出规律,找出问题的数学模型或者制定解决问题的规律。
2.绘制程序流程图流程图能够把比较抽象的问题变得而形象化,并且有助于理清楚思路,便于程序的编制,在程序的易读性和易维护性上有很大的帮助。
3.合理分配存储空间和寄存器汇编语言能够直接的调用存储器和寄存器。
程序运行时,大两量的数据,中间结果或最后的结果都存放在存储器中,且运行的程序目标代码在存储器中,节约空间是一个好的程序应该注意的问题。
4.编制程序根据语法指令编制程序
5.人工检查用人工的方式检查程序是否有错,并及时的改正。
6.上机调试只有通过上机才能验证程序是否正确,经过反复的运行调试,才能得到正确的程序。
(2)掌握了分支程序的结构及分支程序的设计,调试方法和数据传送及算术和逻辑运算指令的用法。
汇编语言程序设计实验
网络******
实验二循环与子程序程序设计
一、实验目的
1)加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5)掌握子程序设计、编制及调试。
6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验容
1)编制在屏幕上显示九九乘法表的程序。
2)编制在屏幕上显示用*组成的三角形的程序。
3、实验代码
实验一
DATASEGMENT
S2DB?
S1DB?
XDB1
YDB1
SDB0AH
FCH=2AH
FDH=3DH
FKG=20H
FHH=0AH
FHC=0DH
DATAENDS
STACK1SEGMENTSTACK
DB20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVCL,9
LL1:
PUSHCX;将CL压入堆栈段
MOVCL,Y
LL2:
CALLL1;调用子程序L1
INCX
LOOPLL2
MOVX,1
INCY
MOVDL,FHH;输出换行和回车
MOVAH,2
INT21H
MOVDL,FHC
MOVAH,2
INT21H
POPCX;从堆栈段中取出CL
LOOPLL1
MOVAH,4CH;程序结束
INT21H
L1PROC;计算X*Y=Z并且输出X*Y=Z的子程序
MOVDL,X
ADDDL,30H
MOVAH,2
INT21H
MOVDL,FCH
MOVAH,2
INT21H
MOVDL,Y
ADDDL,30H
MOVAH,2
INT21H
MOVDL,FDH
MOVAH,2
INT21H
MOVAL,X
MULY
DIVS
MOVS1,AH
ADDAL,30H
MOVDL,AL
MOVAH,2
INT21H
ADDS1,30H
MOVDL,S1
MOVAH,2
INT21H
MOVDL,FKG;输出空格
MOVAH,2
INT21H
RET
L1ENDP;子程序结束
CODEENDS
ENDSTART
实验二
DATASEGMENT
NDB?
FCH=2AH
FDH=3DH
FKG=20H
FHH=0AH
FHC=0DH
DATAENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAH,1;输入一位16进制数确定输出行数INT21HCMPAL,39HJBEL1SUBAL,07H
L1:
SUBAL,30HMOVN,AL
XORBX,BX
MOVDL,FCH
MOVCL,N
MOVDL,FHH;输出换行和回车
MOVAH,2
INT21H
MOVDL,FHC
MOVAH,2
INT21H
LOP:
PUSHCX
INCBL
MOVCL,BL
MOVDL,FCH
LOP2:
MOVAH,02H
INT21H
LOOPLOP2
POPCX
MOVDL,0AH
MOVAH,02H
INT21H
MOVDL,FHC
MOVAH,02H
INT21H
CMPBL,9
JZL2
LOOPLOP
L2:
MOVAH,4CH;程序结束
INT21H
CODESENDS
ENDSTART
4、实验结果:
实验一结果
实验二结果
5、实验心得
6、循环程序由初始化部分、循环部分、调整部分、控制部分组成
1〉两种方式,一种是先判断在执行,另一种是先执行再判断。
2〉两种控制循环的方式
a〉计数控制循环
一般使用LOOP指令,要先将循环的次数放入CX中,在多重循环的计数控制中要注保存和复原上一次循环的断点信息,在保留和复原时可以使用堆栈进行处理。
自认为可以理解为一根盘绕了确定的圈数的绳子,又进入的头,又出去的尾。
b〉条件控制循环
一般使用JMP指令使程序跳到这一段的开头,用CMP在循环中进行比较判断,再根据程序要求,选择适当的转移条件,跳出循环。
自认为可以理解为一圆形的导轨,并在导轨上设置一个初口,在符合条件时就在导轨上脱离,否则,将会在导轨上一直的转下去。
3〉再循环中可以同时使用两者,当即已知循环的次数限制围,但又要求在符合条件时结束循环是,就要同时使用两者。
7、子程序的使用大大的简化了程序设计的思路,在完成一个程序时,可以简单的把一个程序划分为几个完整的几部分,使每一部分独立的完成特定的一部分和计算任务。
子程序的使用还可以大大的减小程序的体积,在一程序中,如果需要多次反复的是用某一段代码的话,就可以将这段代码设定为子程序,以后想使用时,只要一CALL再一RET就OK啦。
我认为使用子程序的关键在于明白子程序的机理,明白子程序是如何保存和恢复断点的信息的,只有真正的理解了这一点才能更好地利用好子程序。
子程序的参数传递的方式有很多种,但是在堆栈段传递参数时,应该注意使用带立即数的返回的方式,在利用寄存器BP访问堆栈段来取得参数。
汇编语言程序设计实验
网络******
实验三算术运算与代码转换程序设计
一、实验目的
1)掌握算术运算程序的设计方法。
2)掌握代码转换程序的设计方法。
3)进一步掌握各种程序结构。
4)熟练掌握和使用用DEBUG调试程序。
二、实验容
1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。
2)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。
3)编写程序把从键盘输入的以回车为结束符的字符串中的空格去掉并按相反的顺序输出。
三实验代码、
实验1
DATASEGMENT
NUM1DB22H,33H,44H,55H,66H,77H
NUM1LDB6H
NUM2DB22H,22H,22H,22H
NUM2LDB4H
OUTCOME1DB10HDUP(0)
OUTCOME2DB10HDUP(0)
NDB0H
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVCH,0
MOVSI,OFFSETNUM1
MOVDI,OFFSETNUM2
MOVAH,NUM1L
MOVAL,NUM2L
CMPAH,AL
JAECHA
XCHGSI,DI
XCHGAH,AL
CHA:
SUBAH,AL
MOVCL,AL
CLC
MOVBX,OFFSETOUTCOME1
LOP1:
MOVAL,[DI]
PUSHCX
MOVCL,[SI]
ADCCL,AL
MOV[BX],CL
INCBX
INCSI
INCDI
POPCX
LOOPLOP1
MOVCL,AH
JCXZLOP3
LOP2:
PUSHCX
MOVCL,BYTEPTR[SI]
ADCCL,0
MOV[BX],CL
POPCX
INCBX
INCSI
LOOPLOP2
LOP3:
MOVCH,0
MOVSI,OFFSETNUM1
MOVDI,OFFSETNUM2
MOVAH,NUM1L
MOVAL,NUM2L
CMPAH,AL
JAECHA1
XCHGSI,DI
XCHGAH,AL
CHA1:
SUBAH,AL
MOVCL,AL
CLC
MOVBX,OFFSETOUTCOME2
LOP11:
MOVAL,[DI]
PUSHCX
MOVCL,[SI]
SBBCL,AL
MOV[BX],CL
INCBX
INCSI
INCDI
POPCX
LOOPLOP11
MOVCL,AH
JCXZLOP7
LOP21:
PUSHCX
MOVCL,BYTEPTR[SI]
SBBCL,0
MOV[BX],CL
POPCX
INCBX
INCSI
LOOPLOP21
LOP7:
MOVDI,OFFSETOUTCOME1
ADDDI,10H
MOVCX,11H
LOP4:
MOVDL,[DI]
DECDI
CMPN,0H
JNELOP5
CMPDL,0H
JELOP9
LOP5:
PUSHDX
PUSHCX
MOVCL,4H
SHRDL,CL
POPCX
CMPDL,9H
JBELOP6
ADDDL,7H
LOP6:
ADDDL,30H
MOVAH,2
INT21H
MOVN,1H
POPDX
ANDDX,0FH
CMPDL,9H
JBELOP8
ADDDL,7H
LOP8:
ADDDL,30H
MOVAH,2
INT21H
MOVDL,'H'
MOVAH,2
INT21H
LOP9:
LOOPLOP4
MOVN,0
MOVDI,OFFSETOUTCOME2
ADDDI,10H
MOVCX,11H
LOP14:
MOVDL,[DI]
DECDI
CMPN,0H
JNELOP15
CMPDL,0H
JELOP19
LOP15:
PUSHDX
PUSHCX
MOVCL,4H
SHRDL,CL
POPCX
CMPDL,9H
JBELOP16
ADDDL,7H
LOP16:
ADDDL,30H
MOVAH,2
INT21H
MOVN,1H
POPDX
ANDDX,0FH
CMPDL,9H
JBELOP18
ADDDL,7H
LOP18:
ADDDL,30H
MOVAH,2
INT21H
MOVDL,'H'
MOVAH,2
INT21H
LOP19:
LOOPLOP14
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验2
DATASEGMENT
TISHI1DB'Pleaseenterthefirstnumber:
','$'
TISHI2DB'Pleaseenterthesecondnumber:
','$'
JIADB'+','$'
JIANDB'-','$'
CHENGDB'*','$'
CHUDB'/','$'
DENGDB'=','$'
YUDB'......','$'
ADB10
BDW10
CDW10000
FDW0H
NUM1DW0H
NUM2DW0H
NDB0H
N1DB4H
DATAENDS
STACK1SEGMENTSTACK
DW30HDUP(0)
STACK1ENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETTISHI1
MOVAH,09H
INT21H
LOOP2:
MOVAX,NUM1
MULB
MOVBX,AX
MOVAH,1
INT21H
CMPAL,0DH
JELOP1
MOVNUM1,BX
MOVAH,0
SUBAL,30H
ADDNUM1,AX
JMPLOOP2
LOP1:
MOVDL,0AH;输出换行和回车
MOVAH,2
INT21H
MOVDL,0DH
MOVAH,2
INT21H
MOVDX,OFFSETTISHI2
MOVAH,09H
INT21H
LOOP1:
MOVAX,NUM2
MULB
MOVBX,AX
MOVAH,1
INT21H
CMPAL,0DH
JELOP3
MOVNUM2,BX
MOVAH,0
SUBAL,30H
ADDNUM2,AX
JMPLOOP1
LOP3:
MOVDL,0AH;输出换行和回车
MOVAH,2
INT21H
MOVDL,0DH
MOVAH,2
INT21H
MOVN,0
MOVDX,NUM1
MOVF,DX
LOP6:
MOVDX,0H
MOVAX,F
DIVB
PUSHDX
INCN
CMPAX,0H
JELOP7
MOVF,AX
JMPLOP6
LOP7:
MOVCL,N
MOVCH,0
LOP16:
POPDX
ADDDX,30H
MOVAH,2
INT21H
LOOPLOP16
MOVDX,NUM2
MOVF,DX
MOVN,0
MOVDX,OFFSETJIA
MOVAH,09H
INT21H
LOOOP6:
MOVDX,0H
MOVAX,F
DIVB
PUSHDX
INCN
CMPAX,0H
JELOOOP7
MOVF,AX
JMPLOOOP6
LOOOP7:
MOVCL,N
MOVCH,0
LOOOP16:
POPDX
ADDDX,30H
MOVAH,2
INT21H
LOOPLOOOP16
MOVDX,OFFSETDENG
MOVAH,09H
INT21H
MOVN,0
LOOP3:
MOVAX,NUM1
ADDAX,NUM2
MOVF,AX
LOOP4:
MOVDX,0H
MOVAX,F
DIVB
PUSHDX
INCN
CMPAX,0H
JELOOP5
MOVF,AX
JMPLOOP4
LOOP5:
MOVCL,N
MOVCH,0
LOOP0:
POPDX
ADDDX,30H
MOVAH,2
INT21H
LOOPLOOP0
MOVDL,0AH;输出换行和回车
MOVAH,2
INT21H
MOVDL,0DH
MOVAH,2
INT21H
MOVN,0
MOVDX,NUM1
MOVF,DX
LOP61:
MOVDX,0H
MOVAX,F
DIVB
PUSHDX
INCN
CMPAX,0H
JELOP71
MOVF,AX
JMPLOP61
LOP71:
MOVCL,N
MOVCH,0
LOP161:
POPDX
ADDDX,30H
MOVAH,2
INT21H
LOOPLOP161
MOVDX,NUM2
MOVF,DX
MOVN,0
MOVDX,OFFSETJIAN
MOVAH,09H
INT21H
LOOOP61:
MOVDX,0H
MOVAX,F
DIVB
PUSHDX
INCN
CMPAX,0H
JELOOOP71
MOVF,AX
JMPLOOOP61
LOOOP71:
MOVCL,N
MOVCH,0
LOOOP161:
POPDX
ADDDX,30H
MOVAH,2
INT21H
LOOPLOOOP161
MOVDX,OFFSETDENG
MOVAH,09H
INT21H
MOVN,0
MOVN,0
MOVAX,NUM1
SUBAX,NUM2
MOVF,AX
ANDAX,10000000B
CMPAX,10000000B
JNELOOP6
NEGF
LOOP6:
MOVDX,0
MOVAX,F
DIVB
PUSHDX
INCN
CMPAX,0H
JELOOP7
MOVF,AX
JMPLOOP6
LOOP7:
MOVCL,N
MOVCH,0
LOOP16:
POPDX
ADDDX,30H
M