在用汇编语言编程时,程序调用与堆栈如何使用

在用汇编语言编程时,程序调用与堆栈如何使用,第1张

程序调用用call指令,调用的程序必须已经写在程序里。

系统会自动把子程序的返回地址(即调用程序中call指令的下一条指令的地址)存入堆栈,子程序执行后也会自动把堆栈中存的地址取出。

你的子程序放的位置不对,修改如下:

DATAS SEGMENT

str1 db 'again$'

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

main proc far

START:

MOV AX,DATAS

MOV DS,AX

call crlf

call crlf

call crlf

MOV AH,4CH

INT 21H

main endp

;====================

crlf proc near

mov ah,9

mov dx,offset str1

int 21h

mov dl,0ah

mov ah,2

int 21h

mov dl,0dh

mov ah,2

int 21h

ret

crlf endp

;==================

CODES ENDS

END START

我的程序是KEIL编译的,如下

先申明

EXTRN CODE (_Send_CRC) ;Send_CRC是C中的函数,汇编中加了_

调用的时候

LCALL _Send_CRC

如果要使用C中的变量,那么CODE变成相应的DATA,XDATA等

ACALL是短调用指令。短表现在所调用的子程序地址必须与ACALL指令下一条指令的第一个字节在同一个2KB区内(即16位地址中的高5位地址相同),否则将引起程序转移混乱

LCALL长调用指令可以调用64kb范围内程序存储器中的任何一个子程序。

以上就是关于在用汇编语言编程时,程序调用与堆栈如何使用全部的内容,包括:在用汇编语言编程时,程序调用与堆栈如何使用、汇编子程序的问题、51单片机中汇编语言如何调用C的子程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10097167.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存