八、80x86宏汇编说话的数据和表达式 # I3 e+ M X; f% Z( x
(一)常数
- L& N5 S: a) p- N \ 在宏汇编中,许可使用的常数有: " J j0 T a! ^1 t* x3 R8 a
● 二进制常数
, @$ _4 M5 U- U6 z! C ● 十进制常数
2 c- u7 a3 k1 h0 h K3 v ● 八进制常数
& n" w p9 Y& o# p: ` ● 十六进制常数 + @% K3 x9 C9 A% \2 t& p
● 十进制科学记数法
8 j; V' \3 W0 B1 B6 z) T ● 串常数 4 T0 M4 V9 J& Y/ o7 j7 k, P
(二)变量 . {8 ?0 ^$ O/ P( v& F
变量用于界说存储器中的数据,这些数据在轨范运行过程中可随机改削。为了便于对变量的访谒,变量经常以变量名的形式呈此刻轨范中。变量名可以认为是存放数据的存储单元号地纸怪虽量的三个属性是:
- r7 r+ @, K) d; F5 f (1)段属性 8 i m8 h5 M* F$ _2 c; R
指变量地址段的段基址。
3 n7 ]8 Q6 J2 ~8 j8 @/ g' h (2)偏移地址属性 3 V/ ?: A, R0 |" S$ Y* X
指变量地址段中的偏移量,即变量地址地址与段基址之间的字节距离。
8 ?' | x1 l3 g8 m' ?) I* y1 s (3)类型属性
! A2 n& T3 R6 o 指变量占用存储单元的字节数。占用1个字节的称为字节变量,其类型BYTE;占用2个字节的称为字变量,其类型为WORD;占用4个字节的称为双字变量,其类型为DWORD。此外,还有8字节(即4个字)变量和10字节变量,它们分袂占用8个字节存储单元和10个字节存储单元,其类型为QWORD和TBYTE。
1 v% b9 C9 G7 L9 ~) h1 H' C" T" R 变量可以用伪指令DB、DW、DD、DZ、DT进行界说。 1 M8 R% U7 |2 x4 g
(三)标号
! d! ]9 G" h3 T$ ~; _/ P 标号是给指令性语句地址地址取的名字,和变量一样,标号有三个属性:
6 \$ n3 K* d; n) z4 ?" G) i7 [: X (1)段属性 ( ?( i& H2 x8 e5 `$ j! O" X B
(2)偏移地址属性
, n( s @' j" F; ^ (3)类型属性 3 Q4 \, P5 F. u P% l
(四)表达式和运算符
+ K. {5 X; e/ S 宏汇编中有三种运算符:算术运算符、逻辑运算和关鲜ё偎算符。
7 T+ s" M& ]% j# N0 Y+ A1 D- h* N0 { 1.算术运算符 7 z0 }8 U/ N4 w8 J- V* Q
算术运算符搜罗加(+)、减(-)、乘(*)、除(/)、模除(MOD)、左移(SHL)和右移(SHR)七种。+、-、*、/是常用的运算符,加入运算的数和运算结不美观均为整数。除法运算的结不美观取商的整数部门,而模除的运算结不美观只取它的余数。左移或右移运算符可使二进制数左移或右移若干位,相当于二进制数进行乘法或除法运算,是以也把它们作为算术运算符。
, G5 G( D1 u8 ^* w$ g# w0 S 2.逻辑运算符
. E" ?# t8 ~3 d( N 逻辑运算符搜罗AND(与)、OR(或)、XOR(异或)、NOT(非)四种。它们只合用于对常量进行逻辑运算。注重,表达式中的逻辑运算符只能呈此刻说话的操作数部门而且是在汇编时完成运算的。 / g' L1 L: B. q! U
3.关鲜ё偎算符
5 w% N' _- d" m) {" T; i 关鲜ё偎算符搜罗EQ(相等)、NE(不等)、LT(小于)、(GT)大于、LE(小于或等于)、GE(大于或等于)6种运算。关鲜ё偎算符是用于斗劲两类的巨细,要求两个操作数都是数字或者是统一段中的两个地址值。斗劲的结不美观用逻辑值暗示。关鲜ё偎算符与逻辑运算符常连鲜ё仝一路使用。 8 d/ {5 q! S0 b: }$ b) O1 r
4.数值回送运算符
0 @/ A' z8 N6 {: u2 U 数值回送运算符分为两类:一类是将指定的变量名或标号地址的有关内容赋给指令,如OFFSET和SEG;另一类有3种:TYPE,LENGTH和SIZE,将变量名或标号的一些特征传送给指令。
0 M4 j/ W3 d0 a5 U; r2 V (1)OFFSET
" D) M; N& w4 v, X 名目: OFFSET 变量或标号 + k! C' R7 v$ R# M
汇编轨范将回送变量或标号地址地址的偏移量给该指令。
8 d; ~! v. c2 @" ?1 }1 [" P (2)SEG * f6 H4 H! Y0 q- C4 L7 g
名目: SEG 变量或标号 : ] K* a, N: `+ q; X9 j
汇编轨范将回送变量或标号地址地址的段地址给该指令。
' W+ [) u0 G( f3 x3 n- `% q (3)TYPE名目: TYPE 变量或标号 : v$ S2 d. P# D0 B4 C) q: d
用来确定标号或变量的类型,并按照类型作为一个操作数回送给指令。汇编中划定,如不美观是变量,则按照DB、DW、DD、DQ和DT分袂用数值1、2、4、8和10回送给指令。如不美观是标号,按照标号的类型用-1和-2分袂代表NEAR和FAR。
2 o% z) ^" S% N8 y" s (4)LENGTH 9 H, `2 J- J! q# l
名目: LENGTH 变量名
7 b9 {; p0 }# V) u4 W) u5 }! ]5 ` 用往返送变量名下界说的数据项数目。值得注重的是它只对用DUP界说的数据起浸染,凡没使用DW的回送值均为1。
% g; B, T4 S/ W (5)SIZE 4 _) ]4 d. F9 V' J) G3 E" m- W
名目: SIZE 变量名
* t9 R( G( S- _+ I+ U" V 用往返送为该变量名分配的字节数。可见SIZE应是TYPE和LENGTH值的乘积。 2 W+ b5 t: l/ z' t# C5 o( d
5.指定属性操作符 % J/ S) c3 n5 ?- @, q' f6 J
指定属性操作符有PTR和THIS等6种。它们的功能是成立一些新的存储器地址操作数,即新的变量、标号或地址表达式。 - K9 C! F3 J: L; T1 H
(1)PTR ' ^# k4 B L% H5 X
名目:类型 PTR 表达式 2 n9 z4 {3 B. Y: C
声名:类型可所以BYTE、WORD、DWORD、NEAR、FAR等,表达式可所以某个变量、标号或地址表达式。 5 F# D& U F7 ?8 y% Q& ?3 j+ B
功能:成立一个新的存储器地址操作数,但不分配内存。新操作数与PTR右边的存储器地址作数有不异的段地址和偏移量,类型为PTR左边划定的类型。因些,现实上,PTR操作符可给变量、标号或地址表达式界说新的名字和类型。 ) x* V* @- ^/ c* e# g1 G
(2)THIS
& Z' t6 q3 }! ?7 Z 名目:THIS 类型
* v( b% i% E Z' a- ]1 ]: m. Q! t 功能:界说当前单元类型的操作符。
/ [2 o$ t& a8 F (3)SHORT
9 s. B/ ?: L+ d 名目:JMP SHORT DES , s) x7 `0 ?( y! b) ~- M4 V
功能:确定转移地址的属性,用在JMP指令中,划定转移规模在-128~+127个字节内。 1 a/ @6 U4 t) a
(4)HIGH和LOW
* \# f/ v: s h( `7 A 两个字节拔取操作符。在指令顶用在字操作数之前,指定取该字的高字节或低字节介入运算。
; O' _. S0 e+ v+ \; T. s, | (5)段属性
# r6 V$ ^( ^9 o" t# d# P9 U+ Z/ K- [ 操作“段寄放器:地址表达式”的形式改变操作数的地址表达式所属段的特征。 |