汇编学习笔记8
第八讲..由于前天把第7讲又听了一遍,昨天是第8讲.第7讲用了两天才听完.
第8讲继续讲述指令.
在第7讲里讲了三个指令(5个)
MOV
XCHG
LEA, LDS, LES
它们各有各的限制.
MOV, 源操作数和目的操作数不能都是存储单元,目的操作数不能是立即数,源操作数和目的操作数不能都是段寄存器,立即数不能作为目的操作数,代码段不能作为目的操作数,IP不能作为操作数。
XCHG,指令只能用于通用寄存器和存储单元之间,或通用寄存器之间交换数据。
LEA,LED,LES 地址传送指令,源操作数可以使用除立即数寻址和寄存器外的其它寻址方式。目的操作数可以是通用寄存器。
第8讲讲述了两个堆栈操作的指令和几个标志位操作。其中标志位操作不做重点。
1. PUSH 把数据压入堆栈指针寄存器中。先把BP - 2, 然后把操作数存入BP。操作数可以是通用寄存器,存储单元,段寄存器。
2. POP 把数据从堆栈指针寄存器中弹出。先把BP取出送入操作数,然后把 BP + 2。操作数可以是通用寄存器,存储单元,段寄存器,不能是代码段。
3. LAHF 把标志位低8位的标志位送入寄存器AH中。不影响其它位。
4. SAHF 把AH寄存器送入标志位低8位。不影响其他位。
5. PUSHF 把标志位压入堆栈。
6. POPF 把栈顶数据弹出到标志位。
由此,将两个数据交换的方法有三种。
1.由中间寄存器
MOV BX, AX
MOV AX, DS
MOV DS, BX
2.由XCHG
XCHG AX, VALUE
3.使用堆栈
PUSH DS
PUSH ES
POP ES
POP DS