本次笔记内容:
14.程序格式与伪操作-1
注:本节课更换为一名女老师。我找到了对应内容的课件,请见我于GitHub的CS笔记仓库。因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码。
本节课对应幻灯片:汇编语言程序设计-程序格式,第1页起。
文章目录
P3 汇编程序的功能
源程序实际上是 .asm 的 ASC 机器码源程序,称为汇编源程序。
.asm 文件产生目标文件 .obj
与列表文件 .lst
。列表文件也是一个文本,存储详细信息。
.asm 文件还可产生宏指令
,后面专门有一种会讲“宏汇编”。其是一些基本指令的结合。
P4 伪操作(伪指令)
之所以叫“伪”,是与之前讲的“硬”指令相对应的。
伪操作是汇编程序对源程序进行汇编时
处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。
P5 处理器选择伪操作
选择处理器。
比如很多汇编程序的开头,就是.386
,功能是选择处理器。
P6 段定义伪操作
区分程序中的代码段、附加段、数据段等等。
code
, data
不是关键字。
P7 汇编源程序的其他形式
其中,有main proc far
调用了一个子程序,并且为远调用,因此ret
为远返回。
P8 带堆栈段的汇编源程序
dup
为重复的意思,在第一个堆栈段中,开辟了200个字节。tos
是top of stack
,并非关键字,tos label word
是伪指令,将一个字word
赋给tos
,并且label
的意义为指向下一个要被赋予地址的地方,并且并不分配内存空间
。在后面的赋值中,将这个指针tos
指在堆栈栈顶外mov sp, offset tos
(紧挨着堆栈),这样一旦压栈,就进入堆栈。
P9-10
tos
位置如图。
即便如此定义,系统还是警告没有堆栈段
。
老师举了个例子(做了个演示),但是我的 ppt 上没有。
如图,会提示没有堆栈段
,为了解决这个问题,使用stack
关键字:stack segment stack
(后面的是关键字),有了这个关键字,也不需要手动为ss
和sp
赋初值了。
P11 C中定义数组
这页 ppt 显示了数组与其在堆栈段内存形式。
堆栈放入数据不一定通过压栈来进行。
P12 完整段定义的格式
段名 SEGMENT [定位类型][组合类型][使用类型]['类别']
...
段名 ENDS
如 ppt ,在 SEGMENT 后其实有很多选项可选。
(1)定位类型
指段起始地址
的条件;
(2)组合类型
,如 STACK 等, STACK 把相同名称的堆栈段组合在一起,没有碎片;
(3)使用类型
用“多少位”的形式;
(4)类别
指,连接时具有相同类别的内容连接在一起。
接着,老师举了一个例子(做了个演示), ppt 上没有。
P13-14 例
组合程序由两段子程序组成:proadd1.asm
,proadd2.asm
。
在开头,声明还未建立起的调用子程序。在proadd2.asm
中,定义了public proadd
,供外部调用。
两个程序的数据段同名,则子程序2对1进行覆盖。