汇编语言学习笔记06——第一个程序

一、思维导图

二、关键内容摘录


注意:因为每个人记忆与思维的差异,对知识的理解在难易性、熟练度和重要性上带来很大差异,这些笔记是从我的视野出发进行的归纳,有些内容我觉得简单或潜移默化中已经掌握,所以可能并没有在思维导图和内容摘录中体现;反之亦然,有些内容可能读者觉得没有必要在笔记中呈现,却可能恰恰是我的短板或者偏重的地方。

一、思维导图

二、关键内容摘录

1、编写汇编程序——编译——连接——执行程序

2、可执行程序包含两部分内容:程序(机器码和源程序中定义的数据)、相关描述信息(如:程序多大,占用多少内存空间)

3、操作系统依照可执行文件的描述信息将可执行文件中的机器码和数据加载入内存,并进行相关初始化(比如设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。

4、一段示例程序

assume cs:codesg

codesg segment

    mov ax,0123h
    mov bx,0456h
    add ax,bx
    add ax,ax

    mov ax,4c00h
    int 21h

codesg ends

end

end:汇编程序结束标记,必须在结尾处存在。注意与ends 区分,ends是与segment成对使用的。

assume:该伪指令将特定用途的段和相关的段寄存器关联起来。

5、伪指令:

段名  segment
          。
          。
          。
段名  ends

end   

6、标号。汇编程序中除了汇编指令和伪指令外,还有一些标号,比如“codesg”。一个标号指代了一个地址。比如codesg在segment的前面,作为一个段的名称,这个段的名称将被编译、连接程序处理为一个段的段地址。

7、返回指令

mov ax,4c00h

int 21h  

#这两句实现的功能是程序返回。

8、关于连接的作用

  • 当源程序很大时,可以将它们分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接在一起,生成一个可执行文件。
  • 程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件。
  • 一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行信息。所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

9、完成一个汇编程序从写出到执行的全部过程:

 

10、用debug调试程序的加载顺序是:command(将一个可执行文件中的程序加载入内存,并设置CS:IP指向程序入口)加载debug.exe,debug.exe加载“被调试程序.exe”;返回顺序是:从.exe程序返回到debug(程序调试结束),从debug返回到command(-q退出debug)。debug也是将程序加载入内存,设置CS:IP指向程序入口,但是debug并不放弃对CPU控制。debug将程序从可执行文件加载入内存后,cx中存放的是程序的长度(程序字节个数)。

11、DOS系统中.exe文件中的程序的加载过程。

 

12、PSP(程序段前缀program segment prefix是什么,有什么作用?

一般来说,PSP是256个字节,当程序生成了可执行文件以后,在执行的时候,先将程序调入内存,这个时候DS中存入程序在内存中的段地址,紧接着是程序的一些说明,比如说程序占用多大空间等等,这就是PSP,一般PSP占256个字节,然后才是真正的程序地址,将CS指向这里,IP设为0000,为什么一般CS要比DS大10H,就是因为这个原因。简单说:DS存放的是程序段地址,由于PSP的存在,真正要执行的地址是DS再加上256个字节,真正的地址是DS*16(左移4位)+256(数据段段内偏移地址),化简一下:DS*16+0+16*16=16*(DS+16)真正的地址又可以写成:cs*16(左移4位)+0(代码段段内偏移地址),所以CS相当于DS+16,化成十六制是DS+10H。相关内容可见:https://baike.baidu.com/item/%E7%A8%8B%E5%BA%8F%E6%AE%B5%E5%89%8D%E7%BC%80/2173868?fromtitle=psp&fromid=16689743&fr=aladdin

13、关于bytes symbol space free的讨论:http://bbs.csdn.net/topics/60302518

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值