?PTR?操作符 :强制类型转换 MOV BYTE PTR [BX], 20H ;1B立即数20H送DS:[BX] MOV WORD PTR [BX], 20H ;立即数20H送DS:[BX], ;00H送DS:[BX+1] 2.LEA(Load Effective Address)
设:变量X的偏移地址为1020H , (BP)=0020H 执行指令后:
LEA DX, X LEA BX, [BP]
; 执行后, (DX) = 1020H ; 执行后, (BX) = 0020H 3.地址传送指令LDS,LES LDS REG16, MEM ; 从存储器取出4B,送入REG16和DS LES REG16, MEM ; 从存储器取出4B,送入REG16和ES 4. 符号扩展指令CBW,CWD CBW ;将AL寄存器内容符号位扩展到AH CWD ;将AX寄存器内容符号位扩展到DX 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CBW ;(AX)= 0060H 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CWD ;(DX)= 0FFFFH,(AX)= 8060H 5.交换指令XCHG 例如,(AX)= 5678H 执行下面指令后 XCHG AH, AL ;(AX)= 7856H 6.换码指令XLAT
XLAT ;AL←DS: [BX+AL]
表格的首地址事先存放在内存逻辑地址DS: BX中, AL的内容是相对于表格的位移量,
把对应内存的内容取出放在AL寄存器。 7. 逻辑运算符 SHR(右移) SHL(左移) AND(与) OR(或) XOR(异或)
NOT(取反 8.关系运算符
关系运算符用于两个数的比较,结果为?真(-1)?或?假(0)? GT(>) GE(>=) LT(<) LE(<=) EQ(=) NE(≠) 9.地址运算符
SEG 名称 取地址表达式所在段的段基址 OFFSET 名称 取地址表达式的偏移地址 10.类型操作符 TYPE:
取每个变量的字节数 LENGTH:
取变量定义了多少个 SIZE:
取变量占用的字节总数 11.加法指令
(1)ADD(Addition):加法指令 格式:ADD dest,src
功能:dest ←dest + src dest(目的操作数):8/16位的寄存器/存储器操作数 src(源操作数):与目的操作数同类型的寄存器/存储器/立即数 例: ADD AX, SI ; AX←(AX)+(SI),16位运算 ADD X, 3 ; X←(X)+3, 运算位数由X的类型确定 ADD [BX], DX ; DS:[BX]←DS:[BX]+DX, 16位运算 说明:
? 状态标志CF, OF, ZF, SF, PF, AF按照运算结果被刷新; (2)ADC(Addition with Carry):带进位的加法指令 格式:ADC dest,src 功能:dest←dest+src+CF dest(目的操作数):8/16位的寄存器/存储器 src(源操作数):与目的操作数同类型的寄存器/存储器/立即数 说明:
? 状态标志CF, OF, ZF, SF, PF, AF按照运算结果被刷新; ? 主要用于对数据分段相加时高位的加法运算。 (3)INC(Increment):加一指令 格式:INC dest 功能:dest←dest+1 dest(目的操作数):8/16位的寄存器/存储器 例: INC X
;X←(X)+1,运算位数由X的类型确定 INC WORD PTR [BX] ;DS:[ BX] ←DS:[ BX]+1,16位运算 说明:
? 会影响标志OF, ZF, SF, PF, AF,但是CF标志不受影响; ? 增量指令常常用来修改计数器和存储器指针的值。 12.减法指令
(1)SUB(Subtract):减法指令 格式:SUB dest,src
功能:dest ← dest-src
dest(目的操作数):8/16位的寄存器/存储器
src(源操作数):与目的操作数同类型的寄存器/存储器/立即数 例:
SUB Y, 20H ;Y←(Y)-20H,运算位数由Y的类型确定 SUB WORD PTR [BP], 5 ;SS:[ BP] ←SS:[ BP]-5,16位运算 说明:会影响CF, OF, ZF, SF, PF, AF 标志位。 (2)SBB(Subtract with Borrow):带借位的减法指令 格式:SBB dest,src
功能:dest←dest-src-CF
dest(目的操作数):8/16位的寄存器/存储器
src(源操作数):与dest同类型的寄存器/存储器/立即数 说明:
? 会影响CF, OF, ZF, SF, PF, AF 标志位;
? 主要用于对一个数据分段相减时高位的减法运算 (3)DEC(Decrement):减一指令 格式:DEC dest 功能:dest←dest-1
dest(目的操作数):8/16位的寄存器/存储器 例:DEC CX ;CX←(CX) -1,16位运算
DEC X ;X←(X)-1,运算位数由X的类型确定 说明:
? 会影响标志OF, ZF, SF, PF, AF,但是CF标志不受影响; ? 减量指令常常用来修改计数器和存储器指针的值。 (4)NEG(Negate):求补指令(求相反数) 格式:NEG dest 功能:dest←0-dest dest(目的操作数):8/16位的寄存器/存储器 例: NEG Z ;Z←-Z,运算位数由Z的类型确定
说明:
会影响标志OF, ZF, SF, PF, AF, CF
13.乘法指令
(1)MUL(Unsigned Multiplication):无符号数乘法 格式:MUL src
src(源操作数):8位/16位的寄存器/存储器 功能:8位源操作数时:AX←(AL)×源操作数 16位源操作数时:DX, AX←(AX)×源操作数
说明:
? 两个N位操作数相乘,得到2N位的乘积;
? 如果乘积的高N位为0,则CF=OF=0,否则CF=OF=1。其余
标志位无意义。 ? 上述说明中N=8或16。
(2)IMUL(Signed Integer Multiplication):有符号数乘法 格式:IMUL src
src(源操作数):8位/16位的寄存器/存储器 功能:8位源操作数时:AX←(AL)×源操作数 16位源操作数时:DX, AX←(AX)×源操作数 说明:
? 两个N位操作数相乘,得到2N位的乘积;
? 如果乘积高N位为低N位的符号扩展,则CF=OF=0,否则
CF=OF=1,其余标志位无意义。 ? 上述说明中N=8或16。
14.除法指令:
DIV(Unsigned Division):无符号除法 格式:DIV src
src(源操作数):8位/16位的寄存器/存储器
功能:8位源操作数时: (AX)÷源操作数,AL←商,AH←余数 16位源操作数时:(DX, AX)÷源操作数,AX←商,DX←余数 说明:
? 两个N位操作数相除,应首先把被除数零扩展为2N位; 例如,要进行除法(AX)÷(BX),假设AX、BX内均为无符号数: MOV DX, 0 ;32位被除数高16位清零 DIV BX ;(DX, AX)÷BX,AX←商,DX←余数
N
? 如果(2N位)÷(N位)的商大于2-1,会产生?除法溢出?错误。 ? 上述说明中N=8或16。 IDIV(Signed Integer Division):有符号数除法 格式:IDIV src
src(源操作数):8位/16位的寄存器/存储器
功能: 8位源操作数时:(AX)÷源操作数,AL←商,AH←余数 16位源操作数时:(DX, AX) ÷源操作数,AX←商,DX←余数
15.基本循环指令 格式:LOOP 标号 功能:CX←(CX)-1 如果(CX)≠ 0,转向?标号?处执行,否则执行下一条指令。 说明:
? LOOP可以改变指令的执行次序,称为?控制转移指令?; ? LOOP指令使一段程序重复地执行,称为?循环?。
? 重复执行的次数由CX寄存器中的值决定。CX寄存器因此称为
?计数器?。
16.DEBUG.EXE常用命令
? 反汇编
‘-U ’ 、 ‘-U 偏移地址’
? 显示寄存器内容
‘-R ’ 、 ‘-R 寄存器名’
? 单步执行指令
‘-T ’ 、 ‘-T 指令条数’ 、 ‘-P ’
? 全速执行指令
‘-G ’ 、 ‘-G 终止地址’、 ‘-G=起始地址’ ‘-G=起始地址 终止地址’
? 显示数据段内容
‘-D ’ 、 ‘-D 起始地址’、 ‘-D 起始地址L字节数’
? 修改数据段内容
‘-E 起始地址 数据1 数据2 …’
‘-F 起始地址L字节数 数据1 数据2 …’
? 退出 ‘-Q ’
17.移位指令
SHL逻辑左移,最高位进入CF,最低位补0 SHR 逻辑右移,最低位进入CF,最高位补0 SAL 算术左移,最高位进入CF,最低位补0 SAR 算术右移,最低位进入CF,最高位不变 18.循环移位指令
ROL 不带进位循环左移 ROR 不带进位循环右移 RCL 带进位循环左移 RCR 带进位循环右移
18.无条件转移指令
? ⑴ 段内转移、直接寻址 ? ⑵ 段内转移、间接寻址 ? ⑶ 段间转移、直接寻址 ? ⑷ 段间转移、间接寻址