2011-04-02

写在前面:

真心的感谢,每一个人,不管你认识或者不认识我。

感谢,在学习的日子里对我不断的提问很有耐心回复的网友们;感谢,我身边的不断鼓励和聆听我的朋友们;感谢,我的爸爸妈妈;感谢每一个相信我,支持我的人;如果你在看这篇文,也感谢你,感谢你的浏览,当然csdn也许会因为你的访问给我加点积分神马的。

所谓汇编,以前一直以为汇编是0和1组成的代码神马的,不过幸好没人问,不然就闹大笑话了。

这个学期,修日语,还要很艰巨的英语任务。所以花在汇编上的时间,大多在深夜的时间花在汇编上的,头脑偶尔会自动中断。就像昨晚发帖子问问题,我就总在关键地方打错字,然后给我回复的网友们就会问。今天看到自己的那些打字错误,实在是囧。

其实,自己想写的也不完全是汇编技术方面的总结,只是想记录自己在学习汇编的路程中,需要注意的重点知识,就当做知识框架,还有一些自己菜菜的问题,学习心态的转变,以及由学习汇编产生的一些想法和思路的拓展。

回归正文:

学过c和c++以及数据结构,学习汇编用的是清华大学 的 沈美明 温冬婵编著的《8086汇编语言程序设计》,这是高校计算机专业的普遍用书吧。一周,我有两节汇编课和偶尔的汇编上机实验。所以隔一段时间,我会回顾一下最近学习的知识,可能有从书上直接copy的,还有解决下上机问题神马的。

用的编辑器是Masm for windows 2011,和win-masm。

个人更喜欢win-masm。因为课程方面更侧重16位的8086,所以对32位的80386及其以上的问题。如果遇上了问题,我会解决,但是重心以16位的为重。对概念什么理解有错的地方,希望大家指正。代码非调试编译通过的,不会放在上面的。

数制转换神马的就不罗嗦了。

8086是intel1978年推出的微处理器芯片。大规模集成电路技术发展后,运算器和控制器放在同一芯片上就是 Central Processing Unit(CPU),8086微处理芯片就是那时的CPU。

微处理芯片的性能系数:

晶体管数:说明器件的集成度。

主频:芯片用的主时钟频率,=>计算机运行速度。由于处理器体系结构差别,同样主频产生不同速度。

数据总线:内部(宽度所指)和外部。

地址总线:访问存储器的最大范围。20位,可访问2^20个存储单元,即1M。32位=4G个存储单元。

层次结构的存储器组织:高速缓存储存器(cache) 主存储 外存储

*cache,好像记得JM当时离散数学的时候总爱提冯诺依曼机的创始人有个叫chechi(发音类似),说他用数学的方法,建立了最初的数据存储的原型,所以就baidu了一下,冯诺依曼机的创始人:约翰·阿塔纳索夫John Vincent Atanasoff (阿塔纳索夫最终被认为是电子计算机的真正发明人,到1973年。第一台通用的电子计算机是由阿塔纳索夫设计、由莫奇利和艾克特负责制成的。)、莫奇利 Mauchly,John William (他是第一个制作计算机内存的人,用的方法是水银延迟线。)、冯·诺依曼 发明时间:1946年    硬件如晶体管设计方面vincent和mauchly还有艾克特有些纠结的官司,但Mauchly制作内存,所以老师所讲的应该是Mauchly。

8086只有实模式,80286及其以上有保护模式。在保护模式下,机器可提供虚拟存储的管理和多任务的管理机制。

hardware = cpu + memory +I/O

CPU = 运算器 + 控制器

I/O = I/O device + 大容量存储器

*硬盘属于 输入输出子系统,而memory是说我们usu say 内存。

系统总线 = 数据线 + 地址线 + 控制线(动作方向)

software = 系统(core: OScore:monitor常住监督程序)) + 用户

monitor 开机存于内存,从用户接受命令,使操作系统执行相关动作。

I/O driver,file management,text editor,translation就不罗嗦了。

CPU=算数逻辑部件ALU(arithmetic logic unit)+控制逻辑+工作寄存器

重点一:寄存器组(程序可见/不可见)

①   通用寄存器:

AX(accumulator,I/O外部传送),BX(基址寄存,base)

CX(count移位、LOOP、串处理:隐含的计数器),DX(data,+ax做高位)

SP(stack pointer)、BP(base pointer)=>+SS存储器寻址,偏移地址

DI(destination index目的)、SI(source 源变址)=>+DS存储器寻址,偏移地址;自增或自减,便于变址;串处理:SI+DS数据段,DI+ES附加段 寻址

②   专用寄存器:

IP(instruction pointer+CS,指向下一条指令,控制寄存器)

SP(stack,栈顶的偏移地址)

FLAGS(or PSW,程序状态寄存器:条件码、控制标志、系统标志)

条件码:OF(OV/NV) SF(sign PL/NG) ZF(ZE/NZ) CF(CY/NC) AF(辅助C:AC/NA) PF(奇偶:PE/PO odd) ;1/0

控制标志:DF 1 SI DI 自减 高地址->低地址

(略)系统标志:TF(-t,陷阱) IF(中断 1允许中断) IOPL(I/Oprivilege) NT(嵌套任务) RF(重启) VM(虚8086) AC(对准检查方式位 1,2,4,8)。。。。

③段寄存器:专用于存储器寻址

CS(code) DS(data) SS(stack) ES(extra) .386 FS GS (extra)

Memory:

物理地址,低位字节(低地址),高位字节(高地址)

偶地址访问,按字读取,奇字节访问分两次,内容取之不尽,可重复取出

①    实模式

8086地址总线20位,存储器分段(64K),段首地址不任意,1M = 64段

物理地址 = 16d * 段地址 + 偏移地址(EA)

各段允许重叠,不允许冲突

*回顾

CS(IP)  SS(BP,SP)  DS(BX,DI,SI,立即数)  ES(DI串指令)  .386 FS GS(NONE)

②    保护模式

逻辑地址 段地址:偏移地址 =机器=> 物理地址

描述符:基地址 界限 访问权 附加字段

Base:段的起始地址 memory16MB内存中任何位置 80286:24 80386:32

Limit:段长度80286:16 1B-64KB

粒度位 G =0/B:1B-1MB; =1/PAGE:1*4KB-1M*4KB

Acess right:8位 说明该段在系统中的功能,控制信息

P 存在位:=0装入物理存储,基地址和界限值有效;=1未装入,无效

DPL 描述符特权级字段 2位 0-3(H) 保护模式:特权测试

S 段描述符位 =0:系统段 =1:DS,SS,CS

E 可执行段 =0不可执行,DS  =1 可执行,CS

③    区别

保护:偏移32位,最大段长可扩大到4G

外设:外设寄存器 数据、状态、命令  (Port)

便于使用外设:BIOS(只读存储器ROM)  DOS(开机时由磁盘装入存储器)

重点二:寻址方式

数据有关:

①    立即寻址方式(代码段中),②寄存器寻址方式(通用寄存器)

EA = 基址BX/BP+(变址SI/DI×比例因子1/2/4/8)+ 位移量16N/32 1/2/4/8

访问存储器的:

③    直接寻址方式  MOV AX,DS:[2000H]  在编辑器中必须加段名,否则是立即数

④    寄存器间接寻址方式

MOV BX,1110H

MOV AX,[BX]  []只能是BX,BP(SS),SI,DI  32:通用register ESP EBP(SS)

可以跨越前缀

⑤    寄存器相对寻址方式

COUNT DW 1,2,3,4  ;注意count是dw,所以用ax;如果是db,需要用ah

MOV SI,0H

MOV AX,COUNT[SI]

MOV AX,[COUNT+SI]  ;与上条指令同样的效果

可以跨越前缀

⑥    基址变址寻址方式

MOV AX,[BX][SI]

MOV AX,[BX+SI]

⑦    相对基址变址寻址方式

MOV AX,COUNT[BX][SI]

MOV AX,COUNT[BX+SI]

MOV AX,[COUNT+BX+SI]

常用于对于二维数组的寻址,为堆栈处理提供了方便,BP可以指向栈顶

.836及其后

⑧    比例变址寻址方式 2,4,8字节的数组,可用比例因子直接转换下标为变址值

⑨    基址比例变址寻址方式

⑩    相对基址比例变址寻址方式

386的例子有点小问题,和指令一起说吧

与转移地址有关的寻址的方式:确定转移指令以及CALL指令的转向地址

①    段内直接寻址

转向当前IP内和指令中指定的8位(短跳转)或者16位(近跳转)位移量之和

JMP NEAR PTR PROGIA   ;16 PROGIA是偏移地址

JMP SHORT QUEST      ;8 QUEST是偏移地址

②    段内间接寻址

JMP BX

JMP WORD PTR[BX+TABLE+位移量] ; WORD PTR转向地址是字的有效地址

段内转移:直接把取得的转向地址放在IP中

③    段间直接寻址

JMP FAR PTR NEXTOUTING    ;.386修改EIP和CS的内容

④    段间间接寻址

JMP DWORD PTR[INTERS+BX]  ;直接变址寻址方式(存疑)

初学(一):不积跬步,无以成千里 【基础知识必备】相关推荐

  1. 不积跬步无以至千里[转]

    不积跬步无以至千里<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...

  2. 熊军:不积跬步 无以至千里 技术路上没有捷径

    大家好,今天是一周新的开始,继续给大家带来ORACLE ACE的人物采访.今天的采访嘉宾是熊军先生(ID:magic007),熊军先生一直从事Oracle数据库专业技术服务工作,有近10年的Oracl ...

  3. oracle左补全函数,Oracle 左侧补齐函数lpad 函数 (不积跬步,无以至千里)

    Oracle 左侧补齐函数lpad 函数 (不积跬步,无以至千里) (2017-10-08 16:24:41) 函数介绍 lpad函数从左边对字符串使用指定的字符进行填充.从其字面意思也可以理解,l是 ...

  4. 积跬步而至千里,积小流而成江海

    2011年2月16日,开通了CSDN的博客,坚持每隔一段时间写一写文章,把自己在工作中碰到的一些问题摊上来讨论讨论,同时也为以后碰到同类问题提供快速检索. 深以为技术的积累不是一天两天的事,冰冻三尺非 ...

  5. 【无标题】积跬步,以致千里;积小流,以成江海。

    1.自我介绍 大家好!我是来自西安工程大学计算机类的大一学生.上学期已经学习了C语言,但是发现自己的代码编程能力并没有多大提升,理论知识基础也还不够扎实.之前也在github中提交过代码.但是没有在C ...

  6. 劝学:不积跬步,无以至千里,不积小流,无以成江海.

    领略古人智慧. 不积跬步,无以至千里,不积小流,无以成江海.骐骥一跃,不能十步,驽马十驾,功在不舍.--<荀子·劝学>

  7. 不以跬步无以致千里——Day1

    反转链表 题目面试描述:输入一个链表,反转链表后,输出新链表的表头. 示例1 输入: {1,2,3} 返回值: {3,2,1} 解题分析: 1.定义一个前驱节点pre,初始值为null,在定义一个cu ...

  8. gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer(不积跬步无以至千里)

    -fomit-frame-pointer 在优化时候被启用,带来了效率的提升.看到一篇比较详细记录编译选项的文章,转发一下,同时给自己作一下备忘. 少优化->多优化: O0 -->> ...

  9. 不积跬步无以至千里,我与CSDN不平凡的2021年

    文章目录 一.前言 二.收获 2.1 CSDN热搜博客 2.2 CSDN年度回忆录 2.3 入住CSDN讲师 2.4 B站千粉UP主 2.5 新星计划第二季上榜 三.学习 四.改变 4.1 自己的定位 ...

  10. 不积跬步 无以至千里:我是如何进行“精实创业”的

    编者按:本文由轻博客Catfan创始人黎言卓撰写,他的创业就是一个人在战斗.他目前的身份包括程序员,美工,设计师,翻译,管理员.Catfan运营到现在差不多快两年了,但总开支只耗费了不到5,000元. ...

最新文章

  1. python爬虫实例解析-Python(爬虫)- 动态加载案例分析
  2. HDU 1711 Number Sequence(算法验证)
  3. File类及相关方法介绍
  4. springcloud 与springboot的依赖关系以及版本的选择
  5. 面向对象,面向服务(转)
  6. vs项目中头文件(.h)静态库(.lib)和 动态库(.dll )的路径和配置
  7. html表格按钮相对位置不变,表格中如何使td或div相对定位在某一行上面
  8. python中的Lambda表达式/函数
  9. 6-1 二叉搜索树的操作集 (30 分)
  10. Qt Pro语法总结
  11. 关闭linux系统命令是什么,linux shutdown关闭系统命令使用介绍
  12. VSS的基本使用操作介绍
  13. ignite mysql 持久化_2 ignite关键特性
  14. python图片变清晰的软件_Python功能确实非常强大!不止PS可以美化照片Python也可以!满分...
  15. 《腾讯传》三、马化腾与“幸运女神”那些令人脸红的事
  16. 湖南师范大学学科综合评价计算机,师范类高校自主招生/综合评价相关问答,2020届参考...
  17. ADS1115 应用指导
  18. 使用IMS搭建LMS系统(Logistics Management System 物流管理信息系统)
  19. PythonJava版【LeetCode】简单题答案整理01
  20. 【求助】BEXCEL文件如何编辑?

热门文章

  1. Head First (1) - 春江水暖鸭先知
  2. 【级数求和】C语言解析
  3. IIS中应用程序池和站点通过命令启停方法
  4. python模块包教学_python模块和包
  5. Android 仿手机通讯录页面
  6. 他为何放弃工程局工作,也要转行学python,还拿下17.5K的offer
  7. ArrayList的last方法
  8. flowable流程实例管理接口
  9. 微信的聊天记录删除了还能恢复吗
  10. 剑指offer 24. 反转链表