汇编学习

汇编学习

  • DB DW DD 8,16,32字节
  • 数据段的东西
  • T DB 'A'定义一个字节型的变量T,把 A 存在 T 中
  • T DB 'abc','$' 定义一个子节串,abc,$为字符串结束标志
  • 如果调用T,那么T为
  • BUF DB 10 DUP(?) 定义一个名为buf的数组,可以存储10个,里面的东西没有赋值

  • 16位的数据寄存器是什么,32位的寄存器
  • 指针变址寄存器 (30页)
  • SP是堆栈
  • 段寄存器有什么:DS,CS,ES
  • 串处理指令中 DS存源,ES存目的
  • 标志位进位标志:CF
  • 零标志位:ZF
  • 状态控制位:DF(方向控制),CLD清除方向,DF=0的时候,地址从低到高,正向;DF=1,从后往前比较,地址从高到低
  • 物理地址=段地址×16+偏移地址 例题 2-1

  • 寻址方式,7个
  • 立即寻址方式/寄存器寻址:使用立即数,使用寄存器
  • 直接寻址:MOV AX,[ 立即数 ]
  • 寄存器直接寻址:MOV AX,[ BX ] [中只能是BX,BP,SI,DI]
  • 寄存器相对寻址:MOV AX,[ BX+1111H ]
  • 基址变址寻址:MOV AX,[ BX+SI ],这里分为两组了寄存器 [ BX/BP ] +[ SI/DI ]
  • 相对基址变址寻址:MOV AX,[ BX+SI+1111H ], [地址] = [ { BX | BP | 空 } + { SI | DI | 空 } + { 立即数 | 空 } ]

  • XCHG 交换两个寄存器,或者寄存器和内存变量。交换的时候,要注意两个操作数类型要相同。
  • LEA 取有效地址,把源操作数的地址偏移量传送目的操作数。就比如说:LEA AX,STRING,把string的地址送到AX中,机器指令
  • OFFSET 这个偏移量按字节计算,表示的是该数据标号距离数据段起始地址的距离。伪指令
  • 扩展CBW,CWD
  • CBW AL扩展为AX,CWD AX扩展为DX:AX,扩展位根据最高位判断
  • INC,DEC,INC自增一,DEC自减一
  • CMP OP1,OP2 这个比较指令,会用OP1-OP2然后判断标志位
  • |无符号|有符合|作用|
    |-|-|-|
    |JA|JG|大于|
    |JB|JL|小于|
    |JAE|JGE|大于等于|
    |JBE|JLE|小于等于|

  • 加法减法乘法除法指令
  • 进行加法运算,ADD [目的],[源]:[目的]=[目的]+[源]
  • 带符号加法运算,ADC [目的],[源]:[目的]=[目的]+[源]+CF
  • 进行减法的,SUB [目的],[源]:[目的]=[目的]-[源]
  • 带符号减法,SBB [目的],[源]:[目的]=[目的]-[源]-CF

  • 字符串比较指令

  • |命令|比较条件|
    |:-😐:-😐
    |REPZ/REPE CMPSB(CMPSW,CMPSD)|REPE是一个串操作前缀,它重复串操作指令,每重复一次ECX的值就减一一直到CX为0或ZF为 0 时停止,CMPSB是字符串比较指令,把ESI指向的数据与EDI指向的数一个一个的进行比较|
    |REPNZ/REPNE CMPSB(CMPSW,CMPSD)|REPNE是一个串操作前缀,它重复串操作指令,每重复一次ECX的值就减一一直到CX为0或ZF为 1 时停止,CMPSB是字符串比较指令,把ESI指向的数据与EDI指向的数一个一个的进行比较|

  • 字符串扫描

  • |命令|比较条件|
    |:-😐:-😐
    |REPZ SCASB|相等的时候重复,[AL]-[DI]比较查询di中是否有al中的字符,每比较一次di自动变化,指向上一个或下一个单元,若di中有x则跳出循环|
    |REPNZ SCASB|不相等的时候重复,[AL]-[DI]比较查询di中是否有al中的字符,每比较一次di自动变化,指向上一个或下一个单元,若di中没有x则跳出循环|


  • 移位指令
  • |指令|怎么移动|
    |:-😐:-😐
    |SHL|移左(高位弹出),移位后右边空出的位都补0|
    |SHR|移右(低位弹出),移位后左边空出的位都补0|
    |SAL|移左(高位弹出),移位后右边空出的位都补0|
    |SAR|把高位向低位移,空出的高位用最高位(符号位)填补|
    |ROL|移出的高位不仅要进入CF,而且还要填补空出的低位,循环型|
    |ROR|移出的低位不仅要进入CF,而且还要填补空出的高位,循环型|

  • |DOS层指令|(送到AH中)作用|
    |-|-|
    |01H|输入一个字符,字符在AL中存放|
    |02H|输出的东西放在DX中,显示输出一个字符|
    |09H|定义要显示的字符串,其字符串的结尾标志为 ‘$’ ,DS:DX=字符串的首地址,遇到 $ 结束|
    |0AH|输入字符串,DS:DX=缓冲区首地址|
posted @ 2019-10-29 22:48  野生的Lemon柠檬  阅读(266)  评论(0编辑  收藏  举报

呱呱呱呱呱🐸