汇编指令符号大全
马到成功-垃圾站
80X86 汇编指令符号大全
+、-、*、∶算术运算符。
&∶宏处理操作符。宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一
个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。
$$∶地址计数
器的值——记录正在被汇编程序翻译的语句地址。每个段均分配一个计数器,段
内定义的所有标号和变量
的偏移地址就是当前汇编地址计数器的值。
?∶操作数。在数据定义语句中,操作数用?
,其作用是分配并保留存储空间,但不存入确定
的数据。
=∶等号伪指令——符号定义。对符号进行定义和赋值,功能与
EQU相似,但允许(重复)
再定义。
:∶修改属性运算符(操作符)——段操
作符。用来临时给变量、标号或地址表达式指定一
个段属性(不用缺省的段寄存器),自动生成一个“跨
段前缀字节”。注意,段寄存器CS和ES
不能被跨越,堆栈操作时也不能跨越SS。
;∶注释符号。
%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不
能是变量名和寄存器名)转
换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。
( )∶1.运算符——用来改变运算符的优先级别。2.教材符号,表示括号内存储单元(
或寄存
器)的内容。
<
>∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。
[ ]
∶1.运算符。方括号括起来的数是数组变量的下标或地址表达式。带方括号的地址表达式
必须遵循下列
原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP
可单独出现在各方
括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和
BP出现在同一个方括号内;
③SI和DI可以单独出现在各方括号内,也可以与常数、BP或
BX一起出现在方括号内,但不允许S
I和DI出现在同一个方括号内;④一个方括号内包含
多个寄存器时,它们只能作加法运算;⑤若方括号
内包含基址指针BP,则隐含使用堆栈段寄
存器SS提供段基址,否则均隐含使用数据段寄存器DS提供
段基址。2.教材符号,表示其
中的内容可省略。
.LIST∶
伪指令。用于打开列表文件输出。
.RADIX∶伪指令。把缺省的基数改为2-16范
围内的任意基数。.RADIX不影响DD、DQ、
DT伪指令,在这些伪指令中,输入的数值只要没有
加上数据类型就认为是十进制数。
.XLIST∶伪指令。用于关闭列表文件输出。
%OUT∶伪指令。在汇编时显示其后的信息。
AAA∶ 指令助记符——加法
运算后的ASCII调整(非压缩的BCD码)。无操作数,调整的
加法结果在AL中。AF和CF的状
态改变说明结果大于9。检查AL的低四位是否为合法的
BCD码(0-9),如果合法就清除AL的高
四位以及AF和CF标志。当AL的低四位表示的数
大于 9或AF=1时, 将AL加 6,AH加1
,并使AF和CF置位,清除AL中的高四位。
任何一个A—F之间的数加上6 以后,都会使AL低
4位产生0-9之间的数,从而达到调整
的目的。
AAD∶
指令助记符——除法的ASCII调整(非压缩的BCD码)。在执行除法操作前,必须
利用
AAD指令将非压缩型 BCD码表示的数转换成二进制数送AL。步骤是,先将被除数的
高位数(AH
中的内容)乘以10,然后加到AL的低位数中,接着将AH清零。
AAM∶ 指令助记
符——乘法的ASCII调整(非压缩的BCD码)。用于将字节乘法的积转换
成两个合法的十进制非压
缩码。AAM不带操作数,假定成绩在AH和AL中,并将调整后的
非压缩码送回AH和AL。为了保证
AAM得到正确的结果,原乘数和被乘数必须是合法的非
压缩码。指令执行时,AAM
用10(0AH) 除AL寄存器,并将除得的商和余数分别送AH
和AL寄存器,实现转换。
AAS∶ 指令助记符——减法运算后的ASCII调整(非压缩的BCD码)。检查AL的
低四位
是否为合法的BCD码(0-9),如果合法就清除AL的高四位以及AF和CF标志。当AL的
低四位表示的数大于 9或AF=1时, 将AL减 6,AH减1
,并使AF和CF置1,清除
AL中的高四位。
80X86 汇编指令符号大全
(下)
JLE∶ 指令助记符——(有符号数比较)小于或等于转移(等价于JNG)。当SF和OF
异号或ZF=1时
转移(段内直接短转移)。
JMP∶ 指令助记符——无条件
转移。无条件转移到指令所指示的目标地址,并从该地址开始执行。
目标地址可以从指令中直接得到,也
可以从指令中给定的寄存器或存储器中得到。
一、段内直接短转移 JMP SHORT
标号。标号是转移的目的地址,由它确定一个 8位位移量。
这个位移量被加到IP寄存器中。位移量是
一个带符号数,负数表示向前转移,正数表示向后转移。
转移范围是—128至+127。
二、段内直接近转移 JMP NEAR PTR 标号。 标号是转移的目的地址,由它确定一个16位位移量。这个位移量被加到IP寄存器中。位移量是一个带符号数,负数表示向前转移,正数表示向后
转移。转移范围是—32768至+32767。
三、段内间接转移 ①JMP AX
(段内寄存器间接转移);②JMP
[BX](段内存储器间接转移)。
将指令中给定的寄存器或存储单元中的内容送到IP中。
四、段间直接转移 JMP FAR PTR 标号。 标号为符号地址。
JNB∶ 无
符号数条件转移指令助记符——(无符号数比较)不低于转移(等价JAE)。CF=0,或
ZF=1 则转移(段内直接短转移)。
JNBE∶无符号数条件转移指令助记符—
—(无符号数比较)不低于且不等于转移(等价JA)。CF=
0, 且ZF=0
则转移(段内直接短转移)。
JNC∶
简单条件转移指令助记符——前次操作无进或进位位转移。CF=0 则转移(段内直接短转
移)。
JNE∶
简单条件转移指令助记符——不相等转移(同JNZ)。前次操作结果不等于0,ZF=0
则转
移(段内直接短转移)。
JNG∶ 指令助记符——(有符号数比较)不大
于转移(等价于JLE)。当SF和OF异号或ZF=1时
转移(段内直接短转移)。
<
br>JNGE∶指令助记符——(有符号数比较)不大于且不等于转移(等价于JL)。当SF和OF异号,且
ZF=0 时转移(段内直接短转移)。
JNL∶
指令助记符——(有符号数比较)不小于时转移(等价于JGE)。 当SF和OF同号,或ZF
=1,
则转移(段内直接短转移)。
JNLE∶指令助记符——(有符号数比较)不小于且不等
于转移(等价JG)。SF和OF同号,且ZF
=0 时转移。
JNO∶简单条件转移指令助记符——前次操作无溢出转移。OF=0 则转移(段内直接短转移)。
JNP∶ 简单条件转移指令助记符——奇校验转移。PF=0
则转移(段内直接短转移)。
JNS∶
简单条件转移指令助记符——前次操作结果为正数转移。SF=0 则转移(段内直接短转移)。
JNZ∶ 简单条件转移指令助记符——不相等转移(同JNE)。ZF=0
则转移(段内直接短转移)。
JO∶
简单条件转移指令助记符——前次操作溢出转移。OF=1 则转移(段内直接短转移)。
JP∶ 简单条件转移指令助记符——偶校验转移。前次操作结果中1的个数是偶数,PF=1
则转移(段
内直接短转移)。
JPE∶
简单条件转移指令助记符——偶校验转移。前次操作结果中1的个数是偶数,PF=1
则转移
(段内直接短转移)。
JPO∶
简单条件转移指令助记符—奇校验转移。PF=0 则转移(段内直接短转移)。
JS∶
简单条件转移指令助记符——前次操作结果为负数转移。SF=1 则转移(段内直接短转移)。
JZ∶ 简单条件转移指令助记符——相等转移(同JE)。ZF=1 则转移(段内直接短转移)。
LABLE∶
定义符号名伪指令——为当前存储单元定义一个指定类型的变量或标号。
一、LABLE
与变量连用。
例 TIMB LABLE BYTE
TIMW DW
4142H 第一句给第二句定义的字变量TIMW取一个新名字TIMB,并且修
改类型属性为字节
。以后如果以字类型访问该变量时,应使用变量名TIMW,以字节类型访问该变量
时,应使用变量名T
IMB。
二、LABLE 与标号连用。
例 POINTF LABLE FAR
POINTN:MOV AX,[BX+SI]
第一句给第二句隐含定义
的近标号POINTN取一个新名字POINTF,并将类型属性修改为FAR
。这样就允许作为
其他代码段中转移或调用指令的目标标号(这时标号是POINTF)。
LAHF∶指令助记符——标志寄存器(PSW)低8位内容送AH中。
LDS∶ 指令助记符——取地址指针到数据段寄存器。要求源操作数是一个双字长存储器操作数,目<
br>的操作数是16位通用寄存器、指针或变址寄存器,但不能是段寄存器。指令执行时,双字长存储器
操作数中的低地址传送到指定的寄存器中,高地址传送到DS寄存器中。
例:LDS
SI,DATA_SEG[DI] 由DATA_SEG[DI]可以得到在数据段的有效地址EA(即段内偏移量)。在EA和EA+2中存放着目标指针。EA存放的是目标指针的段内偏移量,送至SI;EA+<
br>2存放的是目标指针的段地址,送至DS。
例:变量名一 DD 变量名二
......
LDS SI 变量名一
变量名二所在数据段的EA和段地
址存放在变量名一中,EA送至SI,EA+2存放的段地址
送至DS。
LE∶
关系运算符——小于等于。若满足条件,输出结果为全 1(所有的位),否则为全0 。
LEA∶指令助记符——取有效地址。将存储器操作数的偏移地址传送到通用寄存器、指针或变址寄存
器中。该指令常用来建立串操作指令所需要的寄存器指针。
例一 LEA
SI,变量名(与MOV SI OFFSET 变量名 等效);
例二 LEA
AX,[AX] (将SI所指存储单元的EA送至AX,而MOV
AX,[SI]送的是该存储单元
存放的内容)
LENGTH∶数值返回运算符
。其加在一个变量名前面,返回的数值是数组变量的元素个数。如果变量
是用DUP
说明的,则返回DUP前面的数值;如果没有DUP 说明的,则返回的值总是1。
LES∶ 指令助记符——取地址指针到数据段寄存器。要求源操作数是一个双字长存储器操作数,目<
br>的操作数是16位通用寄存器、指针或变址寄存器,但不能是段寄存器。指令执行时,双字长存储器
操作数中的低地址传送到指定的寄存器中,高地址传送到ES寄存器中。
LDCK∶
指令助记符——封锁总线。加在任何指令前面的单字节前缀指令,配合用来维持总线的锁
存信号,直到与
其配合的指令执行完为止。
LOCAL∶
宏指令——局部符号(变量,标号)定义。在宏扩展时,汇编程序给LOCAL
后的形式参
数指定特殊的符号,然后用这些符号替换宏指令体中LOCAL
指出的形式参数。这样可避免这些符号
在多次调用宏时发生重复定义。
LODS∶指令助记符——装入串。一般用LODSB或LODSW。
LODSB∶ 指令助记符——字节装入(从字节串中取数)。它将DS段SI指出的字节数据送入AL
寄
存器中,并根据方向标志DF修改SI中的地址。即当DF=0时,地址加1 ;DF= 1
时,地址减1 。
LODSW∶ 指令助记符——字装入(从字串中取数)。
它将DS段SI指出的字数据送入AX寄存器
中,并根据方向标志DF修改SI中的地址。即当DF=0
时,地址加2 ;DF= 1 时,地址减2 。
LOOP∶指令助记符——循环控制。每执行一次,CX的内容减1 ,若减1 后不为0
,则转移到目
标地址;否则,执行LOOP之后的指令。
LOOPE∶
指令助记符——循环控制(等于LOOPZ)。每执行一次,CX的内容减1, 若减1 后不
为0
,且ZF=1, 则转移到目标地址;否则,执行LOOPE 之后的内容。
LOOPZ∶指令助记符——循环控制(等于LOOPE)。每执行一次,CX的内容减1 ,若减1
后不为
0 ,且ZF=1, 则转移到目标地址;否则,执行LOOPZ 之后的内容。
LOOPNE∶指令助记符——循环控制(等于LOOPNZ)。每执行一次,CX的内容减1
,若减1 后
不为0 ,且ZF=0, 则转移到目标地址;否则,执行LOOPNE之后的内容。
LOOPNZ∶指令助记符——循环控制(等于LOOPNE)。每执行一次,CX的内容减1
,若减1 后
不为0 ,且ZF=0, 则转移到目标地址;否则,执行LOOPNZ之后的内容。
LOW∶
字节分解运算符(操作符)。用来从运算对象(一个数或地址表达式)中分离出(取)低字节。
LT∶ 关系运算符——小于。若满足条件,输出结果为全1 (所有的位),否则为全0 。
MACRO∶ 宏指令——宏定义。
MASK∶运算符。使得记录中指定字段各位均为1 ,其他各位均为0 。
M
EMORY∶伪指令——段定义(组合类型)。该段在存储器中应该定位在所有其他段的最高地址。如
果
不止一个段选用MEMORY方式,则把第一个遇到的段作MEMORY处理,而其他段均作COMMON
方式处理。
MOD∶ 算术运算符——模除(取整除后的余数)。
MOV∶ 指令助记符——通用数据传送。注意,①两个段寄存器之间不能直接传送数据;②两个储存<
br>单元之间不能直接传送数据(可以用MOVS);两个操作数中必须有一个是寄存器或立即数;③立即数<
br>和段寄存器CS不能作为目的操作数。
MOVS∶指令助记符——
串传送。与MOVSB和MOVSW相似,但必须说明数据串类型(字或字节)。
MOVSB∶ 指令助记符——串(字节)传送。把由SI指向的数据段中的一个字节数据传送到由DI
指向的附加段内一个字节存储单元中去,并同时根据方向标志对SI和DI中的地址进行修改。当DF<
br>=0时, 地址都加1 ;当DF=1时 ,地址都减1 。
MOVSW∶ 指令
助记符——串(字)传送。把由SI指向的数据段中的一个字数据传送到由DI指向
的附加段内一个字存
储单元中去,并同时根据方向标志对SI和DI中的地址进行修改。当DF=0时,
地址都加2
;当DF=1时,地址都减2 。
MUL∶ 指令助记符——无符号数乘法。
字节乘法:(AL)*(源操作数)->AX
字乘法: (AX)*(源操作数)->DX和AX
若结果的高半部分(AH或DX,对应字节和字)为非0
值,则CF和OF置1;否则CF和OF
清0。
NAME∶伪指令——模块定义。程序将对给定的程序模块取模块名。格式是,NAME 模块名。
汇编
处理时,一个模块就是一个独立的汇编单位。汇编处理只进行到模块结束语句END
为止。如果该模
块是主模块,END 语句可以指出一个标号,它表示该程序的启动地址。
NE∶关系运算符——不等。若满足条件,输出结果为全1 (所有的位),否则为全0 。
NEG∶ 指令助记符——求补。将目的操作数的每一位求反(包括符号位)后加1.若在字
节操作时对
—128,或在字操作时对—32768取补,则操作数不变,但溢出标志OF置位。操作数
可以是寄存器
或存储器单元,但不能是段寄存器或立即数。结果送回目的操作数。执行结果不但影响标志
位AF、
CF、OF、PF、SF和ZF,而且一般总是置CF=1 (除非操作数为0)。
NONE∶伪指令——段定义(组合类型)。本段与其它段逻辑上不发生关系,每段都有自己的基地址。
这是隐含的组合类型。
NOP∶ 指令助记符——空操作。用于程序调试。
NOT∶ 逻辑运算符(在语句的操作数部分)或逻辑操作指令助记符(在语句的操作码部分
)——按
位非(求反)。将目的地址中的内容逐位取反后再送入目的地址中。
OF∶Overflow Flag,
溢出标志,在标志寄存器的第11字节。在运算过程中,如操作数超出了机器
能表示的范围,此时OF
置1。作加法时,OF位是根据操作数的符号及其结果情况来设置的,若两
个操作数的符号相同,而结果
的符号与之相反时,OF置1,否则置0。
OFFSET∶数值返回运算符。其加在一个
变量名或标号前面,返回的数值是该变量名或标号所在的段
的偏移地址。
OPD∶ 教材符号--目的操作数。
OPR∶ 教材符号--源操作数。
OR∶ 逻辑运算符(在语句的操作数部分)或逻辑操作指令助记符(在语句
的操作码部分)——按位
或。进行“或”运算的两位中任一位是 1,则结果为1 。
ORG∶ 伪指令——定位(置汇编地址计数器)。在每段源程序或数据块的开始,指明此语句后面的<
br>程序或数据块的起始地址,其余指令或数据就连续存放在以后的地址单元中。
例一 ORG
$$+10 表示跳过10个字节。
例二 ORG 数值表达式(值为0-65535)
表示$$改为数值表达式的值。
OUT∶
指令助记符——输出。把AX或AL中的内容传送到一个输出端口。寻址方式与IN相同。
PA∶教材符号--某一存储单元的物理地址。 对于指令,PA=(CS)左移4位+(IP);
对于堆栈段数据,PA=(SS)左移4位+(SP);或PA=(SS)左移4位+(BP);
对于数据段和附加数据段数据,PA=(DS或ES)+该变量的偏移地址。
PARA∶伪指令——段定义(定位类型方式)。规定在定位时每个段的起始地址总是16的整倍数,最
后四位二进制数一定是0
。这种定位方式最简单,但段间往往有空隙(最多为15个字节)。缺省定
位方式是按PARA定位。
PAGE∶①伪指令——段定义(定位类型方式)。要求段起始地址是
256的整倍数,即段的边界必须
是页的边界。段地址的最低两位(16进制数)必须是0
。②伪指令——格式控制。指定汇编程序所
产生的列表文件每页多少行(10—255),
每行多少字符(60-132)。或指定输出新的一页(用+
号)。
PF∶Parity Flag,奇偶标志,在标志寄存器的第2字节,当运算结果(指低8位)中1的
个数为偶
数时置1,否则置0。该标志主要用来检测数据在传输过程中的错误。
POP∶指令助记符——出栈。将栈顶元素弹出送至某一寄存器,段寄存器(CS除外)或存储器中。
首
先将SP指的内容送至低8位,SP加1;再将SP指的内容送入高8位,SP再加1。
POPF∶指令助记符——将堆栈顶端的字数据送入标志寄存器。对于TF和OF置位可先将数值置于
A
X中,压入堆栈,再用POPF送入标志寄存器。此方式对TF和OF标志位是唯一可行的置位方法。
PROC∶伪指令——过程(子程序)定义(起始)。定义一个子程序,并说明它是NEAR或FAR
过程。
定义的过程如果由 DOS直接装入并启动执行,则该过程必须定义为 FAR过程。
PSW∶Program Status Word,程序状态字寄存器,由条件码标志(O
F、SF、ZF、AF、PF、CF)
和控制标志(DF、IF、TF)构成。
11 10 9 8 7
6 4 2 0
─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│OF│DF│IF│TF│SF│ZF│ │AF│ │PF│ │CF│
─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
PTR∶
修改属性运算符。用来明确指出变量、标号或地址表达式的类型属性(
只在所在的指令内有
效)。类型放在PTR 之前,可以是BYTE、WORD、
DWORD、NEAR、FAR。
PUBLIC∶①伪指令——段定义(组合类型)。该
段与其它模块中说明为PUBLIC类型的同名同'类别'
段组合起来,形成一个物理段(小于等于64
K),公用一个段基址,②伪指令——定义全局符号。表
示该模块中定义的哪些符号常量、变量、标号以
及过程名(几个模块公用的过程一般都是FAR 过程)
等可以被其他模块所引用。
PURGE∶ 宏指令——取消宏定义。
PUSH∶指令助记符——进栈。把寄
存器,段寄存器中的一个字数据压入堆栈。高8位先进,SP减1;
低8位后进,SP再减1。
PUSHF∶ 指令助记符——把标志寄存器的内容压入堆栈。在子程序调用和中断服务中可
用来保护标
志位(恢复用POPF)。
RCL∶
指令助记符——带进位循环左移。
格式为:RCL 目的操作数,1
或RCL 目的操作数,CL (其中CL中存放的是移动次数)
┌─┐
┌───────────────┐
┌│CF│← │ ←───────────── │←┐
│└─┘ └───────────────┘ │
└───────────────────────┘
RCR∶
指令助记符——带进位循环右移。
┌───────────────┐ ┌─┐
┌→│ ─────────────→ │→│CF│─┐
│
└───────────────┘ └─┘ │
└───────────────────────┘
RECORD∶伪指令——设计一个单字节或双字节的记录格式。指令格式为,
记录名
RECORD 字段名1:=表达式,字段名2:=表达式 ……
记录定义后,必须利用初始化记录的方法来定义存储器变量,格式为,
变量名 记录名
<表达式,表达式,……>
或变量名 记录名 数量DUP(<表达式,……>)
REP∶ 指令助记符——重复前缀。它可以使串指令反复执行(CX不等于0
就执行),每执行一次,
CX的内容减1 。
REPE∶指令助记符——重复前缀。当两串相等,即ZF=1时
,它可以使串指令反复执行(CX不等
于0 就执行),每执行一次,CX的内容减1
。(与REPZ完全一样)
REPNE∶
指令助记符——重复前缀。当两串不相等,即ZF=0时, 它可以使串指令反复执行(CX
不等于0
就执行),每执行一次,CX的内容减1 。(与REPNZ完全一样)
REPNZ∶ 指令助记符——重复前缀。当两串不相等,即ZF=0时,
它可以使串指令反复执行(CX
不等于0 就执行),每执行一次,CX的内容减1
。(与REPNE完全一样)
REPT∶宏指令——重复块(以ENDM结束)。
格式为: REPT 重复次数
重复块
ENDM
这种宏指令用于确定重复次数。
REPZ∶指令助记符——重复前缀。当两串相等,即ZF=1时,
它可以使串指令反复执行(CX不等
于0 就执行),每执行一次,CX的内容减1
。(与REPE完全一样)
RET∶ 指令助记符——返回。
一、段内返回。先将栈顶的字送入IP,然后SP增2
。若带立即数,SP再加立即数(丢弃一些
在执行CALL之前入栈的参数)。
二、段间返回。栈顶的字送入IP后(SP增 2),再将栈顶的字送入CS,SP再增2
。若带立
即数,则SP再加立即数。
ROL∶ 指令助记符——循环左移。
格式为:ROL 目的操作数,1
或ROL 目的操作数,CL
(其中CL中存放的是移动次数)
┌─┐ ┌───────────────┐
│CF│←┬│ ←───────────── │←┐
└─┘
│└───────────────┘ │
└──────────────────┘
ROR∶ 指令助记符——循环右移。
┌───────────────┐
┌─┐
┌→│ ─────────────→ │┬→│CF│
│
└───────────────┘│ └─┘
└──────────────────┘
SAHF∶指令助记符——将AH
寄存器的内容送入标志寄存器(PSW)的低字节中,标志寄存器高八
位保持不变。
SAL∶ 指令助记符——带符号数的算术左移。经常用来乘以2。
格式为: SAL
目的操作数,1
当移位次数大于 1时,则移位次数应预先置于CL寄存器中。
格式为: SAL 目的操作数,CL
┌─┐ ┌───────────────┐
│CF│←│ ←───────────── │← 0
└─┘
└───────────────┘
如果符号位发生变化时,就将
1送到OF标志,表示移位前操作数的最高位与移位后的最高位
不同。
SAR∶ 指令助记符——带符号数的算术右移。符号位保持不变。经常用来除以2。当移位次数大于
1
时,则移位次数应预先置于CL寄存器中。
┌───────────────┐
┌─┐
┌→│ ─────────────→ │→│CF│
│
└───────────────┘ └─┘
└──┘
SBB∶ 指令助记
符——带借位减法(减去CF的值)。用于多字节减法运算。两高位字相减,并减去
低位的借位CF。
SCAS∶指令助记符——串搜索(扫描)。通常用SCASB或SCASW。
SCASB∶ 指令助记符——字节串扫描(搜索)。用AL寄存器中的内容与由ES段DI指定的一个
字
节数据进行比较(减),若相等(结果为0) ,ZF=1
。并依方向标志DF的值修改DI中的地址,
即DF=0 ,地址加1 ;DF=1 ,地址减 1。
SCASW∶ 指令助记符——字串扫描(搜索)。 用AX寄存器中的内容与由ES段DI
指定的一个字
数据进行比较(减),若相等(结果为0) ,ZF=1
。并依方向标志DF的值修改DI中的地址,即
DF=0 ,地址加2 ;DF=1 ,地址减 2。
SEG∶ 数值返回运算符。其加在一个变量名或标号前面,返回的数值是该变量名或标号所
在的段基
址(段寄存器的内容)。
SEGMENT∶ 段定义伪指令 。格式为
段名 SEGMENT
[定位方式][组合方式]['类别']。在定义段
的时候,还可以在SEGMENT 语句中给出该段
的类别,类别名是一个用单括号括起来的字符串。进
行连接处理时,LINK程序把类别名相同的所有段
放在连续的存储区域内。同类的各个段在连接时,
先出现的在前,后出现的在后。
SF∶Sign Flag,
符号标志,在标志寄存器的第7字节.记录运算结果的符号,结果为负时置1。
SHL∶
一、算术运算符——左移(移1位相当于乘以2)。
二、指令助记符——无符号数的逻辑左移。经常用来乘以2。 当移位次数大于1
时,则移位次
数应预先置于CL寄存器中,写成“SHL OPD CL”。
┌─┐
┌───────────────┐
│CF│←| ←───────────── │← 0
└─┘ └───────────────┘
SHORT∶
属性运算符(操作符)。用来指定JMP
指令中转向地址的属性,指出转向(目标)地址与
本指令地址的字节距离在-128到+127之间。
SHR∶
一、算术运算符——右移(移1位相当于除以2)。
二、指令助记符——无符号数的逻辑右移。经常用来除以2。 当移位次数大于
1时,则移位次
数应预先置于CL寄存器中,写成“SHR …,CL”。
┌───────────────┐ ┌─┐
0→ │ ─────────────→
│→│CF│
└───────────────┘ └─┘
SI∶Source Index,源变址寄存器。与DS联用,用来确定数据段中某一存储单元的偏移
地址。在
串处理指令中,SI指出源操作数的地址,隐含段为当前的数据段。
S
IZE∶数值返回运算符。其加在一个变量前面,返回的是数组变量所占的总字节数(LENGTH和
T
YPE返回值的乘积)。
test属于逻辑运算指令
功能:
执行BIT与BIT之间的逻辑运算
测试(两操作数作与运算,仅修改标志位,不回送结果). <
br>Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会
保存。EST AX,BX 与 AND AX,BX 命令有相同效果
语法: TEST
rm,rmdata
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0)
运用举例:
用来测试一个位,例如寄存器:
test eax, 100b;
b后缀意为二进制
jnz ******; 如果eax右数第三个位为1,jnz将会跳转
我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果
为1.
的一个非常普遍的用法是用来测试一方寄存器是否为空:
test ecx,
ecx
jz somewhere
如果ecx为零,设置ZF零标志为1,Jz跳转
p>
*****************************************
*********************
*****************
CMP属于算术运算指令
功能: 比较两个值(寄存器,内存,直接数值)
语法: CMP rm,rmdata
标志位: C,P,A,Z,O
CMP比较.(两操作数作减法,仅修改标志位,不回送结果).
cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志).
零标志很像carry,也是内部标志寄存器的一位.
例如:
Cmp eax,
2; 如果eax-2=0即eax=2就设置零标志为1
Jz ****;
如果设置了零标志就跳转
我得出的结论
test逻辑与运算结果为零,就把ZF(零标志)置1;
cmp
算术减法运算结果为零,就把ZF(零标志)置1.