(五)assume、ends、segment、end、标号和返回--汇编笔记

汇编语言

Posted by YiMiTuMi on March 16, 2020

一个源程序从写出到执行的过程

 1)编写汇编程序。

 2)对源程序进行编译链接,生成可执行文件。

 3)执行可执行文件中的程序。

assume cs:codesg //假设 codesg是个代码段,所以将codesg和CPU的段寄存器cs联系起来。

codesg segment  //segment 伪指令:定义一个段,段的名称为codesg,这个段从此开始

	mov ax, 0123H
	
	mov bx, 0456H

	add ax, bx

	add ax, ax

	mov ax, 4c00H //返回的程序段

	int 21H

codesg ends  //ends 伪指令:名称为codesg的段到此结束

end 

伪指令是由编译器来执行的命令,编译器根据伪指令来进行相关的编译工作。

segment和ends

segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。

segmentends 的功能时定义一个段,segment 说明一个段开始,ends说明一个段结束。一个段必须有一个名称来标识,使用格式为:

段名 segment 
	.
	.
段名 ends

一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。一个源程序中所有将被计算机所处理的信息:指令、数据、栈,被划分到了不同的段中。

一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。

end

end 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令end,就结束对源程序的编译。程序写完了,要在结尾处加上伪指令 end。否则,编译器在编译程序时,无法知道程序在何处结束。

end的作用是标记整个程序的结束。

assume

assume伪指令的含义为“假设”。他假设某一段寄存器和程序中的某一个用segment..ends定义的段相关联。

asssume cs:codesg //假设 codesg是个代码段,所以将codesg和CPU的段寄存器cs联系起来。

assume将有特定用途的段和相关的段寄存器关联起来。

格式:

assume 段寄存器:要关联的segment..ends定义的段

源程序中的“程序”

用汇编语言写的源程序,包括伪指令和汇编指令,我们编程的最终目的是让计算机完成一定的任务。源程序中的汇编指令组成了最终由计算机执行的程序,而源程序中的伪指令是由编译器来处理的,它们并不实现我们编程的最终目的。这里所说的程序就是指源程序中最终由计算机执行、处理的指令或数据。

以后可以将源程序文件中的所有内容称为源程序,将源程序中最终由计算机执行、处理的指令或数据,称为程序。程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中。

标号

一个标号指代了一个地址。比如“codesg”就是一个标号。codesgsegment的前面,作为一个段的名称,这个段的名称最终将被编译、链接程序处理为一个段的地址。

程序的结构

源程序是由一些段构成的。我们可以在这些段中存放代码、数据、或将某个段当作栈空间。

任务:编程运算2^3。

 1)定义一个段,名称为abc。

abc segment
	.
	.
abc ends

 2)在段中写入汇编指令实现功能,并指出程序在何处结束。

abc segment

	mov ax, 2
	
	add ax, ax
	
	add ax, ax

abc ends

end

 3)abc被当作代码段来用,所以,应该将abc和cs联系起来。(完成)

assume cs:abc

abc segment
	
		mov ax, 2
		
		add ax, ax
		
		add ax, ax
	
abc ends
	
end

程序返回

一个程序P2在可执行文件中,则必须有一个正在运行的程序P1,将P2从可执行文件中加载入内存后,将CPU的控制权交给P2,P2才能得以运行。P2开始运行后,P1暂停运行。当P2运行完毕后,应该将CPU的控制权交还给使他得以运行的程序P1,此后,P1继续运行。(单任务操作系统)

一个程序结束后,将CPU的控制权交还给使它得以运行的程序,我们称这个过程为:程序返回

如何返回呢?应该在程序的末尾加上返回的程序段。

前面程序的程序返回指令:

mov ax, 4c00H

int 21H

实现了程序返回功能。

通知编译器一个段结束    段名 ends               伪指令       编译时,由编译器执行

通知编译器程序结束     end  伪指令              编译时       由编译器执行

程序返回              mov ax, 4c00H int 21H   汇编指令     执行时,由CPU执行

夜来香 – 等你归来