首页 > 前端 > 经验 > 汇编程序什么时候用堆栈段,汇编程序 为什么要在堆栈中执行指令 好处 proc far

汇编程序什么时候用堆栈段,汇编程序 为什么要在堆栈中执行指令 好处 proc far

来源:整理 时间:2024-06-05 14:13:13 编辑:黑码技术 手机版

本文目录一览

1,汇编程序 为什么要在堆栈中执行指令 好处 proc far

当然。最简单的一句话就是因为你没有写过大程序,也没有和别人分工合作过大程序。当你发现一个知4000行连翻道页都好半天的程序有一个地方错了,你该如何去找?当你们10个人写同一个程序的不同的部分,写法,风格,都不一样,你怎么把他们放在一起?这些靠的都是子程序。 至于STACK SEGMENT 这是用来分开数据和程序的,在高级内语言容,就连C语言里面都靠编译器区分数据和程序,而汇编确是自己分开的,如果你不分开 80 23 你知道是数据还是指令吗?

汇编程序 为什么要在堆栈中执行指令 好处 proc far

2,汇编语言中设置的堆栈段到底有何作用怎样的情况下需要设置这个堆

堆栈段主要用于暂时保存一些数据,不可或缺。 操作系统在把应用程序装入内存时,默认分配堆栈段与代码段同段,应用程序可以自行设置自己的堆栈段。自行设置的堆栈段大小最小4个字节,用于从应用程序返回操作系统,几乎所有的初学者不知道这个默认的、不成文的规定。 只有较大的程序或递归调用较深的程序,才有必要设置独立的堆栈段;我们平时编的一些程序都不大,系统默认的堆栈空间足够使用,完全没有必要单独设置堆栈段,我在知道里回答问题所编的汇编语言程序,从不设置独立的堆栈段。

汇编语言中设置的堆栈段到底有何作用怎样的情况下需要设置这个堆

3,堆栈段在程序中的作用

因为CPU要使用堆栈,主要是子程序调用call和ret指令,使用堆栈来存储返回地址,调用子程序的时候,后调用的子程序先返回,而且还可能嵌套调用甚至递归调用,所以必须使用先进后出的数据结构stack来实现返回地址的存储。没有堆栈stack,就无法实现函数/子程序调用,还有高级语言都用stack来存储局部变量和参数,汇编也可以用,但是比较麻烦。汇编经常使用stack来保存寄存器的值,PUSH和POP指令比较好用
堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成com型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64k字节的堆栈段,所以你没申明堆栈当然也可以用push。 在程序没有定义堆栈段的情况下,在由连接程序生成执行文件时,将会产生一条如下的警告信息, 但程序员可以不理会它,所生成的执行文件是可以正常运行的。 堆栈段一般是拿来保存局部变量用的,函数调用,中断返回都需要栈的支持。良好的程序员和优美的代码不应该没有堆栈段。

堆栈段在程序中的作用

4,汇编语言编程为什么一定要有一个栈

汇编语言编程不一定要定义栈,此时编译程序会缺省给你的程序分配栈,比如com格式的内存印像文件就是如此。程序运行中都会用到栈,栈是系统最基本的数据结构,在中断、调用子程序或函数时一定会用到栈,所以程序都会有自己的栈!
其实就是数据存储区,在堆里(heap)是动态生成的 要自己手动释放。所以你看到new delete c++ malloc free c语言栈区(stack)这里是在函数里面定义的变量。他们被放在系统的栈区 因为堆栈是要释放的,系统释放在你对函数调用完的返回的时候。如果你在函数中new了对象的话,那要记得delete掉他们。这些是要系统资源的,但是堆栈里会有编译器实现自动释放。然后在返回到我们调用这个函数的返回点下一个操作。堆栈有着一些系统约定的要求。那些寄存器是有调用者保存,那些是被调用者保存最后返回都是有说法的,常见的ebp esp,被调用的函数保存,如果进栈不出,程序将崩溃。因为你的返回点就错了。也就是你的eip出错了哦。。指令指针寄存器有句话叫堆栈平衡 记得就好。压栈push xxxx出栈pop xxxx或add esp ,0x04;作用就是要让函数能够返回掉调用函数点的下一条指令。。。我想rent 语句就是jmp xxxxx...

5,汇编语言自己定义的堆栈

如果是系统默认,那你这程序有何意义?所以程序应使用你自己定义的堆栈,这也是你的目的。回到你问题,你之前有 assume ss:XX ,但编译器并不会就此认为 XX 就是你定义的堆栈,你得有所表示,所以你在源程序中一定要有语句表明你的意图,例如:MOV AX,XX MOV SS,AX这样,XX 就跟堆栈段 SS 联系起来了,程序也就知道你定义的堆栈在哪了。下面给一个简单例子,将数据段data的内容逆序存放到堆栈段stack中ASSUME CS:CODE, DS:DATA, SS:STACKDATA SEGMENT DW 1,2,3,4,5,6,7,8DATA ENDSSTACK SEGMENT DW 0,0,0,0,0,0,0,0STACK ENDSCODE SEGMENTSTART: MOV AX,DATA ;这里将自定义的数据段 DATA 与 DS 联系起来 MOV DS,AX MOV AX,STACK ;这里将自定义的堆栈段 STACK 与 SS 联系起来 MOV SS,AX MOV SP,10H MOV BX,0 MOV CX,8S: PUSH [BX] ADD BX,2 LOOP S MOV AX,4C00H INT 21HCODE ENDSEND START
文章TAG:汇编程序什么汇编程序什么时候用堆栈段汇编程序为什么要在堆栈中执行指令好处procfar

最近更新

  • 粒子特效插件,Ae使用粒子特效插件有红叉粒子特效插件,Ae使用粒子特效插件有红叉

    AE安装后P-2插件,如何安装AE粒子插件particle1。具体粒子安装,毫无疑问,粒子是AE的重要组成部分,AE的粒子effect插件很强大,但是很多参数需要调整,生成的粒子效果可能不够华丽,可能需要一些公.....

    经验 日期:2024-06-05

  • mhl功能插件,Mhl功能mhl功能插件,Mhl功能

    部分智能电视(如小米电视)同时支持苹果的airplay功能和安卓的miracast功能,无需安装插件。(2)如果平板配有数字电视信号输出接口mhl(又称microhdml),可以用双头线与电视的hdml接口连接,通.....

    经验 日期:2024-06-05

  • 融媒体数据库包括哪些,数据库都有哪些啊融媒体数据库包括哪些,数据库都有哪些啊

    数据库都有哪些啊2,多媒体数据库的体系结构有哪些3,什么是多媒体数据库4,数据库有哪些类型5,数据库的种类有哪些1,数据库都有哪些啊大型的:db2、oracle、sybase等网络的:sql等小型的:fox系列FO.....

    经验 日期:2024-06-05

  • 数据库入门书籍有哪些,请推荐数据库入门的书数据库入门书籍有哪些,请推荐数据库入门的书

    请推荐数据库入门的书《数据库系统概论》这本书学习数据库非常经典,讲的是最常用SQLSERVER我也是自学数据库,就是看这本,花了一个月不到就看完了,效果很好。2,数据库初学者应该看什么书一点.....

    经验 日期:2024-06-05

  • 菜鸟c语言基础知识,C语言入门知识菜鸟c语言基础知识,C语言入门知识

    C语言入门知识2,菜鸟怎么样学习C语言3,C语言初学基础知识4,如何学习C语言5,C语言入门级知识点6,C语言最最最基础的知识7,C语言的知识点有哪些8,c语言的基础知识入门有哪些1,C语言入门知识C语言.....

    经验 日期:2024-06-04

  • 哈尔滨电脑培训速成班有哪些,哈尔滨哪里有学电脑的哈尔滨电脑培训速成班有哪些,哈尔滨哪里有学电脑的

    哈尔滨哪里有学电脑的2,黑龙江省哪有电脑速记培训班3,哈尔滨哪里有计算机速成班1,哈尔滨哪里有学电脑的关键看你学什么,如果学基本操作,可以如工大附中对面有个工大开办的电脑培训学校,教基.....

    经验 日期:2024-06-04

  • 任务划分的原则,安全生产监管职责划分的原则是什么任务划分的原则,安全生产监管职责划分的原则是什么

    安全生产监管职责划分的原则是什么2,在给公司的员工进行工作任务分级时都应该遵循那些原则啊3,嵌入式课后作业划分任务的基本原则有哪些4,幼儿园教育的目标内容任务要求基本原则是什么5,怎.....

    经验 日期:2024-06-04

  • 斗鱼直播bgm插件,手机怎么下斗鱼直播插件斗鱼直播bgm插件,手机怎么下斗鱼直播插件

    斗鱼直播Partner|。斗鱼直播Companion直播如何设置斗鱼直播是一款非常不错的游戏直播软件,如果您是斗鱼直播您的合作伙伴的新用户,您可能不清楚直播的流程,这时你可以了解一下直播与边肖.....

    经验 日期:2024-06-04