当前位置:首页 > 汇编基础知识全解
用存储器中的两个相继字的内容取代CS 和 IP。
(存储单元的地址可用除立即数和寄存器以外的任何一种数据寻址方式得到) 例: JMP DWORD PTR [INTERS+BX]
三、数据传送指令: ? 通用数据传送指令 MOV、PUSH、POP、XCHG ? 累加器专用传送指令 IN、OUT、XLAT ? 地址传送指令 LEA、LDS、LES
? 标志寄存器传送指令 LAHF、SAHF、PUSHF、POPF ? 类型转换指令 CBW、CWD
? 通用数据传送指令
传送指令: MOV DST, SRC 执行操作: (DST) ? (SRC) 注意:
* DST 不能是 CS
* DST、SRC 不能同时为段寄存器 MOV DS, ES ′ * 立即数不能直接送段寄存器 MOV DS, 2000H ′ * DST 不能是立即数
* DST、SRC 不能同时为存储器寻址
进栈指令: PUSH SRC
执行操作: (SP) ? (SP) – 2 ( (SP)+1, (SP) ) ? (SRC) 出栈指令: POP DST
执行操作: (DST) ? ( (SP)+1, (SP) ) (SP) ? (SP) + 2
堆栈:‘先进后出’的存储区,存在于堆栈段中,SP 在 任何时候都指向栈顶。 注意:
* 堆栈操作必须以字为单位。 * 不影响标志位
* 不能用立即寻址方式 PUSH 1234H ′ * DST不能是CS POP CS ′ 交换指令: XCHG OPR1, OPR2 执行操作: (OPR1) ? (OPR2) 注意:
* 不影响标志位
* 不允许使用段寄存器 例:XCHG BX, [ BP+SI ] XCHG AL, BH
换码指令:XLAT 或 XLAT OPR
执行操作:(AL) ? ( (BX) + (AL) )
例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE
指令执行后 (AL)=33H 注意:
* 不影响标志位
* 字节表格(长度不超过256) 首地址 ? (BX) 需转换代码 ? (AL)
? 地址传送指令
有效地址送寄存器指令: LEA REG, SRC 执行操作: (REG) ? SRC
指针送寄存器和DS指令: LDS REG, SRC 执行操作: (REG) ? (SRC) (DS) ? (SRC+2)
4个相继字节 ? 寄存器(通常是SI)、DS 指针送寄存器和ES指令: LES REG, SRC 执行操作: (REG) ? (SRC) (ES) ? (SRC+2)
4个相继字节 ? 寄存器(通常是DI)、ES
? 标志寄存器传送指令
标志送AH指令: LAHF
执行操作: (AH) ? (PSW的低字节) AH送标志寄存器指令: SAHF
执行操作: (PSW的低字节) ? (AH) 标志进栈指令: PUSHF
执行操作: (SP) ? (SP) - 2 ( (SP)+1, (SP) ) ? (PSW) 标志出栈指令: POPF
执行操作: (PSW) ? ( (SP)+1, (SP) ) (SP) ? (SP) + 2 * 影响标志位
? 类型转换指令
CBW AL ? AX
执行操作: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= 0FFH CWD AX ? (DX,AX)
执行操作:若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= 0FFFFH 例:(AX) = 0BA45H CBW ; (AX)=0045H
CWD ; (DX)=0FFFFH (AX)=0BA45H 注意: * 无操作数指令
* 隐含对AL 或AX 进行符号扩展 * 不影响条件标志位
四、算术运算指令:
? 加法指令
加法指令: ADD DST, SRC
执行操作: (DST) ? (SRC) + (DST) 带进位加法指令: ADC DST, SRC
执行操作: (DST) ? (SRC) + (DST) + CF 加1指令: INC OPR
执行操作: (OPR) ? (OPR) + 1 注意:
* 除INC指令不影响CF标志外,均对条件标志位有影响。 加法指令对条件标志位(CF/OF/ZF/SF)的影响: SF=1 加法结果为负数 SF=0 加法结果为正数 ZF=1 加法结果为零 ZF=0 加法结果不为零
OF=1 两个同符号数相加,结果符号与其相反,
OF=0 两个同符号数相加,或同符号相加,结果符号与其相同。 ? 减法指令
减法指令: SUB DST, SRC
执行操作: (DST) ? (DST) - (SRC)
带借位减法指令: SBB DST, SRC
执行操作: (DST) ? (DST) - (SRC) - CF
减1指令: DEC OPR
执行操作: (OPR) ? (OPR) - 1
求补指令: NEG OPR
执行操作: (OPR) ? - (OPR)
比较指令: CMP OPR1, OPR2 执行操作: (OPR1) - (OPR2) 注意:
* 除DEC指令不影响CF标志外,均对条件标志位有影响。 SF=1 减法结果为负数(符号位为1) SF=0 减法结果为正数(符号位为0) ZF=1 减法结果为零 ZF=0 减法结果不为零
CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况) OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。 例:x、y、z 均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现 w ? x + y + 24 - z ,并用W, W+2单元存放w MOV AX, X MOV DX, X+2 ADD AX, Y
ADC DX, Y+2 ; x+y ADD AX, 24
ADC DX, 0 ; x+y+24 SUB AX, Z
SBB DX, Z+2 ; x+y+24-z MOV W, AX
MOV W+2, DX ; 结果存入W, W+2单元
? 乘法指令
无符号数乘法指令: MUL SRC 执行操作:
字节操作数 (AX) ? (AL) * (SRC) 字操作数 (DX, AX) ? (AX) * (SRC) 带符号数乘法指令: IMUL SRC 注意:
* AL (AX) 为隐含的乘数寄存器。 * AX (DX,AX) 为隐含的乘积寄存器。 * SRC不能为立即数。
指令对标志位的影响:乘法指令只影响标志位CF和OF,其他条件码位无定义。 MUL指令的条件码设置为:
CF OF=0 0 乘积的高一半为0(字节操作的(AH)或字操作的(DX)) CF OF=1 1 乘积的高一半不为0 IMUL指令的条件码设置为:
共分享92篇相关文档