实验六报告.docx
- 文档编号:24822140
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:25
- 大小:21.03KB
实验六报告.docx
《实验六报告.docx》由会员分享,可在线阅读,更多相关《实验六报告.docx(25页珍藏版)》请在冰豆网上搜索。
实验六报告
实验6模块化程序设计
一.实验目的:
(1)熟悉子程序库的建立步骤。
(2)熟悉对库文件的修改(添加、删除)。
二.实验内容:
主模块A编程:
设计一个能实现加、减、乘、除计算的程序,要求该程序接受从键盘输入的两个十六进制数,调用相应的程序模块执行相应的计算后,计算结果以十六进制数输出。
模块B编程:
实现两个十六进制数相加。
模块C编程:
实现两个十六进制数相减。
模块D编程:
实现两个十六进制数相乘。
模块E编程:
实现两个十六进制数相除。
(1)将各模块分别汇编为.OBJ文件;
(2)应用LIB命令建立子程序库TST.LIB,里面包含BINHEX.OBJ和HEXD.OBJ。
(3)将各模块ZHSY2_3_A.OBJ、ADDOPT.OBJ、SUBOPT.OBJ、MULOPT.OBJ、DIVOPT.OBJ、INNUM.OBJ、OUTNUM.OBJ和子程序库TST.LIB相连接为一个可执行程序ZHSY2_3_A.EXE。
(4)应用DEBUG命令调试ZHSY2_3_A.EXE,注意调试时T命令和P命令的应用。
1、编译:
c:
\masm.asm
2、链接:
c:
\link.obj
3、调试:
c:
\debug.exe
4、运行:
c:
\.exe
(1)1、编译:
子程序C:
\masm.asm
c:
\masm>masm6-1
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-1.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50352+415152Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-2
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-2.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50394+415110Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-3
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-3.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50394+415110Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-4
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-4.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50394+415110Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-5
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-5.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50432+415072Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-6
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-6.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50356+415148Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-7
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-7.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50356+415148Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-8
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-8.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50356+415148Bytessymbolspacefree
0WarningErrors
0SevereErrors
c:
\masm>masm6-9
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[6-9.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50356+415148Bytessymbolspacefree
0WarningErrors
0SevereErrors
2、建立子程序库:
c:
\lib
c:
\masm>lib
Microsoft(R)LibraryManagerVersion3.02
Copyright(C)MicrosoftCorp1983,1984,1985.Allrightsreserved.
Libraryname:
tst.lib
Operations:
+6-4+6-5
error2000:
Stackoverflow
出现栈溢出错误,不知如何改正。
3、链接:
C:
\link.obj
c:
\masm>link
Microsoft(R)OverlayLinkerVersion3.65
Copyright(C)MicrosoftCorp1983-1988.Allrightsreserved.
ObjectModules[.OBJ]:
6-1+6-2+6-3+6-6+6-7+6-8+6-9/pause
RunFile[6-1.EXE]:
ListFile[NUL.MAP]:
Libraries[.LIB]:
LINK:
warningL4021:
nostacksegment
LINK:
errorL2029:
Unresolvedexternals:
ERRORinfile(s):
6-2.OBJ(6-2.ASM)
BINHEXinfile(s):
6-3.OBJ(6-3.ASM)
Therewere2errorsdetected
链接子程序的.obj文件时,出现无法解析的外部命令,经几番研究,还是无法找出其原因。
4、调试:
c:
\debug6-1.exe
1)、先用命令U反汇编整个程序,查看每条指令的物理地址
C:
\masm>debug6-1.exe
-u
1443:
0000B82E14MOVAX,142E数据段的首地址是:
142E代码段的首地址是:
1443
1443:
00038ED8MOVDS,AX
1443:
0005B90900MOVCX,0009
1443:
0008BB0000MOVBX,0000
1443:
000B8BD3MOVDX,BX
1443:
000DB409MOVAH,09
1443:
000FCD21INT21
1443:
001183C314ADDBX,+14
1443:
0014E2F5LOOP000B
1443:
0016B401MOVAH,01
1443:
0018CD21INT21
1443:
001A3C31CMPAL,31
1443:
001C741DJZ003B
1443:
001E3C32CMPAL,32
2)、从上一步结果中找到数据段的首地址142E,查看里面存储的数据:
-d142E:
0000
142E:
000041726974686D6574-69632050726F7261ArithmeticProra
142E:
00106D0D0A242A2A2A2A-2A2A2A2A2A2A2A2Am..$************
142E:
00202A2A2A2A2A2A2A2A-2A2A2A0D0A242020***********..$
142E:
0030312E202041646469-74696F6E202020201.Addition
142E:
004020090D0A24202032-2E20205375627472...$2.Subtr
142E:
00506174696F6E202020-200D0A242020332Eation..$3.
142E:
006020204D756C746970-6C69636174696F6EMultiplication
142E:
007020090D0A24202034-2E20204469766973...$4.Divis
-
-d142E:
0080
142E:
0080696F6E2020202020-090D0A242020302Eion...$0.
142E:
00902020457869742020-2020202020202009Exit.
142E:
00A00D0A242A2A2A2A2A-2A2A2A2A2A2A2A2A..$*************
142E:
00B02A2A2A2A2A2A2A2A-2A2A0D0A24202020**********..$
142E:
00C020496E7075742079-6F75722063686F69Inputyourchoi
142E:
00D063653A20240D0A49-6E70757420657272ce:
$..Inputerr
142E:
00E06F722C2061676169-6E20656E7465723Aor,againenter:
142E:
00F020240D0A496E7075-7420612068657820$..Inputahex
-d142E:
00f0
142E:
00F020240D0A496E7075-7420612068657820$..Inputahex
142E:
01006E756D6265723A20-240D0A496E707574number:
$..Input
142E:
0110206120686578206E-756D626572206167ahexnumberag
142E:
012061696E3A20240D0A-546865206F706572ain:
$..Theoper
142E:
01306174696F6E207265-73756C742069733Aationresultis:
142E:
01402024000000000000-00000D0A24000000$..........$...
142E:
0150B82E148ED8B90900-BB00008BD3B409CD................
142E:
01602183C314E2F5B401-CD213C31741D3C32!
........!
<1t.<2
3)、用T命令单步执行,看寄存器AX,DS,ES的内容的变化
-t
AX=142EBX=0000CX=02ADDX=0000SP=0000BP=0000SI=0000DI=0000
DS=141EES=141ESS=142ECS=1443IP=0003NVUPEIPLNZNAPONC
1443:
00038ED8MOVDS,AX
-t
AX=142EBX=0000CX=02ADDX=0000SP=0000BP=0000SI=0000DI=0000
DS=142EES=141ESS=142ECS=1443IP=0005NVUPEIPLNZNAPONC
1443:
0005B90900MOVCX,0009
-t
AX=142EBX=0000CX=0009DX=0000SP=0000BP=0000SI=0000DI=0000
DS=142EES=141ESS=142ECS=1443IP=0008NVUPEIPLNZNAPONC
1443:
0008BB0000MOVBX,0000
-t
AX=142EBX=0000CX=0009DX=0000SP=0000BP=0000SI=0000DI=0000
DS=142EES=141ESS=142ECS=1443IP=000BNVUPEIPLNZNAPONC
1443:
000B8BD3MOVDX,BX
-t
AX=142EBX=0000CX=0009DX=0000SP=0000BP=0000SI=0000DI=0000
DS=142EES=141ESS=142ECS=1443IP=000DNVUPEIPLNZNAPONC
1443:
000DB409MOVAH,09
-t
AX=092EBX=0000CX=0009DX=0000SP=0000BP=0000SI=0000DI=0000
DS=142EES=141ESS=142ECS=1443IP=000FNVUPEIPLNZNAPONC
1443:
000FCD21INT21
-t
AX=092EBX=0000CX=0009DX=0000SP=FFFABP=0000SI=0000DI=0000
DS=142EES=141ESS=142ECS=00A7IP=107CNVUPDIPLNZNAPONC
00A7:
107C90NOP
4)然后直接G命令运行完毕
-g
ArithmeticProram
**************************
1.Addition
2.Subtration
3.Multiplication
4.Division
0.Exit
***********************
Inputyourchoice:
1;验证加法
Inputahexnumber:
2
Inputahexnumberagain:
2
Theoperationresultis:
4
ArithmeticProram
**************************
1.Addition
2.Subtration
3.Multiplication
4.Division
0.Exit
***********************
Inputyourchoice:
2;验证减法
Inputahexnumber:
4
Inputahexnumberagain:
2
Theoperationresultis:
2
ArithmeticProram
**************************
1.Addition
2.Subtration
3.Multiplication
4.Division
0.Exit
***********************
Inputyourchoice:
3;验证乘法
Inputahexnumber:
2
Inputahexnumberagain:
2
Theoperationresultis:
4
ArithmeticProram
**************************
1.Addition
2.Subtration
3.Multiplication
4.Division
0.Exit
***********************
Inputyourchoice:
4;验证除法
Inputahexnumber:
6
Inputahexnumberagain:
2
Theoperationresultis:
3
ArithmeticProram
**************************
1.Addition
2.Subtration
3.Multiplication
4.Division
0.Exit
***********************
Inputyourchoice:
0;退出系统
Programterminatednormally
三.实验代码:
1)模块6-1程序(主程序)
;程序名:
6-1.ASM
;功能:
显示菜单,接受从键盘输入的两个十六进制数,
;调用相应的程序模块执行相应的计算,计算结果以十六进制数输出。
DATASEGMENTPARAPUBLIC‘DATA’;数据段为PUBLIC型,便于其他模块应用
STR0DB‘ArithmeticProram’,0DH,0AH,‘$’
NEQU$-STR0;N为字符串STR0的长度
DB‘***********************’,0DH,0AH,‘$’
DB‘1.Addition’,0DH,0AH,‘$’
DB‘2.Subtration’,0DH,0AH,‘$’
DB‘3.Multiplication’,0DH,0AH,‘$’
DB‘4.Division’,0DH,0AH,‘$’
DB‘0.Exit’,0DH,0AH,‘$’
DB‘***********************’,0DH,0AH,‘$’
DB‘Inputyourchoice:
’,‘$’
ERRORDB0DH,0AH,‘Inputerror,againenter:
’,‘$’
STR1DB0DH,0AH,‘Inputahexnumber:
’,‘$’
STR2DB0DH,0AH,‘Inputahexnumberagain:
’,‘$’
STR3DB0DH,0AH,‘Theoperationresultis:
’,‘$’
INADB?
?
;存用户输入的两个8位二进制数据
OUTADW?
;存16位运算结果数据
STRDB4DUP(?
),0DH,0AH,‘$’
DATAENDS
PUBLICSTR1,STR2,STR3,INA,OUTA,STR;声明公共标识符
EXTRNINNUM:
NEAR;本模块调用的模块都是近调用
EXTRNOUTNUM:
NEAR
EXTRNADDOPT:
NEAR
EXTRNSUBOPT:
NEAR
EXTRNMULOPT:
NEAR
EXTRNDIVOPT:
NEAR
CODESEGMENTPARAPUBLIC‘CODE’;代码段为PUBLIC型,便于其他模块应用
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
OP0:
MOVCX,9;循环9次,显示9行信息
OP1:
MOVBX,OFFSETSTR0
MENU:
MOVDX,BX;显示菜单
MOVAH,09H
INT21H
ADDBX,N
LOOPMENU
MOVAH,01H;要求用户输入选择
INT21H
CMPAL,‘1’
JEADD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)