X86汇编基础---操作系统真象还原

1. 实模式下的寄存器为16位宽。

2. 代码段寄存器:CS,数据段寄存器:DS,栈段寄存器:SS

3. 通用寄存器:AX,BX,CX,DX,SI,DI,BP,SP

4. 通用寄存器惯用法:ax:累加器;bx:基址寄存器;cx:计数器,控制循环次数;dx:数据寄存器;si,源变址寄存器;di,目的变址寄存器;sp,栈指针寄存器;bp,基址指针。

5. cs:ip表示下一条指令的地址,cs表示代码段寄存器,ip为段位偏移地址;ds:bx表示访问内存时地址表示方式,默认情况下内存寻址的段基址为ds,即不指明段基址的情况下。

6. 实模式下CPU的内存寻址方式:直接寻址,寄存器寻址,内存寻址。内存寻址又分为直接寻址和基址寻址,变址寻址,基址变址寻址。基址寻址表示用bx或bp作为段内偏移地址的基址,之后地址的变化以它为基础,如mov ax, [bx+1],其中bp长用于栈中数据访问,bx默认段寄存器为ds,bp默认段寄存器为ss; 变址寻址则改bx和bp为用di和si,默认段寄存器为ds。

7.函数调用时,先push操作将被调用函数入参压入栈中,再push操作将返回地址cs:ip或ip(取决于call指令)压入栈中,再bp压入栈中保存,再令bp为sp,此时bp为调用者栈与被调用者栈的分界线,通过bp便可以以访问数组的方式访问栈内数据。

8.实模式下的ret,两种使用方式:ret近返回,retf远返回,前者只从栈中恢复两个字节到ip中,后者从栈中恢复四个字节到cs:ip中,即后者表示被调用者与调用者不在一个段内

9实模式下的call,有四种使用方式:16位相对近调用  call near 立即数地址,near省略,编译器自动判断

                                                       16位绝对间接近调用 call 寄存器寻址或call 内存寻址

                                                       16位直接绝对远调用  call far 段基址(立即数):段内偏移(立即数)

                                                       16位间接绝对远调用 call far 内存寻址

10 实模式下的jmp,无条件跳转,五种使用方式: 相对短转移 jmp short 立即数(一字节), short可省略,编译器判断是short还是near

                                                                          相对近转移 jmp near 立即数(二字节)

                                                                          间接绝对近转移 jmp near 寄存器寻址或者内存寻址

                                                                          直接绝对远转移  jmp 段基址(立即数):段内偏移(立即数)

                                                                          间接绝对远转移  jmp far 内存寻址

11 标志寄存器   

12 有条件转移 jxx以标志寄存器中的状态为条件做判断是否跳转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值