汇编学习
汇编学习
- 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=缓冲区首地址|
这是小睿的博客,如果需要转载,请标注出处啦~ヾ(≧▽≦*)o谢谢。