版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章汇编语言的运行方式本章从几个典型例子出发,通过上机实习,引导读者在DOS下学会使用DEBUG调试程序运行汇编语言程序;学会使用宏汇编MASM和Turbo汇编TASM运行汇编语言程序。并将系统地介绍
DEBUG的命令,以便在以后各章的学习中能够有一个熟练的调试和运行手段。使得读者在进入第5章以后能够一面学习汇编指令,一面积累设计、调试和运行完整的汇编语言程序的有关知识。使用DEBUG运行汇编程序较之使用ASM和MASM运行汇编程序有以下优点:■■
可在最下层环境下运行;免去使用ASM和MASM必须熟悉文本编辑程序、ASM和MASM本身程序以及LINK程序的麻烦,因而调试周期短程序员可在不熟悉ASM和MASM所涉及的伪指令的情况下运行汇编语言程序,为以后学习重点转移到程序设计打下坚实的使用指令编程的基础;熟悉DEBUG的命令使用,为以后的软件开发掌握调试工具,这是因为DEBUG除了可运行汇编语言程序外,还可以直接用来检查和修改内存单元、装入、存储及启动运行程序、检查及修改寄存器,也就是说DEBUG可深入到计算机的基本级,可使用户更紧密地与计算机中真正进行的工作相联系。然而能在DEBUG下运行汇编语言源程序也受到了一些限制,它不宜汇编较长的程序,不便于分块程序设计,不便于形成以DOS外部命令形式构成的 EXE文件,不能使用浮动地址,也不能使用绝大多数ASM和MASM提供的伪指令。例3.1在DEBUG下运行如下程序:MOVDL,33H;字符3的ASCII码送DLMOVAH,2;使用DOS的2号功能调用INT21H;进入功能调用,输出‘3’INT
20H;BIOS中断服务程序正常结束。该程序运行结果是在显示器上输出一个字符
‘3’。如果要输出其它字符,请改变程序中
‘33H’为相应字符的ASCII码。其中涉及DOS和BIOS功能调用。因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输
出。DOS功能调用就是为诸如此类的目的设置的。DOS功能调用要求在进入INT21H调用前,首先将功能调用号,也就是功能种类号送AH寄存器,并依功能号准备初始数据。也就是说INT21H的2号功能调用是输出DL寄存器中字符。INT20H是BIOS中断服务子程序,这一软中断用来正常结束程序。运行步骤:(1)进入DEBUG设C盘上有DEBUG.COM程序,进入DOS后键入DEBUG〈ENTER〉,即C>DEBUG屏幕显示:-‘-’号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。现在用A命令送程序如下:(2)输入程序并汇编-A100169C:0100MOVDL,33169C:0102MOVAH,2169C:0104INT21169C:0106INT20169C:0108至此程序已送完,并汇编成机器指令。现在用G命令运行程序如下:(3)运行程序-G3Program
terminated
normally如果现在想看一下机器指令是什么样子的话,方法之一是可以用反汇编命令U作如下操作:(4)反汇编-U100,108169C:0100B233MOVDL,33169C:0102B402MOVAH,02169C:0104CD21INT21169C:0106CD20INT20169C:0108(5)写COM文件-RBX
BX
0000:-RCX
CX
0000:8-N
EXCOM.COM-W送机器指令程序-E200
B2
33
B4
02
CD
21
CD
20执行机器指令程序-G=2003Pogram
terminated
normally退出DEBUG返回DOS,执行EXCOM-QCOM文件C>EXCOM3C>3.2 DEBUG命令DEBUG命令是在DEBUG提示符“-”下,由键盘键入的。每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数
之间,用空格或逗号隔开,操作参数与命令符
之间用空格隔开,命令的结束符是回车键
(ENTER)。命令及参数的输入可以是大小写的结合。Crtl+Break键可中止命令的执行。
Crtl+Num
Lock键可暂停屏幕卷动,按任一键继续。所用数均为十六进制数,且不必写H。3.2.1汇编命令A格式:(1)A〈段寄存器名〉:〈位移〉(2)A〈段地址〉:〈位移〉(3)A〈位移〉(4)A
功能:键入该命令后显示段地址和位移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,直到显示下一地址时用户直接键入回车键返回到提示符“”。
其中(1)用指定段寄存器内容作段地址,(3)用CS内容作段地址,(4)以CS∶100作地址。以后命令中提及的各种‘地址’形式,均指(1)、
(2)、(3)中A后的地址形式。3.2.2比较命令C格式:C 〈源地址范围〉,〈目标地址〉
其中〈范围〉是由〈起始地址〉〈终止地址〉指出的一片连续单元,或〈起始地址〉L〈长度〉。 功能:从〈源地址范围〉的起始地址单元起逐个与目标起始地址以后的单元顺序比较单元的内容,直至源终止地址为止。遇有不一致时,以〈源地址〉〈源内容〉〈目标内容〉〈目标地址〉的形式显示失配单元及内容。3.2.3显示内存命令D〈地址〉〈范围〉格式:(1)D(2)D(3)D
功能:以两种形式显示指定内存范围内容。一种形式为十六进制内容,一种形式为相应字节的ASCII码字符,对不可见字符以‘·’代替。
其中(1)以CS为段寄存器。(3)显示CS∶100起始的一片内容。3.2.4修改内存命令E格式:(1)E〈地址〉〈单元内容〉(2)E〈地址〉〈单元内容表〉
其中〈单元内容〉是一个十六进制数,或用引号′或″括起来的字符串;〈单元内容表〉是以逗号分隔的十六进制数,或用′或″括起来的字符串,或者是二者的组合。
功能:(1)将指定内容写入指定单元后显示下一地址,可连续键入修改内容,直至新地址出现后键入回车〈ENTER〉止。
(2)将〈单元内容表〉逐一写入由〈地址〉开始的一片单元。3.2.5填充内存命令F格式:F〈范围〉〈单元内容表〉
功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。例如:F
5BC:200
L
10
B2,′XYZ′,3C3.2.6执行命令C格式:(1)G(2)G=〈地址〉(3)G=〈地址〉,〈断点〉功能:(1)从CS∶IP开始执行(2)从指定地址开始执行(3)从指定地址开始执行,到断点自动停止。3.2.7十六进制算术运算指令H格式:H 〈值1〉 〈值2〉
功能:求十六进制数〈值1〉和〈值2〉的和与差并显示结果。3.2.8端口输入命令I格式:I 〈端口地址〉
功能:将从指定端口输入的内容显示出来。3.2.9读盘命令L格式:L〈地址〉〈盘号〉〈起始逻辑扇区〉〈所读扇区个数n〉
其中〈地址〉的缺省值为CS∶100。逻辑扇区可由物理扇区号换算得到,以双面双密度盘为例:物理扇区是按0面0道1区,0面0道2区,……0面0道9区,0面1道1区,……0面39道9区,1面0道1区,……1面39道9区排列。而逻辑扇区与物理扇区号的对应关系为物理扇区
0面0道1扇区至9扇区,逻辑扇区号为0~8;物理扇区1面0道1扇区至9扇区,逻辑扇区号为9~11H;物理扇区0面1道1扇区至9扇区,逻辑扇
区号为12~1AH……这样每道先0面后1面一直
其中〈盘号〉为0、1或2,0表示A盘,1表示B盘,2表示硬盘。
功能:将〈盘号〉指定的盘上,从〈起始逻辑扇区〉起,共n个逻辑扇区上的所有字节顺序读入指定内存地址的一片连续单元。当L后的参数缺省时,必须在L之前由N命令指定(或进入DEBUG时一并指出)所读盘文件名。此时L执行后将该文件装入内存。例如:N
EXAMPLEL将当前盘上的EXAMPLE文件装入CS:100起始的一片内存单元。3.2.10内存搬家命令M格式:M
〈源地址范围〉 〈目标起始地址〉其中源及目标地址若仅输入偏移量,则隐含相对DS。功能:把〈源地址范围〉中的内容顺序搬至〈目标起始地址〉起的一片连续单元。例如:M
CS:100
110
600把从CS∶100起至CS∶110止17个字节搬至
DS∶600至DS∶610的一片单元。3.2.11命名待读文件命令N格式:N文件名说明功能:为L命令指定待装入文件注:其它形式参考DOS手册3.2.12端口输出命令O格式:O 〈端口地址〉 〈字节〉
功能:将该〈字节〉从指定〈端口地址〉输出。例如:O
2F
4F将4FH从2FH口输出3.2.13结束DEBUG返回DOS命令Q格式:Q功能:返回DOS提示符下3.2.14显示寄存器命令R格式:(1)R(2)R
〈寄存器名〉功能:(1)显示当前所有寄存器内容、状态标志及将要执行的下一指令的地址、代码及汇编语句形式。其中对状态标志FLAG以每位的形式显示,详见表3-1。表3-1状态标志显示形式标志位状态显示形式溢出标志OF有/无OV/NV方向标志DF减/增DN/UP中断标志IF开/关EI/DI符号标志SF负/正NG/PL零标志ZF零/非ZR/NZ辅助标志AF有/无AC/NA奇偶标志PF偶/奇PE/PO进位标志CF有/无CY/NC(2)显示指定存储器内容例如:R
AXR
F3.2.15搜索指定内存命令S格式:S 〈地址范围〉 〈表〉
功能:在指定范围搜索表中内容,找到后显示表中元素所在地址例如:S CS:100
110
41显示04BA:010404BA:010D表示在位移100H至110H间的上述两处有41H。又如:S CS:100L
11
41
″AB″E表示在当前代码段位移100H至111H处找连续4个字节内容为41H、41H、42H、0EH的地址。3.2.16执行并显示系统环境命令T格式:T [=〈地址〉] [〈条数〉]
功能:〈地址〉的缺省值是当前IP值,〈条数〉的缺省值是一条。执行由指定地址起始的、由〈条数〉指定的若干条命令。例如:T 执行当前指令并显示状态T
10 从当前指令始执行10H条指令3.2.17反汇编命令U格式:(1)U〈地址〉(2)U〈地址范围〉
功能:将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。地址及范围的缺省值是上次U指令后下一地址的值。这样可以连续反汇编。3.2.18写盘命令W 格式:W 〈地址〉 〈盘号〉 〈起始逻辑扇区〉 〈所写逻辑扇区数n〉 功能:与L命令不同的地方是将内存〈地址〉起始的一片单元内容写入指定扇区。只有W而没有参数时,与N命令配合使用写盘文件。3.3
DEBUG命令综合使用例例3.2进入DEBUG,使用A命令将源程序写入内
存,使用G命令执行,再用U命令反汇编,接着用D命令显示后,用Q命令退出DEBUG,返回DOS提示符。
(1)进入DEBUG,并用A命令直接写入并汇编一个程序A>debug-A1001392:0100MOVDL,331392:0102MOVAH,21392:0104INT211392:0106INT201392:0108(2)执行该程序G3Program
terminated
normally(3)用U命令反汇编-U100
1081392:0100
B233MOV
DL,331392:0102B402MOVAH,021392:0104CD21INT211392:0106CD20INT201392:010861DB61(4)用D命令显示内存
D100
1081392:0100
B2
33
B4
02
CD
21CD
20
61.3...!.
a例3.3进入DEBUG,先显示200H处开始的一片单元,接着用E命令,将一段机器代码指令(就是上面的一段小程序)写入200~208H,然后执行,再用U命令反汇编。A>DEBUGD2001392:020000000000000000000000000000000000...............1392:021000000000000000000000000000000000...............1392:02204E8700004E924E9D4EA84EB34EBE4EC9N...N.N.N.N.N.N.1392:02304ED44EDF00004EEA4EF54E004F0B4F16N.N...N.N.N.O.O.1392:02404F214F2C4F377A034F001301FF00A705O!
O,O7z.O.......1392:02508000CE04100021D740AF21D740AF21D7......!.@.!.@.!.1392:0260400422B7400422D7402F21D7402F21E2@.″.@.″@/!.@/!.1392:027043CC21B7406B21C740AF21C740AF21C7C.!.@K!.@.!.@.!用E命令把代码指令写入内存E200
B2
33
B4
02
CD
21
CD
20
1B用G命令从200H开始执行
G=2003Program
terminated
normally(3)用U命令反汇编-U200
2081392:0200B233MOVDL,331392:0202B402MOVAH,021392:0204CD21INT211392:0206CD20INT201392:02081B00SBBAX,[BX+SI]-QA>例3.4 进入DEBUG,用A命令送程序,用R命令显示,并用T命令单条执行(1)进入并用A命令写入汇编源程序
A>DEBUGA1001392:0100MOVAH,31392:0102MOVAL,21392:0104ADDAL,AH1392:0106INT201392:0108(2)用R命令显示寄存器状态RAX=0000BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000DS=1392ES=1392SS=1392CS=1392IP=0100 NV
UP
EI
PL
NZ
NA
PO
NC1392:0100
B403
MOV
AH,03(3)用T命令单条执行TAX=0300BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000DS=1392ES=1392SS=1392CS=1392IP=0102NV
UP
EIPL
NZ
NAPO
NC1392:0102
B002MOVAL,02TAX=0302BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000DS=1392ES=1392SS=1392CS=1392IP=0104NV
UP
EIPL
NZ
NAPO
NC1392:0104
00E0ADDAL,AH(4)结果在AL中(AL)=5TAX=0305SP=0000DS=1392IP=0106BX=0000BP=0000ES=1392NV
UP
EICX=0000SI=0000SS=1392PL
NZ
NADX=0000DI=0000CS=1392PO
NC1392:0106CD02
INT20TAX=0305BX=0000
CX=0000DX=0000SP=0000BP=0000
SI=0000
DI=0000DS=1392ES=1392
SS=1392
CS=011CIP=1094NV
UP
DI
PL
NZ
NA
PO
NC011C:109490NOP用G命令接着执行 GProgram
terminated
normally退出QA>例3.5除以前接触过的命令外,下面还使用了整片搬家命令M,以及比较一片内存单元与另一片内存单元内容的命令C。(1)进入DEBUG,显示100H至110H内容
A>DEBUGD100
11061
031392:0100
0F
00
B9
8A
FF
F3
AE
471F
8B
C3
48
12
B1
.......Ga....H..1392:0110
04用F命令将31H装入100H至110H F100
110
31用D显示100H至117HD100
1171392:0100
31
31
31
31
31
31
31
31 31
31
31
31
31
31
31
311392:0110
31
8B
C6
F7
0AD0D311111111111111111.......(4)用E命令修改105H至108H的内容E105
61,61,62,63(5)用D命令显示100H至110H的内容D1001101392:0100
31
311392:0110
3131
31
31
61
61
6263
31
31
31
31
31
31
31
11111aabc11111111(6)用M命令将100H至110H的内容复制到
200H至210HM100
110
200(7)用D命令显示200H至210H的内容D2002101392:0200
31
311392:0210
3131
31
31
61
61
6263
31
31
31
31
31
31
31
11111aabc11111111(8)用E命令修改201H,202H,203H,20DH,20EH,20FH内容E201323134E20D414243(9)用D命令显示200H至210H内容及100H至110H内容D2002101392:0200
31
3231
34
316161626331313131414243
12141aabc1111ABC1392:0210
311D1001101392:0100
31
311392:0110
3131
31
316161626331313131313131
11111aabb11111111(10)用C命令比较100H至110H与200H至210H的内容,并显示二者不一致的部分-C100
110
2001392:01031321392:02011392:010331341392:02031392:010D31411392:020D1392:010E31421392:020E1392:010F31421392:020F-QA>例3.6 以下是使用E命令和S命令的例子。E300′ABCDEFG′D300
3061392:0300
41
42
43
44
45
46
47ABCDEFGE310
1234′″D310
3151392:0310
27
31
32
33
34
27E320
31
32
33
41
42
43D320
3251392:0320
31
32
33
41
42
43′1234′123ABCS300
306
′D′1392:0303S310
315
′D′S310
315
′3′1392:0313S310
315
′1392:03101392:0315D310
3251392:0310
27
31
32
33
34
27
22
1341
AF
21
13
41
AF
21
13
′1234′″.A.!.A.!.1392:0320
31
32
33
41
42
43Q123ABC例3.7 以下用L命令将A盘目录读入内存。因为对双面双密软盘,盘目录区在0道0面6扇区,而L100
0
0 B是将A盘上从0面0道1扇区始共11个逻辑扇区读入内存,每扇区512个字节,所以读入内存后目录在当前段0B00H处,用D命令可显示出所有目录项。退出DEBUG后将E9文件删除。再进入DEBUG,并将目录读入内存,显示出可见文件名E9的目录项还在,但E字母处已变为E5H,这是文件已删标志。现用E命令修改它仍为E字母的ASCII码45H,并用W命令记盘可见文件已恢复。(1)进入DEBUG前先显示A盘目录C>dirVolumea:indriveAhasnolabelVolume
SerialNumberis0C6218C9Directory
ofA:\E5273031007905:05pE5328751007905:17pE54105581007905:47pE920501007906:03pE9217441007906:05pE1020501007906:10p6file(s)26580bytes331776
bytes
free(2)进入DEBUG,并用L命令将A盘上0扇区起共11个逻辑扇区读入内存169C:0100起始一片单元C>debugL
100
0
0
b(3)显示0B00起始的内存内容
db00169C:0B0045353220202020202020202000000000E52....169C:0B10000000000000BB8847150200871C0000........G.......169C:0B2045353320202020202020202000000000E53....169C:0B300000000000002F8A47150A003B0B0000....../.G...;...169C:0B4045353420202020202020202000000000E54....169C:0B50000000000000F68D47150D003E290000........G...>)..169C:0B6045392020202020202020202000000000E9....169C:0B700000000000006.....n.G.......-d169C:0B8045393220202020202020202000000000E92....169C:0B90000000000000BB9047151B0000060000........G.......169C:0BA045313020202020202020202000000000E10....169C:0BB0000000000000469147151D0002080000......F.G.......169C:0BC000000000000000000000000000000000................169C:0BD000000000000000000000000000000000................169C:0BE000000000000000000000000000000000................169C:0BF000000000000000000000000000000000................-qC>18C9(4)删除文件e9C>C>erase
a:e9C>dir
a:e9Volume
in
drive
A
has
no
labelVolume
Serial
Number
is
0C62Directory
of
A:\File
not
found(5)进入DEBUG并用L再读盘,用D命令显示,可见该文件已删C>debugL
100
0
0
bdb00169C:0B0045353220202020202020202000000000E52....169C:0B10000000000000BB8847150200871C0000........G.......169C:0B2045353320202020202020202000000000E53....169C:0B300000000000002F8A47150A003B0B0000....../.G...;...169C:0B4045353420202020202020202000000000E54....169C:0B50000000000000F68D47150D003E290000........G...>)..169C:0B60E5392020202020202020202000000000.9....169C:0B700000000000006.....n.G.......(6)用E命令恢复字母Ee0b60
45d0b60
0b6f169C:0B604539202020202020(7)修改后写盘
w
100
0
0
bq2020202000000000E9....(8)可见已恢复C>dirVolumea:indriveAhasnolabelVolume
SerialNumberis0C6218C9Directory
ofA:\E5273031007905:05pE5328751007905:17pE54105581007905:47pE920501007906:03pE9217441007906:05pE1020501007906:10p6file(s)26580
bytes334848
bytes
free例3.8 对于1.2M软盘引导记录占1个扇区,第一文件定位表FAT1占7个扇区,第二文件定位表FAT2占7个扇区,根目录占14个扇区。因此可以用L1000020将根目录读入内存,于是可用例3 7的方法恢复已删除的文件。例如删除e9再恢复。18E4C>dir
A:Volume
in
drive
A
has
no
labelVolume
Serial
Number
is
4555Directory
of
A:\E5273031007905:05pE5328751007905:17pE54105581007905:47pE920501007906:03pE9217441007906:05pE1020501007906:10p6file(s)26580
bytes785920
bytes
freeC>debugL100
0020d1f00169C:1F0045353220202020202020202000000000E52....169C:1F10000000000000BB8847150200871C0000........G.......169C:1F2045353320202020202020202000000000E53....169C:1F300000000000002F8A47150A003B0B0000....../.G...;...169C:1F4045353420202020202020202000000000E54....169C:1F50000000000000F68D47150D003E290000........G...>)..169C:1F6045392020202020202020202000000000E9....169C:1F700000000000006.....n.G.......18E4qC>del
a:e9C>dir
a:e9Volume
in
drive
A
has
no
labelVolume
Serial
Number
is
4555Directory
of
A:\File
not
foundC>debug-L
100
0
0
20-d1f00169C:1F0045353220202020202020202000000000E52....169C:1F10000000000000BB8847150200871C0000........G.......169C:1F2045353320202020202020202000000000E53....169C:1F300000000000002F8A47150A003B0B0000....../.G...;...169C:1F4045353420202020202020202000000000E54....169C:1F50000000000000F68D47150D003E290000........G...>)..169C:1F60E5392020202020202020202000000000.9....169C:1F700000000000006.....n.G.......e1f60
45d1f60
1f6f169C:1f60
45
39
20
20
20
20
20
20-w
100
0
0
20-q20
20
20
20
00
00
00
00
E9....18E4C>dir
a:Volume
in
drive
A
has
no
labelVolume
Serial
Number
is
4555Directory
of
A:\File
not
foundE5273031007905:05pE5328751007905:17pE54105581007905:47pE920501007906:03pE9217441007906:05pE1020501007906:10p6file(s)26580
bytes788480
bytes
free例3.9 利用DEBUG调试 EXE文件(1)程序清单及汇编连接步骤A>type
SAM.ASMCODESEGMENTASSUME
CS:CODEMOV
DL,33HMOV
AH,2INT
21HMOV
AH,4CHINT
21HENDSEND
STARTSTART:CODEC>MASM
SAM;microsoft(R)Macro
AssemblerVersion5.00Copyright(C)Microsoft
Corp19811985,1987.All
rights
reserved.51774+401858
Bytes
symbol
space
free0
warning
Errors0
Severe
ErrorsC>LINK
SAM;Microsoft
(R)
Overlay
Linker
Version3.60Copyright
(C)
Microsoft
Corp
1983
1987.All
rights
reserved.LINK:warning
L4021:no
stack
segmentC>SAM3C>DEBUG
SAM.EXEG3Program
terminated
normallyQ(2)用N命令装入,用G命令执行C>DEBUGN
SAM.EXELRAX=0000
BX=0000
CX=000A
DX=0000
SP=0000
BP=0000SI=0000
DI=0000DS=16AD
ES=16AD
SS=16BD
CS=16BD
IP=0000
NV
UP
EIPL
NZ
NA
PO
NCMOV
DL,3316BD:0000
B233-U16BD:0000
000816BD:0000
B23316BD:0002
B40216BD:0004
CD2116BD:0006
B44C16BD:0008
CD21G3MOV
DL33MOV
AH,O2INT
21MOV
AH,4CINT
21Program
terminated
normallyQ(3)装入执行后,再用T命令单条执行C>DEBUG
SMA.EXERBX=0000
CX=000A
DX=0000
SP=0000
BP=0000
SI=0000ES=16AD
SS=16BD
CS=16BD
IP=0000
NV
UP
EI
PL
NZAX=0000DI=0000DS=16ADNA
PO
NC16BD:0000
B233
MOV
DL,33T=0BX=0000
CX=000A
DX=0033
SP=0000
BP=0000
SI=0000AX=0000DI=0000DS=16ADNA
PO
NCES=16AD
SS=16BD
CS=16BD
IP=0002
NV
UP
EI
PL
NZ16BD:0002
B402
MOV
AH,02TBX=0000
CX=000A
DX=0033
SP=0000
BP=0000
SI=0000AX=0200DI=0000DS=16ADNA
PO
NCES=16AD
SS=16BD
CS=16BD
IP=0004
NV
UP
EI
PL
NZ16BD:0004
CD21G3INT
21Program
terminated
normallyQ3.4用MASM(或ASM)运行汇编语言程序一个能经MASM(或ASM)汇编后运行的汇编语言源程序不同于在DEBUG下运行的汇编语言程序。首先在程序的书写方式上要加上逻辑段的说明,而且必须至少有一个逻辑代码段。其次一个书写正确的源程序必须经过源程序输入、汇编、连接后产生一个
EXE文件,才能作为DOS的外部命令在DOS下运行。小汇编(ASM)下的汇编语言程序可在64KB的内存条件下运行,且只能有限地使用伪指令。而宏汇编(MASM)下则必须在96KB以上的内存条件下运行,且可使用各种伪指令。本书中的例子均在MASM下通过。ASM和MASM的程序运行过程除汇编时用ASM代替MASM进行汇编外,其它步骤完全相同。3.4.1 MASM汇编语言程序的调试步骤在MASM下调试运行汇编语言程序的步骤如图3-1所示:3.4.2
典型实例下面通过几个典型例子说明汇编语言的运行步骤。例3.10 在MASM下运行与例3.1功能相同的程序,请读者务必注意二者在程序结构上的不同和运行方式的不同,具体步骤如下:(1)运行环境的准备一张操作系统盘,例如DOS
5
0一张汇编系统盘,应含如下文件:MASMLINKCREFEDLIN宏汇编程序文件连接程序文件
索引程序文件
行文本编辑程序一张已格式化的空盘,用以存储用户程序。准备好上述3张盘后应用DOS盘进入DOSA>(2)
利用任何文本编辑输入源程序,扩展名必须为 ASM。本例源程序文件名为SAM ASM。A>type
sam.asmCODESEGMENTASSUME
CS:CODESTART:
MOV
DL,33HMOV
AH,2INT
21HMOV
AH,4CHINT
21HCODEENDSEND
START(3)
汇编A>masmMicrosoft
(R)
Macro
Assembler
Version5.00Copyright
(C)
Microsoft
Corp
19811985,1987.All
rights
reserved.Source
filename
[.ASM]:samObject
filename
[sam.OBJ]:Source
listing
[NUL.LST]:samCross reference
[NUL.CRF]:sam50698+402
934
Bytes
symbol
space
free0
Warning
Errors0
Severe
Errors(4)连接
A>linkMicrosoft
(R)
Overlay
Linker
Version3.601987.Copyright
(C)
Microsoft
Corp
1983All
rights
reserved.Object
Modules
[.OBJ]:samRun
File
[SAM.EXE]:List
File
[NUL.MAP]:samLibraries
[.LIB]:LINK:warning
L4021:no
stack
segment(5)执行①直接执行
A>sam3②在DEBUG下执行,必须写全名
A>c:\dos\debugn
sam.exe1g3Program
terminated
normallyqReference
Untility
Version(6)产生索引表文件并输出A>crefMicrosoft
(R)
Cross5.00Copyright
(C)
Microsoft
Corp
1981
1985,1987.Allrights
reserved.Cross reference
[.CRF]:samListing
[sam.REF]:2
SymbolsA>type
sam.refSymbol
Cross
Reference(#definition,+modification)
Cref
1CODE.
.
.
.
.
.
.
.
.
.
.
.
.
.
1#298START.
.
.
.
.
.
.
.
.
.
.
.
.
3#2
Symbols(7)打印 LST清单文件和 MAP文件如下:A>type
sam.lst1
00002CODE
SEGMENTASSUME
CS:CODE3
0000B233START:MOV
DL,33H4
0002B402MOVAH,25
0004CD21INT21H6
0006B44CMOVAH,4CH7
0008CD21INT21H8
000ACODEENDSEND
START9Segments
and
Groups:N
a
m
e000ALength
Align
Combine
ClassPARA
NONECODE..............Symbols:Value
AttrCODESTART.............N
a
m
eL
NEARType0000TEXT
sam@FILENAME..........9
Source
Lines9
Total
Lines4
Symbols50698+402934
Bytes
symbol
space
free0
Warning
Errors0
Severe
ErrorsA>TYPE
SAM.MAPLINK:Warning
L4021:no
stacksegmentStart
Stop
Length
NameClass00000H
00009H
0000AH
CODEProgram
entry
point
at
0000:0000例3
11 汇编和连接可采取简单的办法。下面是完成与例3.10相同功能的程序的执行步骤。设源程序文件为SAM1.ASM。(1) 用行编辑输入源程序A>edlin
sam1.asmNew
file*i1:* CODE
SEGMENT2:* START
PROC
FAR3:* ASSUME
CS:CODE4:* PUSH
DS5:* MOV
AX,06:* PUSH
AX7:* MOV
DL,33H8:* MOV
AH,29:* INT
21H10:*
RET11:*START
ENDP12:*CODE
ENDS*e(2)汇编A>MASM
SAM1Microsoft
(R)
Macro
Assembler
Version5.10Copyright
(C)
Microsoft
Corp1981,1988.All
rights
reserved.50186+410435
Bytes
symbol
space
free0
warning
Errors0
Severe
Errors(3)连接A>LINK
SAM1;Microsoft
(R)
SegmentedLinker
Version
5.01.21ExecutableCopyright
(C)
Microsoft
Corp
19841988.All
rights
reserved.LINK:warning
L4021:no
stack
segment(4)执行A>SAM13(5)在DEBUG下执行A>DEBUGGSAM1
EXE3Programterminated
normallyQA>DEBUGSAM1.EXERAX=0000BX=0000
CX=000C DX=0000
SP=0000
BP=0000
SI=0000DI=0000DS=126EES=126E
SS=16127E
CS=127E
IP=0000
NV
UP
EI
PL
NZNA
PO
NC127E:0000
1EPUSH
DSU127E:0
10127E:00001EPUSHDS127E:0001MOVAX,0000127E:0004PUSHAX127E:0005MOVDL,33127E:0007MOVAH,02127E:0008INT21127E:000BRETF127E:000CINCBX127E:000DOUT22,AX127E:000FMOVBX,E743QA>DEBUG
SAM1
EXEG=03Program
terminated
normallyQA>上例3.10中的汇编连接步骤也可由DOS批命令文件一次完成。方法是首先用行编辑建立如下批命令文件ASSEM.BAT,这里假设用户程序在B盘,而MASM及LINK文件在A盘。A>A>type
assem.batmasm
%1,,,,;type
%1.1sterase
%1.1stcref
%1;type
%1.referase
%1.referase
%1.crfLink
%1然后在DOS提示符下执行该批命令。B>A:ASSEM
SAM用TASM运行汇编语言程序Turbo汇编TASM是Borland公司推出的,可与
Microsoft公司的MASM匹配的汇编语言软件。
Turbo汇编语言程序可与Turbo
C、TurboPASCAL、Turbo
Prolog及Turbo
BASIC语言程序方便地连接。用TASM调试汇编语言程序的步骤与MASM下的调试步骤基本相同。TASM汇编语言程序的调试步骤在TASM下调试汇编语言程序的步骤如图3-2所示:3.5.2
安装Turbo
Assembler由于Turbo
Assembler包含在Borland
C++软EXE程序即可完件包中,使用其中的INSTALL成安装。Turbo
Assembler除包括TASM外,还有下列文件:EXE,TLINK
EXE·MAKE
EXE单独运行的程序制作实用程序。多数程序中都包括许多源文件,这些程序在同其它程序连接之前,程序中的源文件可能有必要通过预处理、编译和其它处理。当已修改过模块或与模块相关的某些程序后,忘记了再编译将可能导致错误的发生,另一方面,你可以重新编译一遍所有的程序,这是非常安全可靠的,但是非常浪费时间。使用MAKE可以解决这种矛盾,MAKE通过检查文件上的描述部分和标识日期部分,识别哪些文件是经过了修改的,然后调用其它程序,诸如编译程序、汇编程序、连接程序和其它实用程序,生成新的目标文件、可执行文件,而对不需要修改的程序不做任何多余的处理。总之
MAKE可对多个源文件的程序进行维护,有助于大型软件的开发。在此,对MAKE的具体操作不作进一步的介绍。·TLIB
EXE Turbo库管理程序,相当于MASM中的LIB EXE。相当于MASM中的CREF。Turbo
Assembler的帮助实用程·TCREF
EXE·THELP
EXE序。·GREF
EXE一种文件搜索实用程序,可以在几个文件中快速查找字符串。例如,想看看在哪个源文件中调用了setupmodem函数,可以执行下面的命令:C>GREP
Setupmodem
*.ASM在当前目录中的所有 ASM里查找Setupmodem字符串,若找到则给出相应信息。·OBJXREF.EXE
目录模块交叉引用实用程序,可用来检查一系列目标文件和库文件,并生成有关这些文件内容的报告。一类报告里列出公用名的定义和对它们的引用,另一类报告是列出目标模块定义的段的长度。·TOUCH.EXE在使用MAKE时,若想要强制重编译或重创建一个特殊的目标文件,而该目标文件所依赖的源文件却没有改动时,可使用TOUCH来解决这一问题。TOUCH把若干文件的日期和时间改为当前的日期和时间,这样,运行MAKE就可重编译或重创建相应特殊的目标文件。
TOUCH允许DOS的通配符“*”和“?”。3.5.3 使用TASM进行汇编使用TASM进行汇编后,必须用TLINK进行连接。TASM、TLINK与MASM、LINK的使用方法基本一致,但TASM、TLINK均提供了大量的命令行参数,有助于用户更好地完成编译和连接的工作。键入下述命令:C>TASM/h
或C>TASM/?你会看到全屏幕的提示信息,这些信息描述了许多命令行选择项和用以定义要汇编的文件的语法。屏幕前两行显示如下:Turbo
Assembler
Version
2.5
Copyright
(C)1988
by
Borland
International,
Inc.Syntax:TASM
[optious]source
[,object][,listing][,xref]第一行为TASM的版本信息,第二行说明了TASM命令行选择项的语法。余下部分为参数说明,参数(options)项是任选的,以斜杠(“/”)加上参数表示,比如:/h,/?Print
this
help
screen参数选择项用以控制汇编方式。至于object文件、listing文件,xref文件均与MASM中的目标文件、列表文件、交叉汇编文件一致,其后缀名分别为 OBJ、 LST、 XRF。TASM允许同时汇编多个文件,文件名之间用加号“+”或空格连接,并且允许使用DOS通配符
“*”和“?”。C>TASM
*表示汇编当前目录下所有 ASM文件。其常用命令行选择项简要介绍如下:/a 在目标
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西南医科大学《公共卫生理论和实践》2023-2024学年第一学期期末试卷
- 西南林业大学《家具设计实务实验》2022-2023学年第一学期期末试卷
- 信阳师范大学《web开发基础实验》2023-2024学年第一学期期末试卷
- 幼儿园语言领域培训
- 西京学院《理论力学》2022-2023学年第一学期期末试卷
- 西华大学《社会心理学B》2022-2023学年第一学期期末试卷
- 2024年01月11320关系营销期末试题答案
- 西安邮电大学《物流工程》2022-2023学年第一学期期末试卷
- HJ2035-2013 固体废物处理处置工程技术导则
- 电子科技大学工程硕士学位论文开题报告 人事管理系统的设计与实现
- 新工科背景下“复变函数与积分变换”教学改革探索
- 2024新教科版一年级上册第二单元我们自己第1课我们的身体教学课件含微课视频
- 高中英语高考必背单词“分类”(共3500个)
- 普通高等学校学士学位授权专业审核标准
- 2019新人教版高中英语选择性必修四全册课文翻译(英汉对照)
- 供货保证措施以及应急保障措施
- 可疑交易的识别分析与报告
- 大酒店风险分级管控和隐患排查治理双体系文件
- 大亚圣象应收账款管理问题研究
- 2024年山东省农作物植保员技能竞赛参考试题库(含答案)
- CJ-T129-2000玻璃纤维增强塑料外护层聚氨酯泡沫塑料预制直埋保温管
评论
0/150
提交评论