iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >汇编语言中assume的作用是什么
  • 353
分享到

汇编语言中assume的作用是什么

2023-06-25 14:06:23 353人浏览 安东尼
摘要

本篇文章给大家分享的是有关汇编语言中assume的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。assume 的作用是关联段名与段寄存器。如果你在数据段中定义了变量名

本篇文章给大家分享的是有关汇编语言中assume的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

assume 的作用是关联段名与段寄存器。

如果你在数据段中定义了变量名,比如:

x   db  0

而你在代码中,需要直接使用这个变量名,比如:

mov   al,  x

那么,汇编程序在汇编时,就会报告错误。

因为,mov指令中遇到 x 这个变量名时,汇编程序不知道它要用哪个段寄存器作为段地址。

所以:

若要用变量名直接访问,或使用语句标号(比如你例子中的标号 start)就必须要在assume伪指令中将这些变量或标号所在段的段名,与段寄存器名关联,否则会出错。

如果你不使用段中的变量名,可以不关联这个段的段名与寄存器。

如果你访问变量时,都指定了段跨越前缀,关联也不是必须的。比如你可以用 mov al, ds:x访问变量 x 。

这几天在看王爽大大的 汇编语言。对于assume伪指令却很是不懂。

比如已经定义了assume cs:code,ds:data

但用debug观察的时候,发现ds段寄存器却没有相关联的数据。

必须在cs中写明: mov ax,data

mov ds,ax然后才能发现ds中有正确的数据。

于是疑惑,assume不是已经关联了ds嘛?

上网求助 = =、 然后找到答案。

编写程序,是写给编译软件的。由编译软件,编译成机器码,再去控制CPU。但是,编译软件,对assume语句,并不生成机器码。

所以,必须有mov ax,data,mov ds,ax,CPU才能受控。

---assume语句,是伪指令,仅仅是写给编译软件的。编译软件,并不把它生成机器码。

assume对除了CS以外的其它段寄存器,仅仅只是关联了段名,以便在访问段内变量时程序可以知道用哪个段寄存器,并没有在程序加载时将段地址装入段寄存器。

所以,将段地址装入段寄存器的工作,必须由用户在程序中自己编写代码,并在程序开始运行时执行代码完成装入工作。
仅仅对CS段寄存器,会在关联段名的同时,在程序加载时自动将段地址装入段寄存器。
----补充:前天知道了答案后,我以为assume ds:data 之类的指没有什么用,只是给程序员看的。

但今天发现不是这样的。 如果你在data中用了标号的话,则assume ds:data不能省略。

比如:

data segment
a db 1,2,3,4 ,5,6,7,8
b dw 0
data ends

a,b的后面没有“ :”。

如果你想在cs段中用数据标号访问数据,则必须在开头加上assume ds:data,否则会报错

Arror A2068:Can not address with segment reGISter

不过就算在开头加上了assume ds:data,代码段中也不能少了mov ax,data,mov ds,ax。

作用:用于标识默认段前缀

解释:assume 并不能改变ds等段寄存器的值,但他能改变编译器产生的汇编代码。比如:

assume ss:stack

stack segment

x :db 0

stack ends

如果程序需要mov ax,[x],那么程序如何定位[x]呢?我们知道x只是一个偏移地址0,所以此时assume就相当于告诉编译器stack段的所有标号都与ss相关联,所以此时[x]就相当于ss:[0].如果我们直接将这句改为mov ax,ss:[0],那么前面不加assume也是可以的.这也是为什么[0]被编译器强制理解为立即数,而[标号]却被理解为标号里的内容的原因,因为标号必须与段assume,否则会报错cannot address with segment register.而[0]无默认段,就只能被认为为立即数了.

所以,我们仍需在程序中将ss的值,用指令修改为stack,原因就是assume并不会修改段寄存器,这个由dos系统决定,如果dos系统决定将段值编译进.exe文件头,并在加载进内存时根据文件头,修改段值,那么此时assume就相当于可以改变段值了.但是我调试的现实是ds、es指向psp头(psp详见16位exe程序加载过程),ss指向ds+0:00f0,cs指向ds+0:0100。

以上就是汇编语言中assume的作用是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 汇编语言中assume的作用是什么

本文链接: https://www.lsjlt.com/news/305310.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 汇编语言中assume的作用是什么
    本篇文章给大家分享的是有关汇编语言中assume的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。assume 的作用是关联段名与段寄存器。如果你在数据段中定义了变量名...
    99+
    2023-06-25
  • 汇编语言学习assume的作用详解
    assume 的作用是关联段名与段寄存器。 如果你在数据段中定义了变量名,比如: x db 0 而你在代码中,需要直接使用这个变量名,比如: mov al, ...
    99+
    2024-04-02
  • 汇编语言和c语言的区别是什么
    区别:1、因为汇编语言实质上是机器语言的助记符,是直接面对CPU的语言,所以汇编语言的运行效率比C语言高;2、汇编语言对硬件的可操控性强,C语言硬件可操控性比较差;3、汇编语言的目标代码体积小,C语言目标代码体积大;4、汇编语言不易维护,C...
    99+
    2023-05-14
    汇编语言 C语言
  • C语言中调用汇编语言详解
    目录1.建立新工程2.改写程序3.总结1.建立新工程 首先点击Project里面的 New uVision Project 然后输入文件名,点击保存即可。 在你命名的project中...
    99+
    2024-04-02
  • 高级语言中的语句在汇编中是怎么实现的
    这篇文章主要介绍“高级语言中的语句在汇编中是怎么实现的”,在日常操作中,相信很多人在高级语言中的语句在汇编中是怎么实现的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”高级语言中的语句在汇编中是怎么实现的”的疑...
    99+
    2023-06-15
  • C语言中作用域编码规范是什么
    今天小编给大家分享一下C语言中作用域编码规范是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。规范本身应该是一个规定,但C...
    99+
    2023-06-08
  • 51单片机用汇编语言还是用C语言好
    这个问题没有明确的答案,选择使用汇编语言还是C语言取决于具体的应用场景和开发需求。使用汇编语言编写代码可以更好地控制硬件,实现更高效...
    99+
    2023-09-22
    c语言
  • c语言中auto的作用是什么
    在C语言中,auto是一种存储类说明符,用于声明自动变量。auto关键字可以用来显式声明变量,默认情况下所有局部变量都是自动变量,所...
    99+
    2023-10-28
    c语言
  • C 语言中 static 的作用是什么
    这篇文章给大家介绍C 语言中 static 的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。static 用来说明静态变量。如果是在函数外面定义的,那么其效果和全局变量类似,但是,static定义的变量只能在...
    99+
    2023-06-03
  • c语言中class的作用是什么
    在C语言中并不存在类(class)的概念,因为C语言是一种过程化的编程语言,没有面向对象的特性。相反,在C++等支持面向对象编程的语...
    99+
    2024-03-12
    c语言
  • 汇编语言显示功能实现方法是什么
    本篇内容主要讲解“汇编语言显示功能实现方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“汇编语言显示功能实现方法是什么”吧!问题1在屏幕中间分别显示绿底,绿底红色,白底蓝色的字符串“Wel...
    99+
    2023-06-25
  • 汇编语言中如何实现字符串操作
    这篇文章将为大家详细讲解有关汇编语言中如何实现字符串操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。软件:emu8086语言:汇编语言(Assembly)注意:小编列出了字符串匹配和字符串...
    99+
    2023-06-21
  • html语言的作用是什么
    这期内容当中小编将会给大家带来有关html语言的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。html是什么html的全称为超文本标记语言,它是一种标记语言,包含了一系列标签.通过这些标签可以将...
    99+
    2023-06-14
  • printf在c语言中的作用是什么
    在C语言中,`printf` 是一个输出函数,用于将数据打印到标准输出(通常是终端窗口)上。它是C语言标准库中的一个函数,用于格式化...
    99+
    2023-09-04
    c语言
  • C语言中链表的作用是什么
    C语言中链表的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先,指针计算机中的所有内容都是数字。在C语言中创建变量时,编译器仅按地址处理它,但是在您...
    99+
    2023-06-16
  • Go语言中ioutil包的作用是什么
    ioutil包是Go语言标准库中的一个工具包,提供了一些方便的文件I/O操作函数,用于处理文件和目录。它包括了一些常用的功能,如读取...
    99+
    2024-03-07
    Go语言
  • assert在C语言中的作用是什么
    在C语言中,assert的作用是用于在程序中验证假设条件的正确性。它用于检查断言是否为真,如果断言为假,则会导致程序终止,并输出相应...
    99+
    2023-09-20
    assert C语言
  • API在GO语言中的作用是什么?
    API,全称为“Application Programming Interface”,即应用程序编程接口,是一组预定义的函数和规则,用于访问操作系统、硬件或软件功能的一种方式。在GO语言中,API具有非常重要的作用,可以帮助开发者更方便地...
    99+
    2023-10-26
    linux windows api
  • C语言编程中if的用法是什么
    C语言编程中if的用法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。顺序,选择和循环是程序的三大基本结构,无论多么复杂的程序,都是用这三种结构写出来的。i...
    99+
    2023-06-03
  • c语言是什么编程语言
    c语言作为一种通用、结构化的编程语言,自诞生以来广泛应用于计算机领域。其基本特性包括结构化编程、过程式编程、底层访问能力、高效性能和跨平台性。在编程语言中,c语言是系统级编程的基石,也是...
    99+
    2024-03-14
    c语言 网络编程 作用域
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作