《汇编语言(第三版)》王爽笔记(4)第一个程序

第四章 第一个程序

一个源程序从写出到执行:
文本编辑器编写(源程序文本文件asm) -> 用汇编语言编译程序进行编译(目标文件obj)连接(可执行文件exe)-> 操作系统中执行
可执行文件包含两部分内容:程序(经过翻译得到的机器码)和数据、相关描述信息(程序所占空间大小等)。可执行文件均为二进制。
操作系统执行文件时按照描述信息将机器码和数据载入内存并初始化,再由CPU执行。
伪指令:与汇编指令不同,伪指令没有对应机器码,不被CPU执行。编译器认识伪指令。
(1)XXX segment ...... XXX ends
segment 和 ends 定义一个段,成对使用。每个段需要有一个段名,即XXX。一个汇编程序由多个段组成,对应前面的数据段、栈段以及代码段。
(2)end
汇编程序结束标记,编辑器看到end停止编译。不要与ends(end segment)混淆.
(3)assume
‘假设’某一段寄存器和程序中定义的某一个段相关联。
assume cs:codesg 即为将代码段codesg和段寄存器cs关联。

段名又叫做标号,如codesg,标号最终会被编译器处理为地址。

与在debug中写的指令不同,汇编程序要有结构,即由不同段组成。

程序返回:程序运行结束后,将CPU控制权交还给使它得以运行的程序。eg 当需要执行程序p2时,需要一个正在被CPU运行的程序p1调用p2加载进内存,并在执行完毕后将执行权交还给p1。

mov ax,4c00
int 21   
//可实现程序返回

使用编译连接工具不同,跳过讲述如何运行章节。
使用汇编语言编程,就要用到编辑器(notepad)、编译器(masm)、连接器(link)、调试工具(Debug)

上述神奇的p1是什么程序?

在这里插入图片描述
想在DOS中执行p2时,正在运行的command将p2载入内存,command设置CPU的CS:IP指向p2的第一条指令,p2运行结束后返回到command。

可以使用debug的单步执行观察程序的运行过程.

exe文件被加载的过程:找到一段起始地址的偏移地址为0的容量足够的空闲内存区SA:0000,在这段内存的前256个字节创建一个被称为程序段前缀(PSP)的数据区,在PSP后面将程序装入。于是有:
空闲内存区 SA:0
PSP区 SA:0
程序区 SA+10H:0
将该内存区的段地址传递给DS,初始化其它相关寄存器,将CS:IP指向程序的入口。(略去关于重定向的叙述)

要用p命令执行int 21指令。

在debug中执行程序,是debug将程序载入内存,程序运行结束后返回debug,Q命令退出debug,回到command。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值