《汇编语言》-王爽 阅读笔记 一个让你快速了解每一节在讲什么的笔记(3~4章)

第三章

3.1 内存中字的存储

8086CPU中用16位寄存器来存储一个字。采用小端法,例如:

数据 20000(4E20H) 4E是高位 20是低位
0	20H
1	4EH

3.2 DS和[address]

还记得2.9节的段地址寄存器CS吗?这一节讲述了8086CPU有一个DS寄存器,通常用来存放要访问数据的段地址。

(CS用于指示下一条指令的地址,而DS用来存放要访问数据的段地址?)

mov bx,1000H
mov ds,bx	#不能直接把数据放入寄存器,需要先送入一个一般的寄存器,再将一般寄存器的内容送入DS
mov al,[0]

[...]表示偏移地址,段地址直接从DS中读取。将DS:0送入AL

3.7 CPU提供的栈机制

8086CPU中也是栈的顶部地址最小。

考虑两个问题:1. CPU是如何知道哪段内存是当作栈来使用的?2. CPU是怎么知道哪个内存单元是栈顶的?

对于第一个,我们设想CPU中应该有记录栈顶上限和栈底的寄存器,这样在栈满入栈和栈空出栈时,可以判断行为是否合法。但是对于8086CPU,它并没有这样的寄存器,也就是说它需要我们在编程的时候自己操心栈顶吵界的情况。

对于第二个问题,回答是:8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址放在SS中,偏移地址放在SP中。任意时刻SS:SP指向栈顶元素。

因此,PUSH和POP都是先移动SP,再传送值。

3.10 栈段

是一个小总结,到此为止,我们经历了存放数据、指令(代码)、栈的内存,如果一个段用于存放数据、指令(代码)、段,那么它们分别被定义为”数据段”、“代码段“和”栈段“。

对于数据段,段地址在DS中,使用mov, add, sub等指令时,CPU就将数据段中的内容当作数据来访问;

对于代码段,段地址在CS中,将段中第一条指令的偏移地址放在IP中,CPU会将CS:IP内存中的数据当成指令来处理;

对于栈段,段地址在SS中,将栈顶单元的偏移地址放在SP中,在执行push, pop指令时,CPU将栈段当作栈空间使用。

因此CPU是如何看待内存中的数据,是根据段地址和偏移地址决定的。

实验2

第四章

章节基本介绍

本章准备编写完整的汇编语言程序,用编译器将它们编译成可执行文件。

4.1 源程序从写出到执行的过程

  1. 文本编辑器编写汇编语言
  2. 对源程序进行编译连接:使用汇编语言编译程序对源程序进行编译->目标文件;再用连接程序对目标文件进行连接->可执行文件
    • 可执行文件中的程序和数据,指的是汇编程序翻译过来的机器码和源程序中定义的数据
    • 可执行文件中的描述信息,例如程序有多大、要占用多少内存空间等
  3. 执行

4.2 源程序

4.2.1 伪指令

1.3中提到汇编语言的组成:汇编指令、伪指令、其他符号。现在介绍一下它们。

汇编指令,可以被编译为机器指令,最终被CPU执行;伪指令,没有对应的机器指令,也不就不会被CPU执行。伪指令的作用是指导编译器来进行相关的编译工作。

先介绍3种伪指令:

1. segment和ends是一对,它们定义了一个段,分别表示段的开始和结束,XXX表示的是段名。
XXX segment
	...
	...
	...
XXX ends
2. end 表示汇编程序的结束,编译器遇到end就结束对源程序的编译。
3. assume 它假设某一个 段寄存器 与程序中某一个 段XXX 相关联。

4.2.2 程序和源程序

posted @ 2020-12-28 20:03  团叽  阅读(91)  评论(0编辑  收藏  举报