zoukankan      html  css  js  c++  java
  • 汇编语言基础教程指令:传送,交换,取地址

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

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

  • 相关阅读:
    bzoj 1444: [Jsoi2009]有趣的游戏【AC自动机+dp+高斯消元】
    bzoj 3270: 博物馆【dp+高斯消元】
    bzoj 3105: [cqoi2013]新Nim游戏【线性基+贪心】
    bzoj 1923: [Sdoi2010]外星千足虫【高斯消元】
    bzoj 3629: [JLOI2014]聪明的燕姿【线性筛+dfs】
    bzoj 1296: [SCOI2009]粉刷匠【dp+背包dp】
    bzoj 3329: Xorequ【数位dp+矩阵乘法】
    bzoj 1306: [CQOI2009]match循环赛【dfs+剪枝】
    bzoj 4720: [Noip2016]换教室【期望dp】
    bzoj 2257: [Jsoi2009]瓶子和燃料【裴蜀定理+gcd】
  • 原文地址:https://www.cnblogs.com/liulun/p/1653575.html
Copyright © 2011-2022 走看看