汇编学习
- 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=缓冲区首地址