注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

xu3stones的技术博客

OS >> Virtualization >> Cloud

 
 
 

日志

 
 

操作系统学习笔记(七)-复习汇编的一些心得  

2012-11-30 21:56:14|  分类: OS入门知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
汇编课程的研究重点在于如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作;
汇编指令是机器指令便于记忆的书写格式,即机器码的助记符;
伪指令没有对应的机器码,它是由编译器执行的,计算机并不执行,+、-、*、/等也是由编译器识别,没有对应的机器码;

若想同时修改CS:IP的内容,可用jmp 段地址:偏移地址的指令来完成,如jmp 2AE3:0B16;
若想仅修改IP的内容,可用jmp 某一合法寄存器来完成,如jmp ax
代码段首地址可定是10H的整数倍,比如10090H,而不可能是10009H;

如何使得代码段中的指令被执行呢?必须要将CS:IP指向代码段中的第一条指令,所以可用JMP指令;

Debug的使用:
1、使用R命令,查看寄存器的值;
2、使用D 段地址:偏移地址 来查看内存中的内容,一次查看128个字节;
3、使用U 段地址:偏移地址 来查看反编译的汇编代码;
4、使用T命令,单步执行;
5、使用A 段地址:偏移地址 来写入汇编代码;

由于X86CPU特殊的硬件结构,所以不允许将数据直接送入到段寄存器,所以mov ds,1000h是非法的;

X86CPU的入栈和出栈操作都是以字为单位进行的,如push ax,pop bx等;

assume,segment,ends,end等是MASM的伪指令,对于NASM编译器来说无任何作用,伪指令是由编译器来执行的,不是由CPU来执行的,所以不同编译器支持的伪指令不同。。

链接的作用:(1)当源程序很大时,可以将它分为多个源程序来编译,然后把多个目标文件链接到一起;
(2)程序中调用了某个库文件中的子程序时,需要将这个库文件的目标文件和这个程序的目标文件链接到一起;
call和ret指令都是转移指令,都是修改IP的指令,或者同时修改CS和IP,

CPU执行ret指令时相当于进行pop IP
CPU执行retf指令时相当于进行pop IP,pop CS;

CPU执行call near 标号指令时相当于进行 push IP,jmp near ptr 标号;
CPU执行call far 标号指令时相当于进行push CS,push IP,jmp far ptr 标号;

中断:CPU停下正在执行的指令序列,转去处理中断信息;

中断过程:1)get n(取得中断类型码);
  2)pushf(标志寄存器入栈);
  3)tf=0,if=0(设置标志寄存器的第八位TF和第九位IF的值为0);
  4)push cs(CS入栈);
  5)push ip(IP入栈);
  6)(ip)=(n*4),(cs)=(n*4+2)(从内存地址为中断类型码*4的一个字单元读取内容赋给IP,从中断类型码*4+2的一个字单元读取内容赋给CS).

中断向量表占用系统内存的最低1KB空间,但是系统中断远没有256个中断,所以0000:0200~0000:02ff的256个BYTE是空的,可以存放用户中断处理程序;

nasm与masm的不同之处:

1)nasm大小写敏感;
2)取内存地址的内容和取变量的内容都要加【】;
3)nasm记不住变量的类型,所以在mov指令中如果目的操作数不是寄存器,而是变量或者内存地址,则需要显示的标明类型;
4)nasm没有assume伪指令;
5)声明空的存储空间不用dup,而用resb,resw,resd等

nasm支持的伪指令:
1)db,dw,dd,dq,dt等声明类型的;
2)resb,resw,resd等声明未初始化空间的;
3)equ,声明常量
4)times,buf times 100 db 0
5) $,当前代码行的地址;Jmp $,表示无限循环;
6)$$,当前段首地址;$-$$表示当前代码在段内的偏移
  评论这张
 
阅读(71)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017