开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1809|回复: 0
收起左侧

必备技能--你懂得--软件**常用汇编指令1

[复制链接]
结帖率:50% (2/4)
发表于 2011-3-19 13:26:53 | 显示全部楼层 |阅读模式   江西省南昌市
  软件**常用汇编指令            
内容太多,只能分两个帖子啦,见谅
 cmp a,b // 比较a与b   mov a,b // 把b值送给a值,使a=b
    cmp    a,b     //  比较a与b
  mov    a,b     //  把b值送给a值,使a=b
  ret            //  返回主程序
  nop            //  无作用
  call           //  调用子程序,子程序以ret结尾
  je或jz         //  相等则跳(机器码是74或84)
  jne或jnz       //  不相等则跳(机器码是75或85)
  jmp            //  无条件跳(机器码是EB)
  jb             //  若小于则跳
  ja             //  若大于则跳
  jg             //  若大于则跳
  jge            //  若大于等于则跳
  jl             //  若小于则跳
  pop xxx        //  xxx出栈
  push xxx       //  xxx压栈
  ★★**经典句式★★
  1.(最常用)
  mov  eax [      ]
  mov  edx [      ]
  call 00??????       关键call
  test eax eax
  jz(jnz)或  jne(je)  关键跳转
  2 (最常用)
  mov  eax [      ]
  mov  edx [      ]
  call 00??????       关键call
  jne(je)             关键跳转
  3
  mov eax [  ]
  mov edx [  ]
  cmp eax,edx
  jnz(jz)
  4
  lea edi [    ]
  lea esi [    ]
  repz cmpsd
  jz(jnz)
  5
  mov  eax [      ]
  mov  edx [      ]
  call 00??????
  setz (setnz) al (bl,cl…)
  6
  mov  eax [      ]
  mov  edx [      ]
  call 00??????
  test eax eax
  setz (setnz) bl,cl…
  7
  call 00??????  ***
  push eax (ebx,ecx…)
  ……
  ……
  call 00??????
  pop eax (ebx,ecx…)
  test eax eax
  jz(jnz)
  一、数据传输指令
  ───────────────────────────────────────
  它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
  1. 通用数据传送指令.
  MOV    传送字或字节.
  MOVSX  先符号扩展,再传送.
  MOVZX  先零扩展,再传送.
  PUSH    把字压入堆栈.
  POP    把字弹出堆栈.
  PUSHA  把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
  POPA    把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
  PUSHAD  把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
  POPAD  把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
  BSWAP  交换32位寄存器里字节的顺序
  XCHG    交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
  CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
  XADD    先交换再累加.( 结果在第一个操作数里 )
  XLAT    字节查表转换.
  ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即
  0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
  2. 输入输出端口传送指令.
  IN      I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
  OUT    I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
  输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
  其范围是 0-65535.
  3. 目的地址传送指令.
  LEA    装入有效地址.
  例: LEA DX,string  ;把偏移地址存到DX.
  LDS    传送目标指针,把指针内容装入DS.
  例: LDS SI,string  ;把段地址:偏移地址存到DS:SI.
  LES    传送目标指针,把指针内容装入ES.
  例: LES DI,string  ;把段地址:偏移地址存到ES:DI.
  LFS    传送目标指针,把指针内容装入FS.
  例: LFS DI,string  ;把段地址:偏移地址存到FS:DI.
  LGS    传送目标指针,把指针内容装入GS.
  例: LGS DI,string  ;把段地址:偏移地址存到GS:DI.
  LSS    传送目标指针,把指针内容装入SS.
  例: LSS DI,string  ;把段地址:偏移地址存到SS:DI.
  4. 标志传送指令.
  LAHF    标志寄存器传送,把标志装入AH.
  SAHF    标志寄存器传送,把AH内容装入标志寄存器.
  PUSHF  标志入栈.
  POPF    标志出栈.
  PUSHD  32位标志入栈.
  POPD    32位标志出栈.
  二、算术运算指令
  ───────────────────────────────────────
  ADD    加法.
  ADC    带进位加法.
  INC    加 1.
  AAA    加法的ASCII码调整.
  DAA    加法的十进制调整.
  SUB    减法.
  SBB    带借位减法.
  DEC    减 1.
  NEC    求反(以 0 减之).
  CMP    比较.(两操作数作减法,仅修改标志位,不回送结果).
  AAS    减法的ASCII码调整.
  DAS    减法的十进制调整.
  MUL    无符号乘法.
  IMUL    整数乘法.
  以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
  AAM    乘法的ASCII码调整.
  DIV    无符号除法.
  IDIV    整数除法.
  以上两条,结果回送:
  商回送AL,余数回送AH, (字节运算);
  或  商回送AX,余数回送DX, (字运算).
  AAD    除法的ASCII码调整.
  CBW    字节转换为字. (把AL中字节的符号扩展到AH中去)
  CWD    字转换为双字. (把AX中的字的符号扩展到DX中去)
  CWDE    字转换为双字. (把AX中的字符号扩展到EAX中去)
  CDQ    双字扩展.    (把EAX中的字的符号扩展到EDX中去)
  三、逻辑运算指令
  ───────────────────────────────────────
  AND    与运算.
  OR      或运算.
  XOR    异或运算.
  NOT    取反.
  TEST    测试.(两操作数作与运算,仅修改标志位,不回送结果).
  SHL    逻辑左移.
  SAL    算术左移.(=SHL)
  SHR    逻辑右移.
  SAR    算术右移.(=SHR)
  ROL    循环左移.
  ROR    循环右移.
  RCL    通过进位的循环左移.
  RCR    通过进位的循环右移.
  以上八种移位指令,其移位次数可达255次.
  移位一次时, 可直接用操作码.  如 SHL AX,1.
  移位>1次时, 则由寄存器CL给出移位次数.
  如  MOV CL,04
  SHL AX,CL
  四、串指令
  ───────────────────────────────────────
  DS:SI  源串段寄存器  :源串变址.
  ES:DI  目标串段寄存器:目标串变址.
  CX      重复次数计数器.
  AL/AX  扫描值.
  D标志  0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
  Z标志  用来控制扫描或比较操作的结束.
  MOVS    串传送.
  ( MOVSB  传送字符.    MOVSW  传送字.    MOVSD  传送双字. )
  CMPS    串比较.
  ( CMPSB  比较字符.    CMPSW  比较字. )
  SCAS    串扫描.
  把AL或AX的内容与目标串作比较,比较结果反映在标志位.
  LODS    装入串.
  把源串中的元素(字或字节)逐一装入AL或AX中.
  ( LODSB  传送字符.    LODSW  传送字.    LODSD  传送双字. )
  STOS    保存串.
  是LODS的逆过程.
  REP            当CX/ECX<>0时重复.
  REPE/REPZ      当ZF=1或比较结果相等,且CX/ECX<>0时重复.
  REPNE/REPNZ    当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
  REPC          当CF=1且CX/ECX<>0时重复.
  REPNC          当CF=0且CX/ECX<>0时重复.
  五、程序转移指令
  ───────────────────────────────────────
  1>无条件转移指令 (长转移)
  JMP    无条件转移指令
  CALL    过程调用
  RET/RETF过程返回.
  2>条件转移指令 (短转移,-128到+127的距离内)
  ( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
  JA/JNBE 不小于或不等于时转移.
  JAE/JNB 大于或等于转移.
  JB/JNAE 小于转移.
  JBE/JNA 小于或等于转移.
  以上四条,测试无符号整数运算的结果(标志C和Z).
  JG/JNLE 大于转移.
  JGE/JNL 大于或等于转移.
  JL/JNGE 小于转移.
  JLE/JNG 小于或等于转移.
  以上四条,测试带符号整数运算的结果(标志S,O和Z).
  JE/JZ  等于转移.
  JNE/JNZ 不等于时转移.
  JC      有进位时转移.
  JNC    无进位时转移.
  JNO    不溢出时转移.
  JNP/JPO 奇偶性为奇数时转移.
  JNS    符号位为 "0" 时转移.
  JO      溢出转移.
  JP/JPE  奇偶性为偶数时转
您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表