7.列表伪指令语句
- ]; w7 E. q& P+ O, {* j为使源程序的.LST文件满足用户的某些要求,宏汇编专门设置了一组列表伪指令。
! W. t0 b( N7 X$ s0 G# m(1)格式控制伪指令
/ M5 t* n$ A' k. S* E6 z格式控制伪指令有PAGE,TITLE和SUBTTL。①PAGE
* @8 N, F# L% |- ?一般为程序的第一语句,它指定汇编程序所产生的列表文件每页的行数和每行的字符数。格式:PAGE 参数1,参数2
+ N0 ^1 q8 H; [1 i1 b/ g说明:参数1表示每页行数,参数2表示每行字符数。②TITLE
+ R9 M7 i7 q& {6 p( I7 g6 A( b6 R用来为程序指定一标题,以后的列表文件会在每页第一行打印这个标题。格式:TITLE 正文③SUBTTL
5 g: J) r& n8 a) r用于为程序指定一个小标题,打印在每一页的标题之后。格式:SUBTTL 正文1 o0 q- R# N- g r3 V" c
(2)列表控制伪指令
9 ]/ y# x: M B, B7 H. _% P列表控制伪指令很多,主要有:, |( n P1 {, G5 x! u- [. D5 Y9 u
①.LALL,.SALL和.XALL这是针对宏指令的伪指令。格式:.LALL/.SALL/.XALL说明:
9 }7 D! B% P* G4 X8 S●.LALL 伪指令用于对所有宏汇编列出完整的文本。. R1 g5 j' @+ W3 _, D5 U
●.SALL 伪指令用于删除宏指令所产生的所有列表。' u0 u3 K1 y4 C
●.XALL 只将宏扩展中产生目的代码的源程序列表。
" T- S. x# L- _②.LIST和.XLIST格式:.LIST/.XLIST说明:
- w7 n: Q" Z; V) X" Z●.LIST 是默认伪指令,对所有源程序进行列表直到遇到.XLIST伪指令止。
9 L5 p" `5 H/ C3 l9 D! b●.XLST 对所有源程序不产生列表直到遇到.LIST伪指令为止。上述伪指令只用于汇编产生.LST文件时起作用。& \& ^: P. @/ i
8.模块定义伪指令和通信伪指令+ @6 I9 F5 i# \. m# O2 V
在程序设计中,可以将一个复杂的程序分成若干个程序模块,每个模块在物理上和逻辑上都是相对独立的,可对它们分别进行编写和调试。即对所有模块汇编完后,再由链接装配程序LINK连接成一个完整的可执行程序。模块定义和通信指令则是实现模块划分、命名及不同模块中数据共享等的说明和记号。* }0 m) o5 V3 Q$ `4 R {
(1)模块定义语句/ s4 F" T( M' Q, v5 P( u) V1 Y
模块定义使用NAME和ENDD两条伪指令。语句格式:
: z+ J; p/ a+ INAME 模块名 (语句)ENDD 表达式说明:
3 B) R5 S( d8 M1 ^ Y" V* O●模块名是任选的为本次汇编产生的目的模块所起的名字,是NAME的操作数。
: O7 y: Z4 K( ^, }# `●ENDD表示源程序到此结束。同时,在主模块中ENDD后允许有表达式,其他它模块只书写END。( w& C" X2 a9 U/ T
(2)PUBLIC伪指令: {6 j3 h; ^ o8 t
该伪指令定义可供其他模块引用的符号。格式:PUBLIC 符号表
8 U7 g: h0 P/ O+ {) F( M3 g' @7 j说明:符号表的各项用逗号隔开,符号可以是符号常量、变量、标号或过程名。" [1 U4 B! F. F& z4 E; W2 C
(3)EXTRN伪指令
2 t: [ H3 y, Q8 }+ S* Z# d5 p, JEXTRN伪指令的功能是用于声明当前模块使用的哪些标识符在其他模块内定义。
* h& J6 t+ T6 ?格式:EXTRN 符号:类型[,符号:类型,……]
$ ^9 Q5 K0 g' v8 v8 M# [, _说明:符号可以是符号常量、变量、标号或过程名;类型可以是BYTE、WORD、DWORD、NEAR、FAR和ABS。各项由逗号隔开。/ q* S( v2 g/ S! \3 q8 R
(二)高级汇编伪指令语句1.结构和记录' _% U9 f/ W, _" y6 a; m& o V
(1)结构( C, {; Z: @4 y
①结构类型数据定义伪指令- a8 I% c h/ K8 f; M
80x86宏汇编使用伪指令STRUC和ENDS建立一种结构类型的数据,然后通过结构类型数据的预置,便可方便地访问结构中的各数据项,而不需要对操作数地址表达式进行繁锁的计算。 结构类型数据定义的格式: 结构名 STRUC
6 O+ E8 ~0 k/ V8 Y6 h┆1 A& p/ {+ |' I) u7 _9 ]1 N; |
字段名 数据定义伪指令定义符 表达式2 l% c, { n4 C% f0 @' X. f
┆
2 T P) r: p! S8 G结构名 ENDS
4 C) n) u9 e: ?3 c3 ?: I( [说明:结构类型数据是用STRUC和ENDS括起来的数据定义语句序列,这时数据定义语句中的符号称为字段名。注意:
7 Q4 Q. q2 a/ j8 L! y●定义结构时,STRUC和ENDS必须成对出现,缺一不可。4 g% `, f# F9 C: [3 L) s
●结构名是为结构起的名字,是任意选定的。. ?: C; o% Q' p* s$ i
●同时在同一结构定义中,字段名不得重名。. D& `1 x# i! H: x' F9 c
②结构变量说明与赋初值
' W2 k' u2 g4 L( M结构类型数据的定义只是告诉汇编程序已存在这样一种形式的变量,还必须对结构进行存储分配和预置后才能真正产生结构数据的变量。结构类型数据预置的格式:2 i: M9 o8 Q+ V( q$ |# ?
结构变量名 结构名 《字段值表》说明:( g. ~. G, L; P5 \. d& ~
●DATAMAX和DATATXN是结构变量名。; Q% Y' c+ {. @% _# s+ F1 e
●结构变量名是任意的,由程序员自行设定。
( E2 x& d6 t U. F" |●结构变量名与具体的存储空间和数据相联系,在程序中可直接引用。. I: ?2 O" z$ B7 m$ V; } ]
●字段值表用来给结构变量赋初值,字段值必须用尖括号括起来,其排列顺序和类型应该与结构定义时的各字段相一致,各字段值之间用逗号隔开。如果采用定义结构时的初值,则仅写一个逗号;若所有字段采用定义时的初值,则仅写一对尖括号。
( U5 d$ _7 Y1 Z注意:并不是所有的字段都可以重新赋初值,只有一项数据的字段可重新赋值。在程序中引用结构变量,可直接写结构变量名:引用结构变量的某一字段时,要采用下述格式:结构变量名。字段名7 ]; Z' x% S% r l- y+ n
(2)记录* }( g& j) b7 n1 y
记录是一种处理按位计算信息的数据类型。记录定义的格式:" n: p0 M r/ S' F3 c
记录名 RECORD 字段名:宽度[=表达式][,……]说明: _7 l$ ^) m: F7 ]8 k" ?
●记录名和字段名必须具有惟一性;
+ s2 I: Q* ?, c, Z: j+ G2 S4 O●宽度表示字段所占的位数(1~16位),如果各字段的宽度和大于8位,那么汇编程序按字处理,否则按字节处理。若总值数少于8位或16位,则所有字段都右对齐到字或字节的最低有效位置。表达式赋给相应字段的初值,是可选择的。9 _( K' @; {1 r( b
●记录的各字段宽度之和不得大于16位。记录也必须经过预置才能产生记录类型数据变量,才能真正占有内存。记录预置的格式: |