汇编语言3之汇编程序

本文详细介绍了汇编语言程序的编写、编译、链接和执行过程。从源代码开始,经过编译器转换成汇编指令和伪指令,形成包含代码和数据的可执行文件。程序的运行涉及段的定义,如代码段,以及如何通过段寄存器和偏移地址在内存中定位。程序的返回机制确保了程序执行完毕后能返回到调用环境,例如DOS程序的退出。此外,还讨论了操作系统如何为程序分配内存,以及程序在内存中的布局,如代码段位于段寄存器偏移0处。
摘要由CSDN通过智能技术生成

过程:

  • 编写源代码

  • 编译链接源代码生成可执行文件,可执行文件包含两部分内容

    程序和数据、相关描述信息

    源程序

    汇编指令

    伪指令:指令没有对应的机器码,由编译器识别和执行

    定义一个段

    一个汇编程序有多个段组成,这些段用来存放代码,数据或当做栈空间来使用。

    一个有意义的汇编程序至少用一个代码段

]

segment和ends:

segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪令。segment和ends的功能是定义一个段,segment表示一个段的开始,ends说明一个段的结束,一个端必须有一个名称来标识,使用格式为:段名 segment以及段名 ends

end:汇编程序的结束,编译器检测会结束编译,这是一个伪指令

assume:

指定自定义的段名字对应的段类型(数据段、代码段等)

源程序中的程序:

源程序:源程序文件中的所有内容称为源程序

程序:最终由计算机执行处理的指令或者数据,称为程序,也就是汇编指令,不包含伪指令

标号

一个标号指代了一个地址

比如上面图的codesg就会编译成一个地址

程序的返回:

一个dos命令窗口可以看做是一个单线运行的程序,当运行.exe文件的时候,首先dos程序会被挂起,然后进入到用户运行的程序,运行用户代码,运行后不能卡死在用户代码中,必须提供程序的返回机制,也就是继续刚刚被挂起的dos程序。通过下面的代码:

mov ax,4c00H
int 21H

这段代码使得程序运行完之后返回到原来的位置

assume cs:codesg
codesg segment
start://入口标号,名字可以所以,编译器会根据end后面的值确定
		mov ax, 0123H
		mov bx, 0456H
		add ax, bx
		add ax, ax
	mov ax,4c00h
	int 21h
codesg ends
end start

程序的运行过程

]

  • 操作系统会在内存中为运行的程序分配足量的内存空间
  • 这段内存空间中的,代码段寄存器偏移数据段寄存器10H,段寄存器数值偏移10H实际上对应到物理地址就是100H(因为在寻址的过程中实际地址=段地址*16+偏移地址),也就是十进制下相隔了256字节,这里用于存储程程序的前缀PSP,在运行的过程中dos会通过这一段空间中的程序进行通信。
  • 我们的程序指令会在代码段寄存器偏移0处【段寄存器:0】开始记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值