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

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编程中很少用到段寄存器!!!

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

时间: 2024-10-30 22:39:53

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

汇编语言基础教程-加法指令

1.add  dst,src dst不能是立即数 dst和src不能同时采用内存操作数 可用于有符号和无符号的加法运算 CF=1说明无符号数加法运算有溢出,最高位有进位 OF=1说明有符号数加法运算有溢出,两个正数相加结果却是负数,或两个负数相加结果却是正数   2.inc dst 目的操作数加1,不设置CF标志位 速度快   3.adc dst,src 两个操作数做加法,在加上CF的值 两个加数都为64位的时候会用到此指令 要先把两个操作数拆分成4个32位数 然后可以这样做 mov eax,l

汇编语言基础教程-减法指令

1:sub dst,src cf=1表示无符号数减法发生溢出 OF=1表示有符号减法发生溢出 (一个正数减去一个负数却得到一个负数,一个负数减去一个正数却得到一个正数)   2:DEC DST 目的操作数减1,不置标志位,速度快   3:SBB DST,SRC 两个操作数相减再减去CF标志位 SBB多用于多位数的减法 两个64位数相减要先把两个64位数拆成4个32位数 再进行如下操作 mov eax,low1 mov edx,high1 sub eax,low2 sbb edx,high2 此时

汇编语言基础教程-除法指令

1:div src src为8位时:ax/src = al余数放在AH中 SRC位16位时:DX:AX/SRC = AX,余数放在DX中 SRC为32位时:EDX:EAX/SRC = EAX,余数放在EDX中   2:IDIV 带符号的除法 A/B的表示如下: mov ax,a cwd;把ax扩展为dx:ax idiv b

汇编语言基础教程-寻址方式

1立即寻址 在指令中使用的操作数为常数 如: mov eax,190;与mov eax,00BEH相同,低字节在前s mov eax,0FFFFFFFFH;与 mov eax,-1相同 eax可以存放一个双字   2寄存器寻址 操作数已经在CPU的寄存器中 如: mov EAX,EBX   3直接寻址 操作数为一个已经定义好的变量 如: mov eax,dvar;dvar为一个双字变量 mov dvar,eax 在翻译成及其指令后,以上指令就变成了类似以下形式 mov eax,[00404011

汇编语言基础教程-寄存器

32位CPU一般包括如下寄存器   1.通用寄存器 8个32位寄存器 EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP 8个16位寄存器 AX,BX,CX,DX,SI,DI,BP,SP 8个8位寄存器 AH,AL,BH,BL,CH,CL,DH,DL   2.段寄存器 6个16位段寄存器 SS,CS,DS,ES,FS,GS 注意只能对CS寄存器做读取操作

汇编语言超浓缩教程_其它相关

所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样).某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了.为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ--).但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP.WINRAR-依次压迫,嘿嘿!

AJAX开发基础教程篇

ajax|基础教程 一. 什么是AJAX? 这个名字代表了异步JavaScript+XMLHTTPRequest,并且意味着你可以在基于浏览器的JavaScript和服务器之间建立套接字通讯.其实AJAX并不是一种新技术,而是已经成功地用于现代浏览器中的若干成功技术的可能性组合.所有的AJAX应用程序实现了一种"丰富的"UI--这是通过JavaScript操作HTML文档对象模型并且经由XMLHttpRequest实现的精确定位的数据检索来实现的.典型的示例AJAX应用程序是Googl

基础教程介绍——什么是SOA?

基础教程 对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,SOA是一场革命.一个应用程序的业务逻辑(business logic)或某些单独的功能被模块化并作为服务呈现给消费者或客户端.这些服务的关键是他们的松耦合特性.例如,服务的接口和实现相独立.应用开发人员或者系统集成者可以通过组合一个或多个服务来构建应用,而无须理解服务的底层实现.举例来说,一个服务可以用.NET或J2EE来实现,而使用该服务的应用程序可以在不同的平台之上,使用的语言也可以不同. SOA有以下特性 SOA服务

Ajax基础教程(1)-Ajax简介 1.1 Web应用简史

混沌初开,一切都那么简单.为了连接美国的少数几个顶尖研究机构,人们设计了最早的"Internet",以便共同开展科学研究.不论是图书馆员.核物理学家,还是计算机科学家,都必须学习一个相当复杂的系统.1962年,麻省理工学院(MIT)的J.C.R. Licklider最早提出他的"Galactic Network"(超大网络)思想时,Firefox和IE之类的便捷工具连概念都未产生. Licklider后来继续在美国国防高级研究计划局(DARPA)从事计算机研究,在那