汇编中的堆栈如何使用

汇编中的堆栈如何使用,第1张

堆栈定义是这样的:

dssg segment stack

aa dw 512dup(?)

dssg ends

一般的说,当PUSH/POP指令不频繁时用系统堆栈就可以了,但是当需要堆栈存储大量数据,如作为子程序传替参数时就要定义一个堆栈,而且一般来说一个段的内容不能超过64K,因为偏移地址最大只能表示64K,所以定义的堆栈也不能是无限大,如果超过了64K,就定义两个吧!

堆栈在汇编中对于初学者用的很少,一般小程序都不需要用的!用起来也不是很难,就是注意下,在子程序调用时,什么时候是返回地址,什么时候是寄存器值!总之,记住先进后出,再做题时画个堆栈图,应该不会很难的!

assume cs:code,ss:stack,ds:data 段说明, 自己定义的code对应代码段, stack对应堆栈段, data对应数据段

stack segment stack 堆栈段的定义

byte 64 dup(0)

stack ends

data segment 数据段的定义

msg byte 'hello world!$'

data ends

code segment代码段的定义

start:

mov ax,data

mov ds,ax

mov dx,offset msg

mov ah,9

int 21h

mov ax,4c00h

int 21h

code ends

end start

=============以上是一个常见的定义=============

masm 5.0 以后也支持简化定义如 .data 为数据段 .code表示代码段, 形式如下:

.model small

.stack 200h定义堆栈段大小

.data定义数据段

szMsg db 'Hello World!',13,10,'$'

.CODE代码段的定义

START:

mov ax,@data

mov ds,ax

mov es,ax

mov si,0

mov es:[bx+1+si],ah

lea dx,szMsg

mov ah,9

int 21h

暂停,任意键关闭

mov ah,1

int 21h

mov ah,4ch 结束,可以修改al设置返回码

int 21h

END START


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11159916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存