dVal DWORD 5 .code
mov ds,45 ;immediate move to DS not permitted mov esi,wVal ;size mismatch
mov eip,dVal ;EIP cannot be the destination mov 25,bVal ;immediate value cannot be destination mov bVal2,bVal ;memory-to-memory move not permitted
3.MOVZX指令(move with zero-extend,零扩展传送)
指令将源操作数的内容复制到目的操作数中,并将该值零扩展至16位或32 位。
该指令只适用于无符号数。 三种格式:
Movzx r32,r/m8 Movzx r32,r/m16 Movzx r16,r/m8
用例:
mov bl,10001111b
movzx ax,bl ; zero-extension
01 0 0 0 1 1 1 1Source0 0 0 0 0 0 0 01 0 0 0 1 1 1 1Destination4.MOVSX指令(move with sign-extend,符号扩展传送)
指令将源操作数的内容复制到目的操作数中,并将该值符号扩展至16位或 32位。该指令只适用于有符号数。三种格式:
Movsx r32,r/m8 Movsx r32,r/m16 Movsx r16,r/m8
用例:
mov bl,10001111b
movsx ax,bl ; sign extension
5
1 0 0 0 1 1 1 1Source
1 1 1 1 1 1 1 11 0 0 0 1 1 1 1Destination5.XCHG指令
指令交换两个操作数内容。 规则:不接受立即操作数
除此之外,与MOV指令遵循同样规则。 用例: .data
var1 WORD 1000h var2 WORD 2000h .code
xchg ax,bx ; exchange 16-bit regs xchg ah,al ; exchange 8-bit regs xchg var1,bx ; exchange mem, reg xchg eax,ebx ; exchange 32-bit regs
xchg var1,var2 ; error: two memory operands
6.直接偏移操作数
在变量名称后加上一个偏移值,可以创建直接偏移(direct-offset)操作数,可以通过它访问没有显示标号的内存地址。
字节数组,字数组,双字数组的第二个元素与第一个元素的偏移相距分别为1,2,4字节
练习题: .data
6
var1 SBYTE -4,-2,3,1
var2 WORD 1000h,2000h,3000h,4000h var3 SWORD -16,-42 var4 DWORD 1,2,3,4,5
下列每条指令安顺序执行后,目的操作数的值是什么? mov ax,var2 ;1000h mov ax,[var+4] ;3000h mov ax,var3 ;FFF0h mov ax,[var3-2] ;4000h
mov edx,var4 ;00000001h mov edx,var2 ;00001000h mov edx,[var4+4] ;00000002h mov edx,var1 ;FFFFFFFCh
二、加法和减法
1、INC 和DEC 指令
Add 1, subtract 1 from destination operand,operand may be register or memory
INC Logic: destination ? destination + 1 DEC Logic: destination ? destination – 1 格式:
INC reg/mem DEC reg/mem 用例: .data
myWord WORD 1000h
myDword DWORD 10000000h .code
inc myWord ; 1001h dec myWord ; 1000h
inc myDword ; 10000001h
mov ax,00FFh
inc ax ; AX = 0100h mov ax,00FFh
inc al ; AX = 0000h
练习题:
7
.data
myByte BYTE 0FFh, 0 .code
mov al,myByte ; AL =FFh mov ah,[myByte+1] ; AH =00h dec ah ; AH =FFh inc al ; AL =00h dec ax ; AX = FEFF
3.ADD and SUB指令
ADD destination, source
Logic: destination ? destination + source SUB destination, source Logic: destination ? destination – source 用例: .data
var1 DWORD 10000h var2 DWORD 20000h
.code ; ---EAX--- mov eax,var1 ; 00010000h add eax,var2 ; 00030000h add ax,0FFFFh ; 0003FFFFh add eax,1 ; 00040000h sub ax,1 ; 0004FFFFh
4.NEG指令
Reverses the sign of an operand. Operand can be a register or memory operand.
格式: NEG reg NEG mem 用例: .data
valB BYTE -1 valW WORD +32767 .code
mov al,valB ; AL = -1
8
相关推荐: