汇编学习

汇编学习

  • 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=缓冲区首地址
上一篇:汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮


下一篇:王爽《汇编》检测9.1(1) | 若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?