资源描述
汇编语言程序设计自学教程
[美]Mark Goodwin 著
周予滨田学锋译
王 勇 校
水利电力出版社
1 995
(京)新登字11 5号
. 内窖摄要
汇编语育是重要的计算机低镀培育.本书以简捷的语盲风格剖析丁汇
编语育程序的基奉精柯.救据表示法、指奇集、饽指夸,操作符和寻址方
式·介绍了汇绾语言的齄据结构.包括结拇.记录、宕.堆栈.奉书着重
讲■了i亡壤语言程序设计的基奉蔓采和高级的结构化程序设计方挂.
车:81R使请者在IIiifl9时闻由学台忙尊语言程序设计.并且养成结构
化蝙程盼好习惯.为夸后进一步学习奠定垒宴的基稿。奉书既可作为广大
计算机用户和高,中等学校师生的参考书.也可怍为初学者的^门书.
本书英文版由美国MISt PRESS公司出版。本书的中文版于l994年9月经美国远东图书
公司(Far East Books,USA)授权水利电力出版社在华独家出版。未经出版者许可,任何人
不得以任何形式、手段复制或抄袭率书的内容。
率书的中文裔译、审校及文字处理工作,由美田远东图书公司完成。
Copyright@1 993 by MIS:PRESS
┏━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃书 名 ┃汇嫱语富程序设计自掌蕾程 ┃
┃作 者 ┃[美]Mark Goodwin著 ┃
┃译 校 者 ┃周予捷田学锋译 王勇校 ┃
┃出版,发行 ┃水利电力出版社(北京三里河路6号) ┃
┃ ┃各地新华书店经售 ┃
┣━━━━━━╋━━━━━━━━━━━━━━━━━━━━━┫
┃排 版 ┃五环出版服务部 ┃
┃印 刷 ┃北京市朝阳区小红门印刷厂 ┃
┃规 格 ┃78'1×1∞2衄16开本ll.5印张260千宇 ┃
┃版 次 ┃1995年1月第一艇l995年1月北京第一次印刷。 ┃
┃印 数 ┃0001—5000册 ┃
┃定 价 ┃盯.呻元(古蠢盘) ┃
┃书 号 ┃Ⅱ;BN 7—120-0,,175—3/TP·85 ┃
┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛
引 言
引 言
在计算机发展的早期,编程方法只有一种——机器语言编程。计算机先驱们很快就认
识到机器语言编程很不方便,因此他们设计了一种以符号名称代表机器语言指令的编程语
言。他们称这种符号表示的编程语言为汇编语言(assembly language)。继汇编语言在前进
的道路上迈进了一步之后,计算机设计者叉开发了诸如Fortran和COBOL等高级语言
(high—level language),极大地简化了用户的编程工作。
现代计算机程序员可以使用的语言非常丰富。许多人喜欢C或Pascal。然而·还有许
许多多其它语言(包括汇编语言在内)被广泛地使用。虽然目前完全使用汇编语言编写的
应用程序很少见,但是一些忠实的汇编语言程序员不会放弃选用汇编语言的机会。更常见
的是.程序员在高级语言中融入汇编语言以加速某些与时间相关的倒程。而本书的日的正
在于此。本书假设读者熟悉一种高级语言.如C或Pascal,并希望学习使用汇编语言增强
高级语盲程序柏方法。虽然有优秀的优化编译器可以使用,但是,一些要求执行速度的过
程只能通过精心制作的汇编语言代码来实现。另外,熟悉计算机可以帮助读者写出高效率
的高级语言程序,理解计算机的实际操作。
本书讲授内容 。
本书_传授了使用亍[编语言编程的方法,书中涉及了汇编语言所有的基本特性,包括:
·汇编语言程序的要素
·8088体系结构
·数据表示法
·伪指令和操作符
·8088指令集
·寻址方式
·汇编语言中的字符串处理
·结构化编程技术
·结构和记录
·堆栈
·过程
. ·输入输出
·条件汇编
·等价和宏
·用于增强C程序的汇编语言倒程
.用于增强Pascal程序的忙编语言例程
I
汇编语言程序设计自学教程
本书不讲授的内窖
本书不详细解释{仁编语言编程的每一个细枝末节。这些细节应从汇编软件包附带的参
考手册中得到。另外。本书也不讨论大量华而不实的算法。如果读者是一位有经验的程序
员,就一定知道如何利用计算机程序达到自己的日的。本书只包含一些程序框架,而不是
大量的完整程序示范,每处只讲解一点汇编语言编程知识。在本书结束时,读者可把这些
点滴片段联系起来组成自己的汇编语言程序。
使用本书必备
需要一台IBM PC或兼容机及Turbo Assembler或者Microsoft Macro Assembler。
弓l 言
目 录
第一章8088;[绾语言程序设计…………………….………………………………。(1)
1.1机器语言………………………………………………………………………(1)
1.2汇编语言………………………………………………………………………(1)
l_3程序的组成部分………………………………………………………………(2)
1.4一个汇编语言程序范例………………………………………………………(3)
1.5汇编First程序………………………………………………………………(6)
1.6,J、结……………………………………………………………………………(9)
第=章8088体系结构…………………………………………………………………(1 0)
2.1存储单元………………………………………………………………………(1 0)
2.2 8088寄存器组…………………………………………………………………(1 3)
2.3计算机存储器…………………………………………………………………(1 6)
2.4输入和输出……………………………………………………………………(1 7)
2.5小结……………………………………………………………………………(1 7)
第兰章t据表示法…………………………………………………………………….一(1 8)
3.1二进制数字……………………………………………………………………(1 8)
3.2十进制数字系统…………………·…………………………………………”(1 9)
3.3十六进制数字系统……………………………………………………………(1 9)
3.4,正数和负数……………………………………………………………………(20)
3.5布尔运算符……………………………………………………中……………(22)
3.6以二进制编码的十进制………………………………………………………(2 3)
3.7浮点数…………………………………………………………………………(23)
3.8字符和字符串…………………………………………………………………(z3)
3.9小结……………………………………………………………………………(z4)
第四章使用t据工作……………………………………………………………………(25)
4.1 伪指令…………………………………………………………………………(2 5)
4.2运算符…………………………………………………………………………(z 9)
4.3位置计数器……………………………………………………………………(4 2)
4.4,J、结……………………………………………………………………………(4 2)
第五章鲫髓指令集……………………………………………………………………(4”
5.1汇编语言指令……………-…………………………………………………”(4 3)
5·2数据传送指令…………………………………………………………………(4 3)
5.3算术指令………………………………………………………………………(4 7)
5-4数据转换指令…………………………………………………………………(5 4)
5·5布尔指令………………………………………………………………………(5 8)
5.6循环和移位指令………………………………………………………………(6 1)
5.7 比较指令………………………………………………………………………(6 8)
5.8跳转指令………………………………………………………………………(6 9)
5.9重复指令………………………………………………………………………(84)
5·10其它指令………………………………………………………………………(8 7)
5.11小结……………………………………………………………………………(90)
第六章寻址方式…………………………………………………………………………(9 1)
6.1立即寻址方式…………………………………………………………………(91)
6.2寄存器寻址方式………………………………………………………………(9 1)
6.3直接存储器寻址方式…………………………………………………………(92)
6.4间接存储器寻址方式…………………………………………………………(9 3)
6.5小结……………………………………………………………………………(9 6)
第七章结构化穗序设计…………………………………………………………………(9 7)
7.1顺序控制………………………………………………………………………
7.2选择控制………………………………………………………………………
7.3重复控制………………………………………………………………………
7.4 小结……..……………………………………………·-j……………………·
(9 7)
(9 8)
(9 9)
(101)
第八章字符串……………………………………………………………………………(102)
8.1 Movs、MoVSB和M0哪指令…………………………………………
8.2 LOD8、LoDSB和LoD8W指令……………………………………………
8.3 STOS、SToSB和吣W指令……………………………………………
8.4 CMPS、CMPsB和CMPSW指令…………………………………………
8.5 ScAs、scAsB和SCAsW指令………………………………………-
&6小结……………………………………………………………………………
(102)
(105)
(107)
(110)
(114)
(117)
第九章结构和记录………………………………………………………………………(118)
9.1结构
9.2记录
9.3小结
(118)
(121)
(125)
第十章堆栈………………………………………………………………………………(126)
10.1堆栈……………………………………………………………………………(126)
i0.z往堆栈中置数和从堆栈中取敬………………………………………………(12Z)
10.3标志和堆栈……………………………………………………………………(128)
10·4小结……………………………………………………………………………(128)
第十一章过程……………………………………………………………………………(129)
11.1一个汇编语言过程……………………………………………………………
11.2 1崔接……………………………………………………………………………
11.3从过程返回……………………………………………………………………
11.4参数……………………………………………………………………………
11.5 d、结……………………………………………………………………………
(129)
(129)
(130)
(131)
(134)
第十=章端口……………………………………………………………………………(135)
12.1 IN指令………………………………………………………………………
12.2 0UT指令……………………………………………………………………
12.3 INS、1NSB和INSW指令…………………………………………………
12.4 REP前缀…………………Dooiooiol94miomool…………………………………
12.5 0UTS、OUTSB和oU哪r指令…………………………………………
12.6 REP黼……………………………………………………………………
12.7一、结……………………………………………………………………………
(135)
(135)
(136)
(138)
(139)
(141)
(142)
第十三章中断…………一………………………………………………………………(143)
13.1 8088中断…………………………………………………···……”………-
13.2中断处理程序…………………………………………………………………
13.3激活和关闭中断………………………………………………………………
13.4一、结……………………………………………………………………………
(143)
(144)
(146)
(146)
IH-四章来件汇蕾………………………………………………………………………(147)
14.1 IF—ENDIF条件伪指夸………………………………………………………
“.2 IF…ELSE…ENDIF条件伪指令……………………………………………
14.3 IFDEF…ENDIF条件伪指令…………………………………………………
14.4 IFNDEF…ENDIF条件伪指令………………………………………………
14.5小结………………………………………………………………………”““
(147)
(148)
(149)
(149)
(150)
第十五章等价与宏………………………………………………………………………(151)
15.1不可重复定义的数值等价……………………………………………………(151)
15.2可重复定义的数值等价………………………………………………………(152)
15.3字符串等价………………………………………………………”“………¨(152)
15.4宏………………………···……………………………………………………(153)
15.5局部标号………………………………………………………………………(154)
15.6重复块…………………………………………………………………………(155)
15.7退出宏…………………………………………………………………………(159)
15.8&操作符………………………………………………………………………(159)
15.9<>操作符…………………………………………………………………(160)
15.10 1操作符……………………………………………………………………
15.11%操作符…………………………………一………………………………
15.12宏注释………………………………………………………………………
15.13小结………………………………………………………”…···…………-
(161)
(161)
(162)
(163)
第十六章汇■语言与c和c++的接口 ……………………………………………(164)
16.1函数和变量名…………………………………………………………………
16.2参数传递………………………………………………………………………
16.3返回调用程序……………………………………………………………·…··
16.4局部变量空间…………………………………………………………………
16.5,J、结……………………………………………………………………………
(164)
(165)
(166)
(168)
(169)
IH一七章汇鳙语盲与]Pascal的接口…………………………………………………(170)
17.1函数名和变量名………………………………………………………………
17.2参数传递………………………………………………………………………
17.3返回调用程序…………………………………………………………………
17.4局部变量空间…………………………………………………………………
17.5小结……………·!……………………………………………………………-
(170)
(171)
(172)
(174)
(175)
第一章8088{f-编语言程序设计
第一章8088汇编语言程序设计
学习汇编语言编程有助于编写用于增强高级语言程序的高效代码。本章通过讲解一个
示倒程序厦以下内容开始忙编语言的编程学习:
·机器语言
·汇缩语言
·8088忙编语言程序组成部分
·程序汇编
·程序执行
1.1 机器语 言
在开始汇编语言编程的学习之前,必须了解机器语言编程。顾名思义.机器语言编程
由计算机本身的语言完成。一台诸如PC;或兼客机的数字计算机只明白两种不同的状态:关
和开。这两种数字状态通常以二进舸数字0和1表示。而且,一位二进糊散字习惯称之为
一个位(bit)。机器语言程序的表达式就由这些位串组成。这些位串被称为位模式(bit pat—
terns)。下行表示~个机器语言位模式:
1 01 1 100000000101 00000000
这些机器语言位模式代表指令、数据和指令数据的地址i上面位模式的前8位代表
8088机器语言指令。后l6位代表一个数据值。下例说明计算机是怎样看待上连模式的:
1 01 1 1000 0000010100000000
mov 丑x 3
如上倒所示,位模式的前8位命令计算机把指令后面的l6位数字送到名叫AX的存储
单元。这些存储单元叫寄存器(registers)。在上述指令中,机器语言指令命令CPU在AX
寄存器中存放数值3。
虽然机器语言很吸引人,但毕竟太难以理解。因为.一个机器语言程序可以由大量位
模式组成,面记住各种位模式完成的功能。即使是最优秀的程序员也会感到困难。为了以
更容易理解的方式表示这些机器语盲指令,早期的程序设计者发明了一种使用语言表示机
器语言指令的方法,这种语言就是汇编语盲(assembly language)。
1.2汇编语言
在忙编语言中.机器语言指令的专用名称为助记符(mnemonics)。另外,数据可以用
数字值(倒如5,16,Obfh,33,555.1)或者符号名称(倒如MAX,count,line,或
2
汇编语言程序设计自学教程
RESULT)表示。下倒说明了怎样使用汇编语言表达式表示机器语言位模式的:
mov ax,3
至少可以这么说,上述的汇编语言语句比相应的机器语言位模式好记得多。遗憾的是,
计算机不知道上述汇编语言语句的含义。为把上述语句翻译成计算机能够理解的格式,必
须使用汇编程序。汇编程序只是把汇编语言程序语句翻译成等价的机器语言位模式。
1.3程序的组成部分
8088汇编语言程序由下列四个基本部分组成;
代码段
数据段
标号
注释
1.3.1代码段
实质上,代码段(code segments)是包含指令的程序部分,这些指令完成各种任务,诸
如传送数据、控制程序流程、实现算术运算功能等等。每条汇编语言指令由两个基本部分
组成t操作符(operation)和操作数(operands)。下倒说明了指令mOv ax,3的组成:
操作符
n1_D、r
操作数
ax,3
上倒表明。助记符mov命令CPU传送一个数据。操作数ax,3告诉CPU要传送的数
据是3,羹送到AX寄存器。尽管所有的汇编语言指令都需要操作符,但不一定需要操作数-
倒如,下列语句命令8088 CPU忽略所有的可屏蔽中断:
cli
1.3.2数据段
虽然代码段是必不可少的部分.但是几乎所有的8088汇缩语言程序都至少需要一个数
据段。数据段是忙编语言程序存放敦据的部分。例如,一个需要3个16位变量(a·。b,c)
的程序要求如下数据段:
B
b
C
dw
dw
dw
3
4
7
上述浯旬中的三十dw是汇编伪指令(assembler directives),指示汇编程序定义三个
字。对于8088,一个字是16位长。因此,上面的三个语句定义所需的三个l6位变量-16
位存储单元a中存放数值3,16位存储单元b中存放数值4,而l6位存储单元c中存放不
定值。实质上,上述数据段中的?告诉汇编程序l6位存储单元c未定义·因此,并没有把
第一章8088汇编语言程序设计
3
c假设成任何特定值。
1.3.3标号
上述示例数据段中的符号名a、b和c是汇编语言标号(1abels)的一个极好实例。除了
用作变量名以外.汇编语言标号还可用作名称,倒如段名或过程名。合法的8088汇编语言
标号由教字、字母和字符?、.、@一、和$组成。另外,名称不能以敷字打头.点号(.)只
能用作标号的第一十字符。标号的长度不限,但只有前31个字符有效。除非标号用于连接
汇编伪指令,否则后面必须跟一个分号(:)。
1.3.4注释
汇编语言程序的第四部分是注释(comment)。顾名思义,注释描述程序所做的工作而
并不影响程序的实际操作。虽然注释看起来不是必需的,但它们是任何程序的一十重要组
成部分。通常在以后程序员需要调试或修改程序时,利用注释会明显地减少重新读懂完成
某些功能的程序所需的时间。在8088汇编语言程序中,编写注释只需以分号(})开头即
可。下例列举了一些汇编语言注释:
mov ax,3 l AX iS set t0 3
I Tl”previous instruction sets register AX t0 3
1.4一个汇编语言程序范例
下面的倒子列举了一个非常短小的8088汇编语言程序。虽然相当简单,但是它指出了
组成一个忙编语盲程序的要素。首先,查看下面的程序。然后逐行解释同一程序。
first.asm—A first assembly language program
Code s egment
_TEXT segment word public‘CODE。
assume c6:』EXT.d宕:』ATA.ss:STACK
:Add
addem
tw0 16 bit values
Proc far
mov ax.DATA
mov ds。ax
皿oV aX.a
add ax.b
mOV C.aX
:Entry point from DOS
:Point the data segment
:register to the data:
degment
:AX=a
:AX=a+b
:c=a+b
4 汇编语言程序设计自学教程
mOV ax.也C00h
int 21h
addem endp
—TEXT ends
●
:Data segment
●
_DATA segment
a dw 3
b dw 4
c dw ?
_DATA endS
:AX—NO error return
:Code
:Return to DOS
word publiC‘DATA’
:
;Stack segment
—STACK segment para stack。STACK’
ST^CK
db l28 dup(?)
end鱼
end addem :Defines the entry point
I first.asm—A first assembly language program
是一个注释,它给出了程序名first.ssm,并简要说明丁程序用途。
}.
}Code segment
I
说明后面是代码段。
TEXT
segment word public'CODE’
表明CODE(代码)段开始,并为恢段指定标号一TEXT。
assume c8:一TEXT,d5:一DATA,ss:一STACK
assu掘e是一个汇编程序伪指令,它向汇编程序通报8088段寄存器所指向的段·在此·
汇编程序。假设一8088代码段寄存器CS指向一TEXT段,数据段寄存器DS指向一DATA
第一章8088;I-编语言程序设计
5
段.堆栈段寄存器SS指向一STACK段。注意,这些都是从汇编程序角度而言的假定。实
际上,段寄存器可能指向指示的段,也可能指向别处。
,
;Add tW0 1 6一bit values
}
说明后继过程的用途。
addem proc far l Entry point from DoS
表明过程addem开始。而且过程是远(far)谓用。
mov ax·一DATA ;Point the data segment
把DATA段地址送入寄存器AX。
mov ds-ax I register to the data
;segment
设置8088数据段寄存器指向一DATA段。由于first.asm是DOS EXE程序,因此DOS自
动设置8088代码段寄存器指向一TEXT段,而堆栈段寄存器指向程序上端的一STACK段。
然而,8088数据段寄存器的相应值必须由程序手工设置。
mov ax,a ;AX—a
把存放在符号名为a的存储器单元中的值进入寄存器AX。
add ax,b}AX—a+b
寄存器AX中的值加上存放在符号名为h的存储器单元中的值。注意,相加的结果保留在
AX中。
mov c,ax ;c—a+b
在符号名为C的存储器单元中存放相加运算的结果。
mOV ax.4cOOh ;AX—No error return code
int 21 h ;Return tO DOS
把程序控制还给MS—DOS。
addem endp
告知忙编程序过程addem已经结束。
—.TEXT ends
告知汇编程序一TEXT段已经结束。
I
;Data segment
I
6
汇编语言程序设计自学教程
说明后继段是数据段。
一DATA segment word publie ‘DATA'
表明DATA(数据)段开始并为该段指定标号一DATA。
a dw 3 ’
指示汇编程序留出一个l6位字的空间,初始值为3.符号名为a。
b dw 4
指示汇编程序留出一个l6位字的空间,初始值为4,符号名为b。
C dw ?
指示汇编程序留出一个l6位字的空间,无初始值,符号名为C。
—.DATA ends
告知汇编程序一DATA段已结束。
’
}stack segment
}
说明后继段是堆栈段。
一STACK segment pars stack‘STACK?
表明STACK段并指定标号为一STACK。实质上。堆栈段是数据段的一十特殊类型。它常
用于保存在CPU和程序之间传送的数据。
db l28 dup(?)
指示汇编程序保留l28个字节的不定值。
一STACK ends
告知汇编程序一STACK段已结束。
end addem I Defines the entry point
告知汇编程序到达程序结尾,紧接着addem标号后面的代码是MS—DOS进入该程序的入口
点。
1.5汇编First程序
虽然上述程序范例深入透视了一个8088汇编语言程序,但是没有说明如何刨建一个程
序。创建忙编语言程序的第一步是使用文本编辑器输入程序的源代码(source code)。源代
码只是一个程序的文本文件。磁盘上如果有以上程序的源代码,就可以使用下列命令行利
用Microsoft Macro Assembler(MASM)汇编它: 。
第一章8088;E编语言程序设计
7
ms.sm first.asm}
如果使用Turbo Assembler(TASM)汇编程序,就输入下列命令行:
tasm first.asm}
如果正确地输入了first.asm的源代码,汇编程序产生一个名为first.obj的目标模块
(object modale)。目标模块是汇编源代码到机器语言的转换结果。
此程序在能够实际运行之前还需要完成最后一个步骤。汇编语言程序创建周期的最后
阶段叫做链接(1inking)。程序的链接过程把忙编程序生成的目标模块变成可执行文件,名
叫first.exe。为利用Microsoft Linker创建first.exe,可以使用下列命令行:
link firstI
另外,下列命令行使用Turbo Linker链接first.exe:
tlink first I
1.5.1运行程序
至此,已建立了该程序的DOS可执行形式.使用下列DOS命令执行它:
first
试运行first后,程序员可能想知道有没有出错。输入正确的命令行后.MS—DOS系统
几乎立即显示提示符。虽然这看上去不像正确的结果,但实际上该程序确实完成了预期的
功能,程序员可以使用debu9查看程序的内部工作。为此,输入下列DOS命令:
debug first.exe
debu9提示符出现。在提示符下输入U。U命令使debu9不亍亡编(unassemble),或更确
切地说反汇编(disassemble)后继的20个字节。下面列出了debu9产生的结果:
2131:0000 883221
2131:0003 8ED8
2131:O005 A10400
213 1:0008 03060600
2131:OOOC A30800
2131:O00F B8004C
2131:0012 CD2l
213 1:0014 0300
2131:O016 0400
2131:O018 0000
2131:001A lB894
2131:001E AlD84
MOV AX.2 132
MoV DS.AX
MOV AX.[0004]
ADD AX.[0006]
MOV [0008].Ax
MOV AX.4C00
工NT 2l
ADD AX.[BX+SI]
ADD AL.00
ADD [BX+S工】.AL
SBB" CX.[BX+DI+F646]
MOV AX.[43D8]
反汇编列出的前七行和first.asm的代码段中的七行代码几乎完全一样。唯一的区别在
8
汇编语言程序设计自学教程
于源代码使用像一STACK、a、b、和C这样的符号名,而反汇编列举所使用的实际存储器
单元。
debu9的t命令用于查看程序实际执行预期功能的效果。t命令使debu9执行下一条机
器指令,显示8088寄存器的结果内容,然后显示下一条机器语言指令的反汇编形式。输入
t,显示以下结果; 。
一t
AX=2132 BX=0000 CX-00IA DX=0000 SP-0080 BP=0000 SI"0000 DI--0000
DS-2121 ES=2121 SS一2133 C9一2131 IP一0003}IV UP EI PL NZ NA PO NC
2151:0005 8ED8 MOV DS,AX 。
请注意此时AX是怎样保持一DATA段地址(2132H)的。
注;实际段地址根据DOS版本以及调入内存中的TSR(终止驻留程序)而各不相同。
继续执行指令MoV DS,AX: ‘
一t
AX=21 32 BX--0000 CX=001A DX=0000 SP-0080 BP"0000 S 1一0000 D1一0000
DS-2132 ES-2121 SS=2133 CS-t2131 IP-0005.NV UP El PL NZ NA PO NC
j131:0005 A10400 MOV AX.【0004]
DS:0叠O420003
'
此时,DS寄存器保存寄存器AX的值。执行指令MOV AX,[000043:
一t
1- 。AX=0003 B)仁=0000 CX一00lA DX一0000 SP-0080 BP-0000 SI-0000 DI=0000
Dgl2132 ES=2121 SS=2133 CS=2131工PlO008 NV UP EI PL NZ NA PO NC
2131:0008 03060600 ADD AX.[0006】
。DS:00.06.-0004
此时,AX保存a中的值。执行指令ADD AX.[00063;
1 .t -
一 _ _
^XIO007 BX臣0000 CX_00IA D】-_0000 SPl0080 BP-0000 S1一0000 D工·l0000
k 。
.DS-2132 ES-2121 SS=2133 C$-2131工P_000C N、,UP E工PL NZ NA PO NC
2131:O00C.A30800 MOV [0008].Ax -
DS:0008-0000
此时.AX等于a和b相加的和。执行指令MOV[0008],AX;
. 。t ,
AX--0007 BX=0000 CX二-001A DX--0000 SP=0080 BP-0000 91-0000 DI=0000
DS一2132 Es-2i21 SS=2133 CS-2131 IP-000F NV UP El PL NZ NA PO NC
展开阅读全文