汇编语言基础教程-指令:传送,交换,取地址

简介: 1.mov 如: mov eax,20   ;把立即数20送入通用寄存器 mov edi,esi    ;寄存器之间传递数据 mov dVar,20    ;把20送入内存操作数(变量) mov WORD PTR [EBX],20   ;传送字到EBX指向的地址 mov [ebx],DW...

1.mov

如:

mov eax,20   ;把立即数20送入通用寄存器

mov edi,esi    ;寄存器之间传递数据

mov dVar,20    ;把20送入内存操作数(变量)

mov WORD PTR [EBX],20   ;传送字到EBX指向的地址

mov [ebx],DWORD PTR [ESI]  ;错误指令,两个操作数不能都是内存操作数,可改为两条指令完成这个需求

mov ds,0023h   ;错误指令,立即数不能直接送段寄存器

mov ds,ss     ;错误指令,两个段寄存器之间不能直接传送

mov cs,ax    ;错误指令,CS段寄存器不能作为目标操作数

 

2.movzx

move with zero extend高位不足用0填充

源操作数的位数必须比目标操作数要少

源操作数不能是立即数

如:

mov eax,al

 

3.movsx

move with sign extend高位不足用符号位填充

源操作数的位数必须比目标操作数要少

源操作数不能是立即数

如:

mov al,82h

movsx  bx,al  ;此时bx为:0FF82H,BX的高八位设置为1

 

4.xchg

将原操作数与目的操作数的内容进行交换

两个操作数必须有一个是通用寄存器

如:

xchg  eax,ebx

 

5.bswap

如:

bswap eax

该指令的意思是将eax的高字节和低字节的内容互换

中间两个字节的内容互换

操作数必须是一个32位寄存器

 

6.lea

把源操作数的有效地址传递给目标操作数

如:

lea eax,dvar

此指令与如下指令效果相同

lea eax,offset  dvar

在内存中的代码分别为:

lea eax,[0040400a]

mov eax,0040400a

另:

lea指令能完成运算功能

mov eax,20

lea ebx,[eax+1] ;此时ebx为21

如在此处做乘法运算,乘数必须为1,2,4,8

 

7.lds,les,lfs,lgs

从内存操作数(源操作数)中取6个字节,

前面4个字节的内容作为一个双字送给目标操作数

后面两个字节送给DS或ES,FS,GS

假设FWORD类型的变量fVar的指向如下内存

00404040--->7d

00404041--->40

00404042--->40

00404043--->00

00404044--->23

00404045--->00

那么lds  esi,fvar指令执行之后

esi中的内容为0040407dH

DS中的内容为0023H

 

 

在win32编程中很少用到段寄存器!!!

所以涉及到段寄存器相关的指令也很少见!!!

目录
相关文章
|
2月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
2月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
191 0
几组汇编指令的比较
几组汇编指令的比较
|
5月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
6月前
|
传感器 安全 Java
汇编语言基础教程
汇编语言基础教程
|
6月前
|
存储 Java 程序员
汇编语言教程及实例
汇编语言教程及实例
|
5月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
|
5月前
|
编译器
8086 汇编笔记(八):转移指令的原理
8086 汇编笔记(八):转移指令的原理
|
5月前
|
编译器
8086 汇编笔记(六):更灵活的定位内存地址的方法
8086 汇编笔记(六):更灵活的定位内存地址的方法