初学汇编 - 第二章总结
Posted sstst
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学汇编 - 第二章总结相关的知识,希望对你有一定的参考价值。
ORIGINAL POST
此文总结第一、二、三单元所学。
因为前几节课没有去上,所以第一单元我可能不能非常正确地去总结,尽量按着老师的课件来看下去。
summary
Chap. I BASIS
第一章都是计算机基础,或者可以说计算机组成原理的超级简略版?
机器语言
silly binaries
计算机可以直接识别、执行。不是给人写的东西。
不同种类的计算机其机器语言是不相通的,按某种计算机的机器指令编制的程序不能在另一种计算机上执行。
汇编语言
silly string replacer
主体是汇编指令,使用助记符便于人记忆和使用。
机械语言是机械指令的集合,汇编语言是机械指令符号化。
每一种特定的汇编语言和其特定的机器语言指令集是一一对应的。(通用性还是较低)
计算机系统
有时间还是看看计算机组成原理吧。
存储器 存储单元
-
总线
还是叫成bus 直观。
如果说主板是一座城市,那么总线就像是城市里的公共汽车(bus),能按照固定行车路线,传输来回不停运作的比特。这些线路在同一时间内都仅能负责传输一个比特。因此,必须同时采用多条线路才能发送更多数据,而总线可同时传输的数据数就称为宽度,以比特为单位,总线宽度愈大,传输性能就愈佳。
PC上一般有五种总线*:
- 数据总线:在CPU与RAM之间来回传送需要处理或是需要储存的数据。
- 地址总线:用来指定在RAM(Random Access Memory)之中储存的数据的地址。
- 控制总线:将微处理器控制单元(Control Unit)的信号,传送到周边设备,一般常见的为USB Bus和1394 Bus。
扩展总线:可连接扩展槽和计算机。局部总线:取代更高速数据传输的扩展总线。
* Wikipedia 上说总线有五种,课本上只有前三种。
内存地址空间
虚拟地址空间?
现代的内存管理单元是以页的方式,分割虚拟地址空间的。通过总线,CPU将各类存储器当做一个逻辑存储器对待。
感觉类似于把各个存储器mount 到地址空间上,使其拥有一个唯一的地址(路径)。
Chap. II REGISTER
summery
寄存器
快 少 在CPU里
字长 位宽
字长:CPU在单位时间内能一次处理的二进制位数,反映出CPU内部运算处理的速度。
位宽:CPU通过外部数据总线与内存之间一次能够传送的数据位。
大概就是高速公路收费站和高速公路车道数的关系吧。
main registers
Four of them, AX, BX, CX, DX, can also be accessed as twice as many 8-bit registers.
4个:ax, bx, cx, dx
亦可使用ah, al 访问通用寄存器的高位和低位。
感觉main registers 翻译成通用寄存器怪怪的。
cs & ip
课本的编排是真的乱七八糟。
为什么第二章PPT第12页上说8086CPU的位宽是16位?
8086 数据总线16位, 地址总线 20位。
There are also three 16-bit segment registers (see figure) that allow the 8086 CPU to access one megabyte of memory in an unusual way. Rather than concatenating the segment register with the address register, as in most processors whose address space exceeds their register size, the 8086 shifts the 16-bit segment only four bits left before adding it to the 16-bit offset (16×segment + offset), therefore producing a 20-bit external (or effective or physical) address from the 32-bit segment:offset pair. As a result, each external address can be referred to by 212 = 4096 different segment:offset pairs.
也就是用
segment * 0x10 + offset = address
来实现IMB的寻址。
同时修改 cs ip
jmp segment:offset jmp segment:offset jmp segment:offset
只修改 ip
jmp register jmp register jmp register
不能用 mov ip, ax ,重要的事情说三遍
debug
常用指令
没啥好说的,有问题就敲?
- Register
查看寄存器 - Dump
查看内存 - Enter
修改内存 - Unassemble
反汇编 - Trace
单步执行 - Assemble
编写汇编
etc
段真的还是挺不错的一个结局方法。
在我学习汇编之前,就已经了解到了一个不错的C/C++反汇编工具 —— Godbolt 。喜欢的可以试一试。
references
- https://en.wikipedia.org/wiki/Intel_8086
- http://www.cnblogs.com/zyx20171346065/p/9696999.html
- https://zh.wikipedia.org/wiki/%E6%80%BB%E7%BA%BF
- https://en.wikipedia.org/wiki/Memory_address
- https://www.youtube.com/watch?v=yoLMOsxXgFw
- https://en.wikipedia.org/wiki/Word_(computer_architecture)
以上是关于初学汇编 - 第二章总结的主要内容,如果未能解决你的问题,请参考以下文章