80X86 汇编指令符号大全

合集下载

80x86指令集

80x86指令集
AX AL AH BX CX CL DX SP BP SI DI CS SS DS、ES FS、GS MOV PUSH POP XCHG XLAT IN OUT LEA LDS、LES LAHF SAHF PUSHF POPF NOT AND OR XOR TEST
通用寄存器 16 位累加器 AX 的低 8 位 AX 的高 8 位 基址寄存器 16 位计数器 8 位计数器 16 位数据寄存器 堆栈指针 基址指针 源变址寄存器 目的变址寄存器 段寄存器 指定代码段 指定堆栈段 均可指定当前数据段 数据传送指令 数据传送指令 入栈指令 出栈指令 交换指令 换码指令 输入指令 输出指令 有效地址传送指令 地址指针传送指令
逻辑运算指令 非运算 与运算 或运算 异或运算 测试指令 移位运算指令 SAL/SHL 算术左移/逻辑左移 SAR/SHR 算术右移/逻辑右移 ROL/ROR 左循环移位/右循环移位 RCL/RCR 带进位的 左/右 循环移位 程序控制指令 JMP 无条件转移指令 CALL 无条件调用指令 RET 无条件返回指令 JC CF=1 (有进位 / 借位)时转移 JNC CF=0 (无进位 / 借位)时转移 JE / JZ ZF=1 (等于零/ 相等)时转移 JNE / JNZ ZF=0 (不等于零 /不相等)时转移 JS SF=1 符号位为1(负数)时转移 JNS SF=0 符号位为0(正数)时转移 JO OF=1 有溢出时转移 JNO OF=0 无溢出时转移 JP / JPE PF=1 奇偶位为1 / 偶时转移 JNP / JPO PF=0 奇偶位为0 / 奇时转移 以下四种用于无符号数的条件转移 JA / JNBE 高于 / 不等于且 CF=0且ZF=0 不低于时转移 JAE / JNB 高于等于 / 不低于 CF=0或ZF=1 时转移 JB / JNAE 低于 / 不高于且不等于 CF=1且ZF=0 时转移 JBE / JNA 低于等于 / 不高于 CF=1或ZF=1 时转移 以下四种用于有符号数的条件转移 (SF)XOR(OF)=0且 JG / JNLE ZF=0 (SF)XOR(OF)=0或 JGE / JNL ZF=1 (SF)XOR(OF)=1且 JL / JNGE ZF=0 (SF)XOR(OF)=1或 JLE / JNG ZF=0 LOOP 循环指令 LOOPZ(或LOOPE)ZF=1循环至目标操作数 LOOPZ(或LOOPE)ZF=0循环至目标操作数 JCXZ 若CX=0则此指令控制转移列目标操作数 启动由类型码n所规定的中断 INT n 服务程序 INTO 溢出中断 IRET 中断返回

第二章80X86指令系统1.

第二章80X86指令系统1.
表格的首地址可设置为位移量,修改 基址或变址寄存器的内容取得表格中的值。
例 MOV AX, COUNT[SI](也可表示为 MOV AX, [COUNT+SI]) 其中COUNT为16位位移量的符号地址。 如果 (DS)= 3000H,(SI)= 2000H,COUNT = 3000H 则物理地址 = 30000H + 2000H + 3000H = 35000H 指令执行情况如图所示,最后的执行结果是(AX) = 1234H。
则物理地址 = 30000H + 2000H + 1000H + 0250H = 33250H 指令执行情况如图所示,最后的执行结果是( AX) = 1234H。
8086的指令系统
汇编语言的指令系统是程序设计的 基础,这里主要介绍8086的指令系统。 8086指令系统分为以下6组: ⒈ 数据传送指令 ⒉ 算术指令 ⒊ 逻辑指令 ⒋ 串处理指令 ⒌ 控制转移指令 ⒍ 处理机控制指令
例 MOV AX, [BX][DI] (或写为 MOV AX, [BX+DI])如 (DS ) = 2100H,(BX)= 0158H,(DI)= 10A5H 则 EA = 0158H +10A5H = 11FDH
物理地址 = 21000H +11FDH = 221FDH 指令执行情况如图所示,最后的执行结果是 (AX)= 1234H。
2 存器寻址方式(Register addressing) 它使用寄存器来存放要处理的操作数, 寄存器号由指令指定。 对于16位操作数,寄存器可以是AX、 BX、CX、DX、SI、DI、SP、BP、CS、 DS、ES和SS;对于8位操作数,寄存器可 以是AL、AH、BL、BH、CL、CH、DL、 DH。由于操作数就在寄存器中,指令执行 时不需要访问存储器,因此这是一种快速 的寻址方式。

汇编80X86伪指令系统

汇编80X86伪指令系统

80X86伪指令系统一.伪指令概述构成汇编语言程序的语句可以分为三种:指令性语句(指令语句)、指示性语句(伪指令语句)和指令语句(宏调用语句)。

指令语句,又称可执行语句,表示计算机具有的一个基本能力。

比如数据传送,数据相加、相减等。

伪指令语句,又称命令语句,告诉汇编程序如何对程序进行汇编。

比如段定义、储存单元分配等。

一个汇编语言程序经汇编,连接和装入内存后,在执行程序之前:1.指示性语句的功能已经完成,故又称伪操作。

2.指令性语句的功能尚未完成,需控制CPU去执行,才能完成。

二、伪指令详解符号定义语句1.等值语句格式:符号名EQU 需等值的表达式功能:用符号名等值指定的表达式;其中表达式可以是任何有效的操作数,汇编时用语句中的表达式代替程序中符号所在的地方。

说明:▲可用于定义符号常量,方便修改程序。

▲某表达式多次出现时,用等值伪操作可以方便编程。

▲等值语句表达式的种类(1)常数或数值表达式COUNT EQU 10NUM EQU 89*3+5-9(2)地址表达式ADD1 EQU V AR2+10H(3)变量或标号CON EQU V AR▲在EQU语句右边出现的标号需在EQU语句以前进行定义。

2.等号语句格式:符号=需等值的表达式功能:把等号“=”右边表达式的值或符号赋给等号“=”左边的符号。

表达式可以是任何有效的操作数。

说明:EQU语句与“=”的区别:在同一源程序中,EQU语句定义的符号不能被重新赋值或者说不能被重新定义,同一符号只能定义一次,符号的数值不能被改变。

“=”定义的符号可以被重新赋值,同一符号的数值在同一个程序中可以改变。

数据定义语句格式:变量名类型助记符操作数[ ,操作数, ……]功能:用于在内存中为常数、初始数据或者变量分配储存单元。

说明:(1)变量名指示内存操作数所占用的内存单元地址(符号地址),在程序中,可以通过变量,名对内存单元进行访问。

变量名为用户自定义标识符,表示初值表首元素的逻辑地址。

80x86指令格式

80x86指令格式
(3) 存储器操作数缺省数据类型,在16位指令模式时为字类型,在32位指令模式时为双字类型,在使用中如要改变字类型,应使用PTR伪指令来定义,即
字节类型 BYTE PTR [Reg]
字类型 WORD PTR [Reg]
双字类型 DWORD PTR [Reg]
(4) 段寄存器操作数(Seg)——为16位段寄存器,包括CS,DS,ES,SS,FS,GS。
3.2 80x86指令格式
3.2.180x86指令编码格式
指令编码格式是指指令的机器码表示格式,其最多可以由以下5部分组合构成:
一、前缀
指令前缀为地址长度前缀和操作数长度前缀。为了实现80x86系列的兼容性,在实方式和保护方式下均可执行16位或32位指令,在汇编程序汇编时,为某些指令附加指令前缀,可以将指令操作数或地址长度,由16位转移到32位,或由32位转移到16位。
(5) 立即数(imm)——只允许作为源操作数,其数据类型由目的操作数来限定。
(6) 注释——由分号(;)开始,用来对指令功能加以说明,使程序便于阅读,汇编程序对它不进行处理。
对于指令的分析,须注意以下4点:
·指令的功Leabharlann ; ·适用于指令的寻址方式;(Missed Code)
(2) 存储器操作数(Mem)——间接寻址时16位寻址寄存器包括BX,BP,SI,DI;32位寻址寄存器包括EAX,EBX,ECX,EDX,ESI,EDI,EBP。其中BX,SI,DI,EAX,EBX,ECX,EDX,ESI,EDI对应的缺省段寄存器为DS;BP,EBP对应的缺省段寄存器为SS。
例如 MOV Dest, Src
为数据传送指令,Src表示源操作数,Dest表示目的操作数,数据流动的方向是由Src源操作数传送到Dest目的操作数,操作数可以是寄存器或存储器操作数,有关操作数说明如下。

80X86汇编语言指令集

80X86汇编语言指令集

80X86汇编语⾔指令集8086/8088汇编语⾔指令集数据传送指令集MOV功能: 把源操作数送给⽬的操作数语法: MOV ⽬的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压⼊或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址⾄寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加⼀或减⼀语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取⼆进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: ⾮压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执⾏BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定⽅向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: ⽐较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执⾏语法: JMP 地址JXX功能: 当特定条件成⽴则跳往指定地址执⾏语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成⽴B: BELOW,当C=1时成⽴C: CARRY,当弁时成⽴ CXZ: CX寄存器的值为0(ZERO)时成⽴E: EQUAL,当Z=1时成⽴G: GREATER(⼤于),当Z=0且S=0时成⽴L: LESS(⼩于),当S不为零时成⽴N: NOT(相反条件),需和其它符号配合使⽤O: OVERFLOW,O=1时成⽴P: PARITY,P=1时成⽴PE: PARITY EVEN,P=1时成⽴PO: PARITY ODD,P=0时成⽴S: SIGN,S=1时成⽴Z: ZERO,Z=1时成⽴LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址 LOOPNE(Z) 地址标志位: ⽆CALL,RET功能: ⼦程序调⽤,返回指令语法: CALL 地址 RET RET n标志位: ⽆INT,IRET功能: 中断调⽤及返回指令语法: INT n IRET标志位: 在执⾏INT时,CPU会⾃动将标志寄存器的值⼊栈,在执⾏IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: ⽆CMPSB,CMPSW,CMPSD功能: 字符串⽐较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载⼊或存贮指令语法: LODSB LODSW STOSB STOSW标志位: ⽆REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S⽽定EMC 汇编语⾔指令集符号解说:1.符号‘R’:代表⼀般⽤途寄存器中的其中⼀个。

80x86的指令系统

80x86的指令系统

80x86的指令系统1.1.1数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。

1.通用数据传送指令(1).MOV——传送指令指令格式:MOV DST,SRC ;(DST)←(SRC)。

DST表示目的操作数, SRC表示源操作数说明:①.DST为除CS外的各寄存器寻址方式或任意存储器寻址方式。

SRC为任意数据寻址方式。

②.DST、SRC不能同时为存储器寻址方式,也不能同时为段寄存器寻址方式,而且在DST为段寄存器时,SRC不能为立即数。

③.MOV指令不影响标志位。

(2).MOVSX——带符号扩展传送指令(386及其后继机型可用)指令格式:MOVSX DST,SRC ;(DST)←符号扩展(SRC)说明:①.DST必须为16位或32位寄存器。

SRC为8位或16位的寄存器或存储单元的内容。

传送时把源操作数符号扩展送入目的寄存器。

②.MOVSX指令不影响标志位。

(3).MOVZX——带零扩展传送指令(386及其后继机型可用)指令格式:MOVZX DST,SRC ;(DST)←零扩展(SRC)说明:①.DST必须为16位或32位寄存器。

SRC为8位或16位的寄存器或存储单元的内容。

传送时把源操作数零扩展送入目的寄存器。

②.MOVZX指令不影响标志位。

(4).PUSH——进栈指令指令格式:PUSH SRC ;16位指令:(SP)←(SP) –2 ((SP)+1,(SP))←(SRC)32位指令:(ESP)←(ESP) –4 ((ESP)+3, (ESP)+2, (ESP)+1,(ESP))←(SRC)说明:①.堆栈:计算机开辟的以“后进先出”方式工作的存储区。

它必须存在于堆栈段中,只有一个出入口,所以只有一个堆栈指针SP或ESP。

SP或ESP的内容在任何时候都指向当前的栈顶。

②.8086中的SRC不能为立即数寻址方式。

286及其后继机型可用立即数寻址方式。

③.PUSH指令不影响标志位。

(5).POP——出栈指令指令格式:POP DST ;16位指令:(DST)←((SP)+1,(SP)) (SP)←(SP)+232位指令:(DST)←((ESP)+3, (ESP)+2, (ESP)+1, (ESP)) (ESP)←(ESP)+4说明:①.DST为除立即数及CS寄存器以外的任意数据寻址方式。

汇编符号大全.

汇编符号大全.

80X86 汇编指令符号大全 +、-、*、/∶算术运算符。

&∶宏处理操作符。

宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。

$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。

每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。

?∶操作数。

在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。

=∶等号伪指令——符号定义。

对符号进行定义和赋值,功能与 EQU相似,但允许(重复)再定义。

:∶修改属性运算符(操作符)——段操作符。

用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。

注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。

;∶注释符号。

%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。

( ∶1.运算符——用来改变运算符的优先级别。

2.教材符号,表示括号内存储单元(或寄存器)的内容。

< >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。

[ ]∶1.运算符。

方括号括起来的数是数组变量的下标或地址表达式。

带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP 或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS 提供段基址。

80X86汇编指令集

80X86汇编指令集

1.数据传输指令它们在存储器和寄存器、寄存器和输人输出端口之间传送数据,1)通用数据传送指令MOV; 传送字或字节。

MOVSX: 先符号扩展,,再传送。

MOVZX: 先零扩展,再传送。

PUSH: 把字压入堆栈。

POP: 把字弹出堆栈。

PUSHA: 把AX、CX、DX、BX、SP、BP、SI、DI依次压人堆栈。

POPA: 把DI、SI、BP、SP、BX、DX、CX、AX依次弹出堆栈。

PUSHAD: 把EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI 依次压入堆栈。

POPAD: 把EDI、ESI、EBP、ESP、EBX、EDX、ECX、EAX 依次弹出堆栈。

BSWAP: 交换32 位寄存器里字节的顺序。

XCHG: 交换字或字节(至少有一个操作数为寄存器,段寄存器不可作为操作数)。

CMPXCHG; 比较并交换操作数(第个操作数必须为累加器AL/AX/EAX)。

XADD: 先交换再累加(结果在第一个操作数里)。

XLAT: 字节查表转换。

BX指向一张256字节的表的起点,AL为表的索引值(0-255,即0-FFH)返回AL 为查表结果([BX+AL]-->AL).2) 输入输出端口传送指令IN:I/O端口输入(语法:IN 累加器,{端口号 | IDX})OUT: I/O端口输出(语法: OUT {端口号 | DX},累加器)。

输入输出端口由立即方式指定时,其范围是0-255,由寄存器DX指定时,其范围0~ 65535.3) 目的地址传送指令LEA: 装入有效地址。

例如:LEA DX,string ;把偏移地址存到DXLDS; 传送目标指针,把指针内容装人DS例如:LDS SI,string ;把“段地址:偏移地址”存到DS:SILES: 传送目标指针,把指针内容装人ES,例如:LRS DI,string;把“段地址偏移地址”存到ES:DILFS: 传送目标指针,把指针内容装人FS.例如:LES DI,string ;把“段地址:偏移地址”存到ES:DILGS: 传送目标指针,把指针内容装入GS。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

80X86 汇编指令符号大全+、-、*、/∶算术运算符。

&∶宏处理操作符。

宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。

$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。

每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。

?∶操作数。

在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。

=∶等号伪指令——符号定义。

对符号进行定义和赋值,功能与 EQU相似,但允许(重复)再定义。

:∶修改属性运算符(操作符)——段操作符。

用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。

注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。

;∶注释符号。

%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。

( )∶1.运算符——用来改变运算符的优先级别。

2.教材符号,表示括号内存储单元(或寄存器)的内容。

< >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。

[ ]∶1.运算符。

方括号括起来的数是数组变量的下标或地址表达式。

带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX 和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP 或BX一起出现在方括号内,但不允许SI和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 中的高四位。

ADC∶指令助记符——带进位加法(把CF的值加上)。

用于多字节数的高字节加法运算。

ADD∶指令助记符——加法。

参与运算的二操作数应该同时带符号或不带符号,并且长度一致。

操作数可以是寄存器、存储器或立即数,但不能同时为存储单元或段寄存器,立即数也不能作为目的操作数。

AF∶ Auxiliary Carry Flag,辅助进位标志,在标志寄存器的第4字节。

记录运算时第 3位(半个字节)产生的进位值(置1)。

该标志用于对BCD码的加减运算中。

AND∶逻辑运算符(在语句的操作数部分,汇编时完成)或逻辑操作指令助记符(在语句的操作码部分,其运算在执行指令时完成)——按位与。

只有相“与”的两位全为1 ,结果才为1。

某数自己与自己相“与”,操作数不变,进位标志CF清0 。

ASSUME∶段定义伪指令——设定分段寄存器,格式为"ASSUME 段寄存器:段名[,段寄存器名:段名]"。

在代码段的开始用来指出所有段与段寄存器的关系,确定某个段分配给哪个段寄存器。

ASSUME只指出各段寄存器的分配,并没有把段地址装入相应的段寄存器。

为此,在代码段中,还必须把数据段和附加数据段的段地址装入相应的寄存器中。

AT∶伪指令——段定义(组合类型)。

该段按绝对地址定位,段基址为数值表达式的值,位移量为0 。

不能指定代码段。

AX∶ Accumulator,通用寄存器,算术运算的主要寄存器。

另外,所有的I/O指令都使用这一寄存器与外部设备传送信息。

其中AH是高8位,AL是低8位。

B∶数据类型后缀,表示二进制常量。

BP∶Base Pointer,基址指针寄存器。

可以与SS寄存器联用来确定堆栈中任一存储单元的地址。

它指示堆栈中任一单元的偏移量。

非堆栈进出指令要访问堆栈,只能通过BP进行。

BX∶Base,通用寄存器。

在计算存储器地址时,经常用作基址寄存器。

其中BH是高 8位,BL是低 8位。

BYTE∶伪指令——段定义(定位类型)。

本段起始单元可以从任一地址开始,段间不留空隙,存储器利用率最高。

CALL∶指令助记符——程序调用。

一、段内直接调用:格式为" CALL 过程名"。

先把IP内容(子程序的返回地址,即CALL 下一条指令的地址)压入堆栈,然后IP转移到子程序的入口地址。

二、段内间接调用:格式为" CALL WORD PTR OPD"。

先把IP的内容压入堆栈,然后IP指向(转到)由寻址方式决定的EA。

三、段间直接调用。

格式为"CALL FAR PTR 过程名"。

先把CS和IP的内容压入堆栈,然后在CS中装入新的段地址,IP指向段内偏移地址。

四、段间间接调用:格式为"CALL DWORD PTR OPD"。

先把CS和IP的内容压入堆栈,然后把寻址方式确定的有效地址所指定的一个字储存单元的内容送入IP,下一个字存储单元的内容(段首址)送入CS。

CBW∶指令助记符——字节转换为字。

把AL中字节的符号扩展到AH中,若(AL)的最高有效位为0 ,则(AH)=00;若(AH)的最高有效位为1,则(AH)=0FFH。

CF∶Carry Flag,进位标志,在标志寄存器的第0字节 ,记录运算时从最高有效位产生的进位值(置1)。

作加法时,CF位可以用来表示无符号数的溢出(有符号数溢出用OF表示)。

CLC∶指令助记符——标志(进位)设置。

设置CF=0。

CLD∶指令助记符——清方向标志。

使DF=0 。

这样,当执行字节串操作指令时,地址自动增1 ;当执行字串操作指令时,地址自动增2 。

CLI∶指令助记符——中断允许标志设置。

设置IF=0 。

CMC∶指令助记符——标志(进位)设置。

CF取反。

CMP∶指令助记符——比较。

对于“ CMP AX,BX”,如果是两个无符号数比较(减),若结果没有产生借位,即CF=0,则(AX)≥(BX);若CF= 1,则(AX)〈(BX)。

如果是两个带符号数比较,则当没有溢出(OF=0)时,若SF=0,则(AX)〉(BX)若SF=1,则(AX)〈(BX)当产生溢出(OF=1)时,若SF=0,则(AX)〈(BX)多SF=1,则(AX)〉(BX)简炼的结论,若 OF 异或 SF=0,则(AX)〉(BX)若 OF 异或 SF=1,则(AX)〈(BX)CMPS∶指令助记符——串比较。

通常用CMPSB或CMPSW。

CMPSB∶指令助记符——串比较。

将DS段SI指出的字节数据减去ES段DI指出的字节数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF=1)。

并由方向标志DF修改SI 和DI中的地址,即当DF=0时,地址都加1;当DF=1时,地址都减1 。

CMPSW∶指令助记符——串比较。

将DS段SI指出的字数据减去ES段DI指出的字数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF=1)。

并由方向标志DF修改SI 和DI中的地址,即当DF=0时,地址都加2;当DF=1时,地址都减2 。

COMMON∶伪指令——段定义(组合类型)。

该段与其它模块中所有也说明为COMMON 的同名,同'类别'段共享相同的存储区域,即这些段的起始地址都相同,共享的公共存储区域的长度是各模块同名段中最大的长度。

使用COMMON方式可以使不同模块中的不同变量或标号作用于相同的存储单元。

CS∶Code Segment,代码段寄存器,存放当前运行的代码段起始地址(高16位)。

代码段存放当前正在运行的程序。

CWD∶指令助记符——字转换为双字。

把AX中字节的符号扩展到DX中,若(AX)的最高有效位为0 ,则(DX)=0000;若(AX)的最高有效位为1,则(DX)=0FFFFH。

CX∶Count, 通用寄存器。

在循环和串处理指令中用作隐含的计数器。

其中CH是高 8位,CL是低 8位。

DAA∶指令助记符——加法的十进制调整(压缩的BCD码)。

无操作数,调整的加法结果在AL中。

调整方法是,如果AL的低 4位大于9 或AF=1 ,则加 6 到AL并置AF=1 ;如果AL的高 4位大于 9或CF=1 ,则加60H 到AL,并置CF=1 。

DAS∶指令助记符——减法的十进制调整(压缩的BCD码)。

调整方法是,若AF=1 或AL的低4位为A—F,则(AL)减06H,且AF置 1;若CF=1 或AL的高 4位为A—F,则(AL)减60H,且CF置1。

DB∶伪指令——定义字节。

其后的每个操作数占用一个字节。

若是字符串,必须用引号' '括起来,字符串不能超过 255个字符,字符串自左至右以字符的ASCII码按地址递增的顺序依次存放。

DD∶伪指令——定义双字。

相关文档
最新文档