第二版press.ustc.edu.cn/sites/default/files/fujian/field... ·...
TRANSCRIPT
书书书
!"!#
!
!"!!
和基于$%&
核汇编
语言程序设计实验教程及习题解答
"第二版#
主!
编!
李敬兆
副主编!
纪!
平!
谢晓东
丁!
刚 詹!
林
'""!
$合肥
内 容 简 介
汇编语言是提供给用户直接访问计算机系统最快而又最有效的一种编程语言%使用汇编语言编
写程序能够充分发挥计算机硬件系统的功能%那些需要对计算机硬件进行控制或对运行时间和效率
有要求的系统软件或应用软件%通常都是用汇编语言编写而成的%因此熟练掌握汇编语言程序设计方
法是非常重要的&
本书是'
!"!#
!
!"!!
和$%&
核汇编语言程序设计(教材的配套实训教程及习题解答%共设((
章
'"
个实验&目的是使学生通过实验加深对理论课程的理解%增强学生的实际动手能力和实践应用
能力&
!
图书在版编目!
!"#
"数据
!
!"!#
!
!"!!
和$%&
核汇编语言程序设计实验教程及习题解答!李敬兆主编)
)
'
版)
)合肥*
中国科学技术大学出版社%
'""!)('
!
*+,-./!0/01('0"'1!20'
!!
)!
+
!"
)
李+
!#
)
汇编语言0
程序设计0
高等学校0
教学参考资料!$
)341(1
!
中国版本图书馆5*4
数据核字"
'""!
#第('/#.(
号
出版发行!
中国科学技术大学出版社
地址*安徽省合肥市金寨路.#
号%邮政编码*
'1""'#
网址*
677
8
*!!
999)
8
:;<<)=<7>);?=)>@
电话*发行部*
"AA(B1#"'."A
!
邮购部*
"AA(B1#"'."#
印!!
刷!
中国科学技术大学印刷厂
经!!
销!
全国新华书店
开!!
本!
/!/CCD(".'CC
!
(
!
(#
印!!
张!
("E/A
字!!
数!
'/"
千
版!!
次!
'""#
年.
月第(
版!
'""!
年('
月第'
版
印!!
次!
'""!
年('
月第'
次印刷
印!!
数!
2""(
)
!"""
册
定!!
价!
(/E""
元
编 委 会 名 单
主!
任#汪光阳
副主任#周鸣争!
李敬兆!
方潜生
委!
员#"以姓氏笔画排序#
丁!
刚!
方潜生!
纪!
平!
江!
静
汪光阳!
李敬兆!
陈!
辉!
张!
雷
周鸣争!
宗欣欣!
徐!
辉!
夏!
巍
谢晓东!
詹!
林
前!!
言
汇编语言是提供给用户直接访问计算机系统最快而又最为有效的一种编程语言%使用汇编
语言编写程序能够充分发挥计算机硬件系统的功能%具有占用存储空间少,运行速度快以及代
码质量高等优点%那些需要对计算机硬件进行控制或对运行时间和效率有要求的系统软件或应
用软件%通常都是用汇编语言编写的%因此熟练掌握汇编语言源程序的设计方法是非常重要的&
目前%基于!"F!#
系列微处理器的45
机和基于$%&
核微处理器的嵌入式系统应用最为
广泛%本书是与'
!"!#
!
!"!!
和$%&
核汇编语言程序设计(教材配套的实训教程和习题解答%目
的是使学生通过做实验和做习题加深对理论课程的理解&本书在整个编写过程中%努力做到实
验简单,明了%习题解答简捷,完整%具有一定的代表性%文字解释清晰%通俗易懂&
全书实验部分共((
章'"
个实验%其中第(
章至第/
章是基于!"!#
!
!"!!
汇编语言的实验%
共有(#
个实验&第(
章介绍了!"!#
!
!"!!
汇编语言运行环境和方法%了解如何使用汇编语言编
制程序%熟悉GH,IJ
有关命令的使用%掌握GH,IJ
有关指令的功能%利用GH,IJ
运行简单
的程序段&第'
章介绍了不同数码转换编程及程序调试&第1
章介绍了汇编语言存储器操作
的程序设计实验&第2
章介绍了汇编语言程序设计基本结构实验%即顺序程序实验,分支程序
实验&对每类实验都进行了详细的问题分析%实验验证&第A
章介绍了数据运算类如双精度加
法,
,5G
减法,乘法等程序设计实验&第#
章介绍了*
!
K
程序实验%对键盘扫描实验,绘图实验
进行了详细论述&第/
章介绍了汇编语言与5
!
5LL
语言的混合程序设计方式%重点叙述了
5
!
5LL
嵌入汇编程序实验和5
!
5LL
调入汇编程序模块实验&第!
章至第((
章是基于$%&
核微处理器汇编语言的实验%共有2
个实验%分别对$%&$G+
集成开发环境,
$G+()'
应用实
例,
$%&
汇编语言程序设计和36=CM
汇编语言程序设计进行了介绍&
本书的第(
章,第#
章的实验二,第/
章至第((
章由安徽理工大学徐辉老师,江静老师,李
敬兆老师编写&其余各章实验均由承担相应章节教材的安徽工业大学张雷老师,纪平老师%安
徽建筑工业学院丁刚老师,夏巍老师%安徽工程科技学院谢晓东老师编写&全书习题解答部分
由承担'
!"!#
!
!"!!
和$%&
核汇编语言程序设计(相应章节的老师编写&安徽理工大学李敬兆
教授任主编&
由于编者水平所限%书中难免存在错误和不妥之处%敬请广大读者批评指正&
编!
者
'""!)/
!
前!!
言""""""""""""""""""""""""""""""""""""""""""
第一部分!
$%$&
和基于'()
核汇编语言程序设计实验教程
第(
章!
汇编语言程序调试方法
实验一!
汇编语言运行环境及方法$简单程序设计
一$实验目的
(E
熟悉汇编语言运行环境和方法&
'E
了解如何使用汇编语言编制程序&
1E
熟悉GH,IJ
有关命令的使用方法&
2E
利用GH,IJ
掌握有关指令的功能&
AE
利用GH,IJ
运行简单的程序段&
二$实验内容
(E
学会输入,编辑汇编语言程序&
'E
学会对汇编语言程序进行汇编,连接和运行&
1E
进入和退出GH,IJ
程序&
2E
学会GH,IJ
中的G
命令,
H
命令,
%
命令,
3
命令,
$
命令,
J
命令等的使用&对于I
命令,
-
命令,
N
命令等%也应试一下&
三$实验准备
(E
仔细阅读有关汇编语言环境的内容%事先准备好使用的例子&
'E
准备好源程序清单,设计好调试步骤,测试方法,对运行结果的分析&
1E
编写一个程序*比较'
个字符串所含的字符是否相同&若相同则显示O&P7>6)O
%否则显
示O-QCP7>6
-
O
&
2E
仔细阅读有关GH,IJ
命令的内容%对有关命令%都要事先准备好使用的例子&
四$实验步骤
(E
在GK+
提示符下%进入&$+&
目录&
'E
在&$+&
目录下启动HG*3
编辑程序%输入源程序%并对其进行汇编,连接和运行&
!
"
(
#调用;?R7
输入,编辑源程序并保存在指定的目录中&例*
;?R7PM>)P<C
!
"
'
#用汇编程序CP<C
对源程序汇编产生目标文件QM
S
&例*
CP<CPM>
1
第(
章!
汇编语言程序调试方法""""""""""""""""""""""""""""""""""""""""""
不断修改错误%直至汇编通过为止&
!
"
1
#用连接程序TR@U
产生执行文件;V;
&例*
TR@UPM>
!
"
2
#执行程序
可直接从GK+
执行程序%即在GK+
环境中%输入文件名即可&
1E
详细记录每一步所用的命令%以及查看结果的方法和具体结果&
五$实验方法
有关汇编语言程序的上机过程请读者参阅清华大学出版社(..(
年出版的'
*,&45
汇编语
言程序设计(的2)2
节&在这里%我们举例简要说明该过程以及程序的调试方法&
例*+*
!
比较字符串,-.
/
01
试编写一程序*比较两个字符串<7:R@
W
(
和<7:R@
W
'
所含的字符是否相同&若相同则显示
O&P7>6O
%否则%显示O-QCP7>6O
&
我们可以用串比较指令来完成程序所要求的功能&上机过程如下*
(E
调用字处理程序9Q:?<7P:
建立P<C
文件
当然也可以用其他编辑程序如8
>;?
或行编辑程序;?TR@
来建立源文件&
5
#
N+
使用非文本文件方式"
@
命令#建立以<PC
8
T;)P<C
为文件名的源文件如下所示&然后用
53%XYF
命令将文件存入磁盘%并使系统返回GK+
&
.
4%KJ%$&3*3XHJKH+ZH%HBB5QC
8
P:;<7:R@
W
.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
?P7P:;P<;
W
C;@7
.
?;[R@;?P7P<;
W
C;@7
<7:R@
W
T ?M O&Q\;76;>=:<Q:MP>U9P:?)O
<7:R@
W
' ?M O&Q\;76;>=:<Q:MP>U9P:?)O
.
C;<<( ?M O&P7>6)O
%
(1
%
("
%
O]O
C;<<' ?M O-QCP7>6
-
O
%
(1
%
("
%
O]O
?P7P:;P;@?<
.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
8
:Q
W
@PC<;
W
C;@7
.
?;[R@;>Q?;<;
W
C;@7
.
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
CPR@
8
:Q> [P:
P<<=C;><
*
8
:Q
W
@PC
%
?<
*
?P7P:;P
%
;<
*
?P7P:;P
<7P:7
* .
<7P:7R@
W
;V;>=7RQ@P??:;<<
.
<;7=
8
<7P>U[Q::;7=:@
8
=<6 ?<
.
<P\;QT??P7P<;
W
C;@7
<=M PV
%
PV
.
8
=7̂;:QR@$F
8
=<6 PV
.
<P\;R7Q@<7P>U
2
!"!#
!
!"!!
和基于$%&
核汇编语言程序设计实验教程及习题解答""""""""""""""""""""""""""""""""""""""""""
.
<;7G+:;
W
R<7;:7Q>=::;@7?P7P<;
W
C;@7
CQ\ PV
%
?P7P:;P
.
?P7P:;P<;
W
C;@7P??:
CQ\ ?<
%
PV
.
R@7QG+:;
W
R<7;:
CQ\ ;<
%
PV
.
R@7QH+:;
W
R<7;:
.
&$*-4$%3K_4%KJ%$&JKH+ZH%H
T;P <R
%
<7:R@
W
T
T;P ?R
%
<7:R@
W
'
>T?
CQ\ >V
%
'A
:;
8
^ >C
8
<M
S
^ CP7>6
T;P ?V
%
C;<<'
S
C
8
<6Q:7?R<
8
CP7>6
*
T;P ?V
%
C;<<(
?R<
8
*
CQ\ P6
%
".
R@7 '(6
:;7
.
:;7=:@7QGK+
CPR@ ;@?
8
.
;@?Q[CPR@
8
P:7Q[
8
:Q
W
:PC
.
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
8
:Q
W
@PC;@?<
.
;@?Q[>Q?;<;
W
C;@7
.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;@? <7P:7
.
;@?P<<;CMT
`
'E
用汇编程序CP<C
"或P<C
#对源文件汇编产生目标文件QM
S
5
*
%#
CP<C<PC
8
T;
.
&R>:Q<Q[7
"
%
#
&P>:Q$<<;CMT;:a;:<RQ@A)""
5Q
8̀
:R
W
67
"
5
#
&R>:Q<Q[75Q:
8
(.!(B(.!A
%
(.!/) $TT:R
W
67<:;<;:\;?)
A(A'"L2'1A!2,
`
7;<<
`
CMQT<
8
P>;[:;;
"NP:@R@
W
H::Q:<
"+;\;:; H::Q:<
1E
用连接程序TR@U
产生执行文件;V;
5
*
%#
TR@U<PC
8
T;
.
A
第(
章!
汇编语言程序调试方法""""""""""""""""""""""""""""""""""""""""""
&R>:Q<Q[7
"
%
#
K\;:TP
`
XR@U;: a;:<RQ@1)#"
5Q
8̀
:R
W
67
"
5
#
&R>:Q<Q[75Q:
8
(.!1B(.!/) $TT:R
W
67<:;<;:\;?)
X*-Y
*
9P:@R@
W
X2"'(
*
@Q<7P>U<;
W
C;@7
2E
执行程序
5
*
%#
<PC
8
T;
&P7>6)
终端上已显示出程序的运行结果&为了调试程序的另一部分%可重新进编辑程序修改两个
字符串的内容%使它们互不相同&如修改后的数据区为*
.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
?P7P:;P<;
W
C;@7
!!
.
?;[R@;?P7P<;
W
C;@7
!!!!
<7:R@
W
T
!!
?M O&Q\;76;>=:<Q:MP>U9P:?)O
!!!!
<7:R@
W
' ?M O&Q\;76;>=:<Q:MP>U9P:?)O
.
!!!!
C;<<( ?M O&P7>6)O
%
(1
%
("
%
O]O
!!!!
C;<<' ?M O-QCP7>6
-
O
%
(1
%
("
%
O]O
?P7P:;P;@?<
.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
然后%重新汇编,连接,执行%结果为*
5
#
<PC
8
T;
-QCP7>6
-
至此%程序已调试完毕%运行结果正确&
另一种调试程序的方法是使用?;M=
W
程序&可调用如下*
5
#
?;M=
W
<PC
8
T;);V;
此时%
?;M=
W
已将执行程序装入内存%可直接用W
命令运行程序&
B
W
&P7>6)
4:Q
W
:PC7;:CR@P7;?@Q:CPTT
`
为调试程序的另一部分%可在?;M=
W
中修改字符串内容&可先用=
命令显示程序%以便了
解指令地址&显示结果如下所示&
B=
"G1#
*
""""(H 4I+Z G+
"G1#
*
"""(',5" +I, $F
%
$F
"G1#
*
"""1A" 4I+Z $F
"G1#
*
"""2,!1("G &Ka $F
%
"G1(
"G1#
*
"""/!HG! &Ka G+
%
$F
"G1#
*
""".!H5" &Ka H+
%
$F
#
!"!#
!
!"!!
和基于$%&
核汇编语言程序设计实验教程及习题解答""""""""""""""""""""""""""""""""""""""""""
"G1#
*
""",!G1#"""" XH$ +*
%/
""""
0
"G1#
*
"""_!G1H(."" XH$ G*
%/
""(.
0
"G1#
*
""(1_5 5XG
"G1#
*
""(2,.(."" &Ka 5F
%
""(.
"G1#
*
""(/_1 %H4b
"G1#
*
""(!$# 5&4+,
"G1#
*
""(./2"# cb ""'(
"G1#
*
""(,!G(#1,"" XH$ GF
%/
""1,
0
"G1#
*
""(_H,"2 c&4 ""'A
B=
"G1#
*
""'(!G(#1'"" XH$ GF
%/
""1'
0
"G1#
*
""'A,2". &Ka $Z
%
".
"G1#
*
""'/5G'( *-3 '(
"G1#
*
""'.5, %H3_
"G1#
*
""'$!$2#"! &Ka $X
%/
,4L"!
0
"G1#
*
""'G.! 5,N
"G1#
*
""'HA" 4I+Z $F
"G1#
*
""'_!,2#"2 &Ka $F
%/
,4L"2
0
"G1#
*
""1'"15# $GG $F
%
+*
"G1#
*
""12A" 4I+Z $F
"G1#
*
""1AH!A!__ 5$XX __."
"G1#
*
""1!!152"# $GG +4
%
L"#
"G1#
*
""1,!,_! &Ka G*
%
$F
"G1#
*
""1G!1____ 5&4 G*
%
B"(
"G1#
*
""2"/A"5 c-b ""2H
将端点设置在程序的主要部分以前&
B
W
"M
$Fd"G1( ,Fd"""" 5Fd""/$ GFd"""" +4d___5 ,4d"""" +*d"""" G*d""""
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d""", -aI4H*4Xb%-$4H-5
"G1#
*
""",!G1#"""" XH$ +*
%/
""""
0
G+
*
""""d#_2G
根据其中指示的?<
寄存器内容查看数据段的情况如下*
B?"
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"#'#(#1#,//#(/' ;>=:<Q:MP>U9P:
/
第(
章!
汇编语言程序调试方法""""""""""""""""""""""""""""""""""""""""""
"G1(
*
""1" #2'H2G#(/2#1#!'HB"G"$'22H#_'"#G#( ?)&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/2"#!G(#1,""H,
#
))))))))7)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,!$2#"!.!A"!, )))'))))
-
))_))4)
可用;
命令修改数据区的字符串%操作如下*
B;'.
"G1(
*
""'. #')## #()#[ #1)/' #,)// //)#( #()/' /')#2
"G1(
*
""1" #2)'; 'H)'"
再次用?
命令查看修改结果&
B?"
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"###_/'//#(/'#2 ;>=:<Q:[Q:9P:?
"G1(
*
""1" 'H'"2G#(/2#1#!'HB"G"$'22H#_'"#G#( )&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/2"#!G(#1,""H,
#
))))))))7)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,!$2#"!.!A"!, )))'))))
-
))_))4)
用W
命令运行程序%结果为*
B
W
-QCP7>6
-
4:Q
W
:PC7;:CR@P7;?@Q:CPTT
`
用e
命令退出?;M=
W
&
B
e
至此%程序已调试完毕&为了进一步说明?;M=
W
命令的使用方法%我们再次重复上述程序
的调试过程%只是使用;
,
P
和[
命令来修改数据区的内容而已&必须注意%由于在用?;M=
W
调试
程序时%只能修改当时有关的内存单元内容%因此重新用?;M=
W
装入程序时%仍是原来在磁盘中
的内容&操作如下*
5
*
%#
?;M=
W
<PC
8
T;);V;
B
W
"M
$Fd"G1(
!
,Fd""""
!
5Fd""/$
!
GFd""""
!
+4d___5
!
,4d""""
!
+*d""""
!
G*d""""
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d""", -aI4H*4Xb%-$4H-5
"G1#
*
""",!G1#"""" XH$ +*
%/
""""
0
G+
*
""""d#_2G
B?"
!
!"!#
!
!"!!
和基于$%&
核汇编语言程序设计实验教程及习题解答""""""""""""""""""""""""""""""""""""""""""
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"#'#(#1#,//#(/' ;>=:<Q:MP>U9P:
"G1(
*
""1" #2'H2G#(/2#1#!'HB"G"$'22H#_'"#G#( ?)&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/2"#!G(#1,""H,
#
))))))))7)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,2#_$!,AH_55( )))'))))
-
)_))f))
B;'.O[Q:9P:?)O'"
B?"
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"###_/'//#(/'#2 ;>=:<Q:[Q:9P:?
"G1(
*
""1" 'H'"2G#(/2#1#!'HB"G"$'22H#_'"#G#( )&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/2"#!G(#1,""H,
#
))))))))7)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,2#_$!,AH_55( )))'))))
-
)_))f))
B
W
-QCP7>6
-
4:Q
W
:PC7;:CR@P7;?@Q:CPTT
`
可见这种;
命令的方式避免使用$+5
"
码进入%对用户是比较方便的&其中最后一个'"
是空格键的$+5
"
码%以补足原来的内容恢复原状%具体如下*
BP"?1(
*
'.
"G1(
*
""'.?MOMP>U9P:?)O
"G1(
*
""1'
B?"
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"#'#(#1#,//#(/' ;>=:<Q:MP>U9P:
"G1(
*
""1" #2'H2G#(/2#1#!'HB"G"$'22H#_'"#G#( ?)&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/2"#!G(#1,""H,
#
))))))))7)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,A#_$!./HHH!, )))'))))
-
)a))
%
))
B
W
.
第(
章!
汇编语言程序调试方法""""""""""""""""""""""""""""""""""""""""""
&P7>6)
由于P
命令是汇编命令%因此信息是用汇编格式进入的&如果修改的是程序中的语句%方
法也是相同的%下面我们还会看到这类的操作&现在再看一下用[
命令修改数据区的方法&
5
*
%#
?;M=
W
<PC
8
T;);V;
B
W
"M
$Fd"G1( ,Fd"""" 5Fd""/$ GFd"""" +4d___5 ,4d"""" +*d""""G*d""""
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d""", -aI4H*4Xb%-$4H-5
"G1#
*
""",!G1#"""" XH$ +*
%/
""""
0
G+
*
""""d#_2G
B?"
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"#'#(#1#,//#(/' ;>=:<Q:MP>U9P:
"G1(
*
""1" #2'H2G#(/2#1#!'HB"G"$'22H#_'"#G#( ?)&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/2"#!G(#1,""H,
#
))))))))7)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,A#_$!./HHH!, )))'))))
-
)a))
%
))
B['.T.O[Q:9P:?)O'"
B
W
-QCP7>6
-
4:Q
W
:PC7;:CR@P7;?@Q:CPTT
`
B
e
[
命令中的'.
为修改区的首地址%
T.
表示需要修改的长度为.
个字节&
为进一步说明程序的调试过程%现假设程序编制错误*在源文件中把S
^CP7>6
改为S
@̂
码
提出&该程序汇编,连接后%进入得不够调试如下*
5
#
?;M=
W
<PC
8
T;);V;
B
W
-QCP7>6
-
4:Q
W
:PC7;:CR@P7;?@Q:CPTT
`
结果是错误的"因源文件中的两个字符是相同的#&为检查程序的错误%将断点设在比较串
之后&
B
W
(.
$Fd"G1( ,Fd"""" 5Fd"""" GFd"""" +4d___5 ,4d"""" +*d""(. G*d""1'
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d""(. -aI4H*4Xb%-$4H-5
"G1#
*
""(./A"# c-b ""'(
"(
!"!#
!
!"!!
和基于$%&
核汇编语言程序设计实验教程及习题解答""""""""""""""""""""""""""""""""""""""""""
此时零标志为b%
%即b_d(
%即表示比较结果相等%说明比较结果是正确的&现在可用8
命令再执行一条指令以观察指令的转向&
B
8
$Fd"G1(
!
,Fd""""
!
5Fd""""
!
GFd""""
!
+4d___5
!
,4d""""
!
+*d""(.
!
G*d""1'
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d""(, -aI4H*4Xb%-$4H-5
"G1#
*
""(,!G(#1,"" XH$ GF
%/
""1,
0
G+
*
""1,d#_2H
为查到""1,
单元的内容%可查数据区如下*
B?"
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"#'#(#1#,//#(/' ;>=:<Q:MP>U9P:
"G1(
*
""1" #2'H2G#(/2#1#!'HB"G"$'22H#_'"#G#( ?)&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/A"#!G(#1,""H,
#
))))))))=)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,2#_$!,AH_55( )))'))))
-
)_))f))
可见""1,
单元的内容为2H
%即-
的$+5
"
码%后面跟的是-QCP7>6
-%这说明S
@̂
指令使用错
误%应该改为S
^
&可用P
命令修改%应用=
命令检查修改结果&运行结果说明程序修改正确&
BP(.
"G1#
*
""(.
S
"̂"'(
"G1#
*
""(,
B="
"G1#
*
""""(H 4I+Z G+
"G1#
*
"""(',5" +I, $F
%
$F
"G1#
*
"""1A" 4I+Z $F
"G1#
*
"""2,!1("G &Ka $F
%
"G1(
"G1#
*
"""/!HG! &Ka G+
%
$F
"G1#
*
""".!H5" &Ka H+
%
$F
"G1#
*
""",!G1#"""" XH$ +*
%/
""""
0
"G1#
*
"""_!G1H(."" XH$ G*
%/
""(.
0
"G1#
*
""(1_5 5XG
"G1#
*
""(2,.(."" &Ka 5F
%
""(.
"G1#
*
""(/_1 %H4b
"G1#
*
""(!$# 5&4+,
"G1#
*
""(./2"# cb ""'(
"G1#
*
""(,!G(#1,"" XH$ GF
%/
""1,
0
((
第(
章!
汇编语言程序调试方法""""""""""""""""""""""""""""""""""""""""""
"G1#
*
""(_H,"2 c&4 ""'A
B:R
8
*4""(,
*
B
e
在这里应该注意%在使用P
命令修改数据区时%必须给出数据段的地址%而在修改程序区时
由于P
命令的缺省段位代码段%所以直接给出偏移地址就可以了&
在调试过程中%也可以用7
命令逐条跟踪程序的执行&下面列出断点停在"M
后%用[
命令
修改数据区中字符串的内容%然后逐条执行指令的情况&
B['.T.O[Q:9P:?)O'"
B?"
"G1(
*
"""" 2G#_/##A'"/2#!#AB'"#1/A/'/1#_/''" &Q\;76;>=:<Q:
"G1(
*
""(" #'#(#1#,//#(/'#2B'H2G#_/##A'"/2#! MP>U9P:?)&Q\;76
"G1(
*
""'" #A'"#1/A/'/1#_/'B'"###_/'//#(/'#2 ;>=:<Q:[Q:9P:?
"G1(
*
""1" 'H'"2G#(/2#1#!'HB"G"$'22H#_'"#G#( )&P7>6)))]-QCP
"G1(
*
""2" /2#1#!'("G"$'2""B"""""""""""""""" 7>6
-
))])))))))))
"G1(
*
""A" (H',5"A",!1("G!HBG!!H5"!G1#""""!G )L)4)())))))#)))
"G1(
*
""#" 1H(.""_5,.(.""_1B$#/2"#!G(#1,""H,
#
))))))))7)))
.
))
"G1(
*
""/" "2!G(#1'"",2".5GB'(5,!$2#"!.!A"!, )))'))))
-
))_))4)
B7
$Fd"G1(
!
,Fd""""
!
5Fd""/$
!
GFd""""
!
+4d___5
!
,4d""""
!
+*d""""
!
G*d""""
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d"""_ -aI4H*4Xb%-$4H-5
"G1#
*
"""_!G1H(."" XH$ G*
%/
""(.
0
G+
*
""(.d#_2G
B7
$Fd"G1(
!
,Fd""""
!
5Fd""/$
!
GFd""""
!
+4d___5
!
,4d""""
!
+*d""""
!
G*d""(.
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d""(1 -aI4H*4Xb%-$4H-5
"G1#
*
""(1_5 5XG
B7
$Fd"G1( ,Fd"""" 5Fd""/$ GFd"""" +4d___5 ,4d"""" +*d""""
G*d""(.
G+d"G1( H+d"G1( ++d"G1( 5+d"G1# *4d""(2 -aI4H*4Xb%-$4H-5
"G1#
*
""(2,.(."" &Ka 5F
%
""(.
B7
'(
!"!#
!
!"!!
和基于$%&
核汇编语言程序设计实验教程及习题解答""""""""""""""""""""""""""""""""""""""""""