汇编基础---

本文介绍了寄存器如SS、SP、DS、CS等的基本功能及其在栈操作中的作用,详细解析了PUSH和POP指令的工作原理,并阐述了如何通过汇编语言定义段和程序返回的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

寄存器:

SS:栈段寄存器,存放栈顶的段地址。
SP:寄存器,存放栈的偏移地址。
DS:数据段寄存器,存放数据。
CS:代码段寄存器,存放代码。
CS:IP:基地址:偏移地址。
SS:SP:任意时刻,指向栈顶元素。
ES:扩展段寄存器。
BX:灵活的寄存器。

PUSH指令的执行步骤:

 1. SP=SP-2
 2.SSSP指向的字单元中送入数据

POP指令的执行步骤:

 1.SSSP指向的字单元中读取数据
 2. SP=SP+2

一个栈段的最大可以设为64KB。这是因为:PUSH和POP等指令在执行的时候,只修改SP的值,SS的值是固定的。固定一个栈段地址,然后修改其栈偏移地址。所以栈顶的变化范围为0~FFFFH,从空栈的时候SP=0,一直压栈,直到栈满的时候SP=0;如果继续压栈,栈顶将环绕(空栈的时候一直压栈,SP从0一直加到FFFFH,然后再加,栈满,SP又变成0,然后继续压栈,SP又从0开始加,所以栈顶会环绕)。覆盖掉原来的值,所以栈段的最大容量为64KB。

我们可以将一段内存定义为一个段,用一个段地址指示段,偏移地址访问段内的单元。
数据段”:自定义的存放数据的段。数据段的段地址放在DS中。
代码段”:自定义的存放代码的段。代码段的段地址放在CS中。段中第一条指令的偏移地址放在IP中。
栈段”:自定义的存放栈的段。栈段的段地址放在SS中。栈顶单元的偏移放在SP中。

CPU将内存中的某段内容当成代码是因为CS:IP指向了那里。CPU将内存中的某段内容当成栈是因为SS:SP指向了那里。

源程序

在汇编语言的源程序中,包含两种指令:伪指令和汇编指令,汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终被CPU所执行。而伪指令是没有与之对应的机器码的,伪指令只能由编译器来执行,编译器根据伪指令来进行相关的编译工作。
下面是一个简单的源程序:

assume CS: codesg	
codesg segment
start:  mov AX, 01234
		mov BX, 04567
		add AX, BX
		add AX, AX
		
		mov AX, 4C00H
		int 21H
codesg ends
end

在这个程序中有三个伪指令:

(1)

 XXX segment
 ……
 ……
 XXX ends

segment和ends是一对成对使用的伪指令,是写可被编译的汇编程序时必须要使用到的一对伪指令,这对指令的功能是定义一个段,segment说明一个段的开始,ends表示一个段的结束。一个段必须有有一个名称来标识,XXX就是该段的标识。在该程序中codesg就是这个段的标识。codesg segment表示定义一个名称为“codesg“的段,这个段从此处开始。codesg ends表示该段到此结束
一个汇编程序时由多个段组成的,这些段被用来存放代码、数据或者被当做栈空间来使用。一个有意义的汇编程序中至少要有一个段,这个段被用来存放代码。

(2)end
end是一个汇编程序的结束标记,编译器在编译的时候到了end这个位置会停止编译,所以在写汇编源程序的时候一定要写end,否则编译器不知道编译到哪里结束。
注意:end和ends不同,end是源程序的结束标记。ends是和sagment成对使用,是段的结束标记。
(3)assume
这条伪指令的作用是假设,它假设某一段寄存器和程序中的某一个用sagment……ends定义的段相关联。assume将有特定用途的段和相关的段寄存器关联起来。
例如该程序中:assume CS:codesg。codesg是我们自己定义的一个段,那么这条伪指令的含义就是将codesg这个段和CS寄存器联系起来。因为CS是代码寄存器,所以codesg这个段也就属于是代码寄存器了。

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

程序返回
一个程序P2在可执行文件中,则必须有一个正在运行的程序P1,将P2从可执行文件中加载入内存后,将CPU的控制权交给P2,P2才能得以运行。P2开始运行后,P1暂停运行。
当P2运行结束后,应该将CPU的控制权还给使它得以运行的程序P1,此后,P1继续运行。P2将CPU控制权交给P1的过程称为“程序返回”。
程序返回有它专门的汇编指令:

mov ax,4c00H
int 21H

这两条指令的作用就是程序返回。

相关指令指令性质指令执行者指令目的
ends伪指令编译时,编译器执行通知编译器一个段的结束
end伪指令编译时,编译器执行通知编译器程序结束
mov ax,4c00H int 21H汇编指令程序执行时,由CPU执行程序返回
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值