微机原理上机实验微机原理程序调试基础指导Word格式.docx
《微机原理上机实验微机原理程序调试基础指导Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理上机实验微机原理程序调试基础指导Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETBUF1
MOVDI,OFFSETBUF2
MOVAH,[BX]
ORAH,AH
JZZERO
JLMINUS
MOVAH,01H
JMPASSIGN
ZERO:
MOVAH,00H
MINUS:
MOVAH,0FFH
ASSIGN:
MOV[DI],AH
MOVAH,4CH
INT21H
PROGRAMENDS
ENDSTART
文件名.ASM
对源程序进行汇编,根据提示输入三次文件名,分别得到目标代码文件:
文件名.OBJ;
列表清单文件:
文件名.LST和交叉参考文件:
文件名.CRF。
如果出错重新汇编。
直到显示
0warningerrors
0seviererrors
Microsoft(R)MacroAssemblerVersion11/7/1318:
11:
31
Page1-1
10000DATASEGMENT
2000036BUF1DB036H
30001?
?
BUF2DB?
40002DATAENDS
50000PROGRAMSEGMENT
6ASSUMECS:
DATA
70000B8----RSTART:
MOVAX,DATA
800038ED8MOVDS,AX
90005BB0000RMOVBX,OFFSETBUF1
100008BF0001RMOVDI,OFFSETBUF2
11000B8A27MOVAH,[BX]
12000D0AE4ORAH,AH
13000F7407JZZERO
1400117C0AJLMINUS
150013B401MOVAH,01H
160015EB0890JMPASSIGN
170018B400ZERO:
MOVAH,00H
18001AEB0390JMPASSIGN
19001DB4FFMINUS:
MOVAH,0FFH
20001F8825ASSIGN:
MOV[DI],AH
210021B44CMOVAH,4CH
220023CD21INT21H
230025PROGRAMENDS
24ENDSTART
Symbols-1
SegmentsandGroups:
NameLengthAlignCombineClass
DATA..............0002PARANONE
PROGRAM............0025PARANONE
Symbols:
NameTypeValueAttr
ASSIGN.............LNEAR001FPROGRAM
BUF1..............LBYTE0000DATA
BUF2..............LBYTE0001DATA
MINUS.............LNEAR001DPROGRAM
START.............LNEAR0000PROGRAM
ZERO..............LNEAR0018PROGRAM
@FILENAME...........TEXTXR
24SourceLines
24TotalLines
10Symbols
49212+399844Bytessymbolspacefree
0WarningErrors
0SevereErrors
文件名.OBJ
连接系统与目标文件,得到可执行文件:
文件名.EXE;
和列表文件:
文件名.MAP。
通常不要选择连接库文件,直接回车即可。
LINK:
warningL4021:
nostacksegment
StartStopLengthNameClass
00000H00001H00002HDATA
00010H00034H00025HPROGRAM
Programentrypointat0001:
0000
4.调试过程:
F:
\DEBUGMASM5\文件名.EXE
-U0
1435:
0000B83414MOVAX,1434
00038ED8MOVDS,AX
0005BB0000MOVBX,0000
0008BF0100MOVDI,0001
000B8A27MOVAH,[BX]
000D0AE4ORAH,AH
000F7407JZ0018
00117C0AJL001D
0013B401MOVAH,01
0015EB08JMP001F
001790NOP
0018B400MOVAH,00
001AEB03JMP001F
001C90NOP
001DB4FFMOVAH,FF
001F8825MOV[DI],AH
-U
0021B44CMOVAH,4C
0023CD21INT21
00254DDECBP
0026FF8B5EFEDECWORDPTR[BP+DI+FE5E]
002A894710MOV[BX+10],AX
002DE94701JMP0177
0030FF7404PUSH[SI+04]
0033E83EFFCALLFF74
0036894510MOV[DI+10],AX
0039E93B01JMP0177
003C8B5EFEMOVBX,[BP-02]
003F8B05MOVAX,[DI]
-G=021
AX=0134BX=0000CX=0035DX=0000SP=0000BP=0000SI=0000DI=0001
DS=1434ES=1424SS=1434CS=1435IP=0021NVUPEIPLNZNAPENC
-DDS:
1434:
00003601000000000000-00000000000000006...............
0010B834148ED8BB0000-BF01008A270AE474.4..........'
..t
0020077C0AB401EB0890-B400EB0390B4FF88.|..............
003025B44CCD214DFF8B-5EFE894710E94701%.L.!
M..^..G..G.
0040FF7404E83EFF8945-10E93B018B5EFE8B.t..>
..E..;
..^..
0050058B550239570275-0739077503E92701..'
.
0060B82000E9D000807C-060075118B5EFE8B......|..u..^..
007047080B470A740680-7F1D08751B8B5EFEG.......u..^.
-Q
实验二汇编语言程序设计调试
1.EDIT文件名.ASM
程序功能:
进行各分数段的人数统计
结果是:
010002000100-030001000100
DATAREASEGMENT
GRADEDW56,69,84,82,73,88,99,63,100
NEQU($-GRADE)/2;
统计GRADE中有多少个成绩
S5DW0;
表示“低于60分”的人数
S6DW0;
表示“60—69分”的人数
S7DW0;
表示“70—79分”的人数
S8DW0;
表示“80-89分”的人数
S9DW0;
表示“90-99分”的人数
S10DW0;
表示“100分”的人数
DATAREAENDS
PROGRAMSEGMENT
MAINPROCFAR
DATAREA
PUSHDS
SUBAX,AX;
将AX清零
PUSHAX
MOVAX,DATAREA;
吧DATAREA的地址富裕AX
MOVCX,N;
循环次数
MOVBX,OFFSETGRADE;
设置BX为指向GRADE的地址指针
COMPARE:
MOVAX,[BX];
取GRADE中某一个成绩,判断是哪个级别
CMPAX,60;
转到相应的程序段执行
JLFIVE
CMPAX,70
JLSIX
CMPAX,80
JLSEVEN
CMPAX,90
JLEIGHT
CMPAX,100
JNENINE
INCS10
JMPSHORTCHANGE
NINE:
INCS9;
转到某个等级后,该等级的计数值加1
EIGHT:
INCS8
SEVEN:
INCS7
SIX:
INCS6
FIVE:
INCS5
CHANGE:
ADDBX,2;
修改GRADE的地址指针,指向下一个成绩
LOOPCOMPARE
RET
MAINENDP
PROGRAMENDS
Microsoft(R)MacroAssemblerVersion11/7/1322:
54:
45
10000DATAREASEGMENT
200000038004500540052GRADEDW56,69,84,82,73,88,99,6
3,100
3004900580063003F
40064
5=0009NEQU($-GRADE)/2;
统计GRA
DE中有多少个成绩
600120000S5DW0;
表示“低于60分”?
娜耸?
700140000S6DW0;
表示“60—69分”?
800160000S7DW0;
表示“70—79分”?
900180000S8DW0;
表示“80-89分”的
人数
10001A0000S9DW0;
表示“90-99分”的
11001C0000S10DW0;
表示“100分”的人
数
12001EDATAREAENDS
130000PROGRAMSEGMENT
140000MAINPROCFAR
15ASSUMECS:
DATAREA
16
17
1800001ESTART:
PUSHDS
1900012BC0SUBAX,AX;
将AX清零
20000350PUSHAX
210004B8----RMOVAX,DATAREA;
吧DATAREA的地
址富裕AX
2200078ED8MOVDS,AX
230009B90009MOVCX,N;
循环次数
24000CBB0000RMOVBX,OFFSETGRADE;
设置BX为指
向GRADE的地址指针
25
26
27000F8B07COMPARE:
取G
RADE中某一个成绩,判断是哪个级别
2800113D003CCMPAX,60;
转?
较嘤Φ某绦蚨沃葱?
2900147C32JLFIVE
3000163D0046CMPAX,70
3100197C27JLSIX
32001B3D0050CMPAX,80
33001E7C1CJLSEVEN
3400203D005ACMPAX,90
3500237C11JLEIGHT
3600253D0064CMPAX,100
3700287506JNENINE
38002AFF06001CRINCS10
39002EEB1CJMPSHORTCHANGE
400030FF06001ARNINE:
转到某个等
级后,该等级的计数值加1
Page1-2
410034EB16JMPSHORTCHANGE
420036FF060018REIGHT:
INCS8
43003AEB10JMPSHORTCHANGE
44003CFF060016RSEVEN:
INCS7
450040EB0AJMPSHORTCHANGE
460042FF060014RSIX:
INCS6
470046EB04JMPSHORTCHANGE
480048FF060012RFIVE:
INCS5
49004C83C302CHANGE:
修改GRADE的地址
指针,指向下一个成绩
50004FE2BELOOPCOMPARE
51
52
530051CBRET
540052MAINENDP
550052PROGRAMENDS
56ENDSTART
DATAREA............001EPARANONE
PROGRAM............0052PARANONE
CHANGE.............LNEAR004CPROGRAM
COMPARE............LNEAR000FPROGRAM
EIGHT.............LNEAR0036PROGRAM
FIVE..............LNEAR0048PROGRAM
GRADE.............LWORD0000DATAREA
MAIN..............FPROC0000PROGRAMLength=0052
N...............NUMBER0009
NINE..............LNEAR0030PROGRAM
S10..............LWORD001CDATAREA
S5...............LWORD0012DATAREA
S6...............LWORD0014DATAREA
S7...............LWORD0016DATAREA
S8...............LWORD0018DATAREA
S9...............LWORD001ADATAREA
SEVEN.............LNEAR003CPROGRAM
SIX..............LNEAR0042PROGRAM
54SourceLines
54TotalLines
21Symbols
49174+399914Bytessymbolspacefree
00000H0001DH0001EHDATAREA
00020H00071H00052HPROGRAM
Programentrypointat0002:
-U0
00001EPUSHDS
00012BC0SUBAX,AX
000350PUSHAX
0004B83214MOVAX,1432
00078ED8MOVDS,AX
0009B90900MOVCX,0009
000CBB0000MOVBX,0000
000F8B07MOVAX,[BX]
00113D3C00CMPAX,003C
00147C32JL0048
00163D4600CMPAX,0046
00197C27JL0042
001B3D5000CM