Assume指令解析
assume的用法和固定搭配

assume的用法和固定搭配一、什么是“assume”?在英语中,“assume”是一个常用的动词,其基本含义是“假设”、“承担”或“担任”的意思。
它可以用于许多不同的场合和情景中,表达各种各样的想法、行为和感受。
本文将分析“assume”的不同用法和固定搭配,以帮助读者更好地理解并运用该词。
二、表示假设或推测的用法1. assume that...在表示假设或推测时,我们经常使用形如“assume that...”的结构来引导从句。
例如:“Let's assume that the meeting will start at 9 a.m.”(让我们暂且假设会议将在上午九点开始)。
这个结构提供了一个前提条件,并且让我们忽略了这种可能性是否真实。
2. assume someone is...如果你对某人做出推测或猜测,可以使用类似于“assume someone is...”的句式。
例如:“I assumed he was a doctor because he was wearing a white lab coat and had a stethoscope around his neck.”(我以为他是一个医生,因为他穿着白大褂,在脖子上挂着听诊器)。
“Assume”在此处表示基于观察或其他信息所作出的合理猜测。
三、表示担任职责的用法1. assume responsibility“Assume responsibility”是一个非常常见的固定搭配,它表示“承担责任”。
例如:“As the team leader, she assumed responsibility for the project's success.”(作为团队领导,她承担了项目成功的责任)。
“Assume responsibility”通常被用于强调某人愿意或必须承担他们应尽的职责。
2. assume a role同样,在表达具体角色时,我们可以使用“assume a role”的形式。
汇编语言学习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,datamov ds,ax然后才能发现ds中有正确的数据。
于是疑惑,assume不是已经关联了ds嘛?上⽹求助 = =、然后找到答案。
编写程序,是写给编译软件的。
由编译软件,编译成机器码,再去控制CPU。
但是,编译软件,对assume语句,并不⽣成机器码。
所以,必须有mov ax,data,mov ds,ax,CPU才能受控。
---assume语句,是伪指令,仅仅是写给编译软件的。
编译软件,并不把它⽣成机器码。
assume对除了CS以外的其它段寄存器,仅仅只是关联了段名,以便在访问段内变量时程序可以知道⽤哪个段寄存器,并没有在程序加载时将段地址装⼊段寄存器。
所以,将段地址装⼊段寄存器的⼯作,必须由⽤户在程序中⾃⼰编写代码,并在程序开始运⾏时执⾏代码完成装⼊⼯作。
仅仅对CS段寄存器,会在关联段名的同时,在程序加载时⾃动将段地址装⼊段寄存器。
----补充:前天知道了答案后,我以为assume ds:data 之类的指没有什么⽤,只是给程序员看的。
assume用法句首 -回复

assume用法句首-回复题目:[Assume用法句首]的意义和应用领域分析引言:语言的灵活运用是人类思维表达的一种方式,而其中的假设性语句在不同语境下具有不同的表达方式和功能。
本文旨在探讨“Assume用法句首”的意义和应用领域,并分析其在学术论文、市场研究和日常交流中的重要性。
第一部分:Assume用法句首的含义在日常生活或学术领域中,我们常常使用“assume”一词来表达对某个前提的假设或假定的情况。
它可以用于引出假设的先验条件,指导对某个问题的分析或论证过程,并为后续推理提供基础。
第二部分:Assume用法句首的学术应用在学术研究中,假设性语句的运用尤为重要。
通过使用“assume”来引出假设条件,学者可以在研究中严谨地推导结论。
例如,在数学和物理领域,假设常常被用于构建数学模型或简化实验研究过程。
通过明确假设条件,研究人员可以分析现象背后的关系并预测结果,从而推动学科的进展。
第三部分:Assume用法句首在市场研究中的应用在市场营销领域,“assume”一词也被广泛应用于调查和研究中。
研究人员需要通过假设性语句来推测潜在消费者的喜好和购买意愿,以指导市场营销策略的制定。
例如,在新产品开发过程中,研究人员可以使用“assume”来引出假设条件,如消费者对产品外观、品质和价格的期望,以帮助企业了解市场需求并制定相应的营销策略。
第四部分:Assume用法句首在日常交流中的应用在日常交流中,假设性语句也经常用于推理、交流和辩论的过程中。
人们通过“assume”来提出假设或设定条件,以探究问题的可能性和解决方案。
例如,在交谈中,人们可以使用“assume”来提出自己的观点并引发讨论。
这种假设性语句的运用不仅可以促进交流,还可以推动思考和解决问题的过程。
结论:Assume用法句首作为一种假设性语句的表达方式,在学术领域、市场研究和日常交流中发挥着重要的作用。
通过引出假设条件,我们能够更清晰地分析问题和推理过程,并为进一步的思考和解决方案提供基础。
英语语法词汇详解assume

英语语法词汇详解assumeassume英[əˈsjuːm]美[əˈsuːm]v.假设;臆断;承担;就;呈现;具有;假装;僭取;夺取第三人称单数:assumes现在分词:assuming过去式:assumed过去分词:assumed英文释义:1. to think or accept that something is true but without having proof of it认为或接受某事是真实的,但没有证据2. assume something (formal) to take or begin to have power or responsibility承担某事(正式的)或开始拥有权力或责任3. assume something (formal) to begin to have a particular quality or appearance假定某事(正式)开始具有特定的性质或外观4. assume something (formal) to pretend to have a particular feeling or quality假定某事(正式)假装有特殊的感觉或品质举个例子:1.It would be wrong to assume that he is simply playing at right-wing politics.说他只是把右翼政治当作儿戏玩玩而已那就错了。
2.The court will assume that they have acted bona fide.法庭会假定他们的行为是诚实的。
3.Don't assume all women are cut from the same cloth.不要以为所有的女子都一样。
4.He was too young to assume the purple. 他太年轻,不宜身居要职。
常用短语:1.assume that假定;假设;想当然的认为2.assume responsibility承担责任;担起责任;负起责任3.assume leadership承担领导4.assume liability承担责任5.assume control取得控制6.assume an air of装出...的样子7.assume presidency 出任总统职位8.assume expression 做出……的样子9.assume role承担角色10.assume share假定份额11.assume manner 假定方式。
汇编中ASSUME用法

重点:ASSUME并不分配内存,前面提到的确定对应关系其实就是为了以后能用上段里面的变量。
要不以后用到段里面定义的变量时就不知道基地址是什么了。
告诉编译器哪一个段和哪一个段寄存器相关联。
但是如果进一步想一下细节,大家不一定都清楚。
下面将我们熟知的一句话变为两句话,这样它的含义就更加清楚了:
1.assume为我们指定默认的段寄存器
2.若不使用assume,那么我们在程序中访问数据时必须人为地明确指定相应的段寄
存器
如何修改Vs2008的字体
虚拟外设应用展示报告
汇编语言中ASSUME简介
2011-10-15 17:34:45| 分类:微机接口| 标签:faq8086微机接口|举报|字号大中小订阅
汇编语言中的ASSUME伪指令(directive)
ASSUME伪指令通知汇编程序为代码段、数据段、附加段以及堆栈段选择什么名字。
没有ASSUME伪指令时,汇编程序假设不分段,并自动把段超越前缀用于所有寻址存储器数据的伪指令。
ASSUME语句只能用于完整的段定义。
Emu8086中编译器忽略 assume . 必须明确的指明段超越前缀,否则默认为DS。
汇编语言伪指令参考

00
FLDA DW 2542H
02
02
FLDB DB 36H
03
03
FLDC DW 212EH
05
05
FLDD DD 00000705H 09
第17章 汇编语言伪指令参考资料
开始,地址计数器定为00。因为FLDA是两个字节 长,所以地址计数器就增加为02,以指出下一个数据 项的地址。因为FLDB是一个字节长,所以地址计数器 再增加为03,依次类推。你可以用ORG伪指令直接改 变地址计数器的内容,再根据其内容以指出下一个数 据项的地址,其一般格式为:
第14章讨论MACRO宏处理时有INCLUDE的实例。
第17章 汇编语言伪指令参考资料
5. LABEL伪指令 LABEL伪指令可以重新定义一个已定义名称的类 型。其一般格式为:
name LABEL type 通过LABEL我们可以使用如BYTE、WORD或 DWORD等类型,来重新定义数据字段及结构 (Structure)和记录(Record)名称的类型,亦可用LABEL 来重新定义调用指令的类型是NEAR或FAR。LABEL 还可以把一个字段同时定义为DB和DW。下面说明 BYTE及WORD这两种类型的使用。
关键字NOTHING可以用来取消前面ASSUME所指 定的某一个段寄存器,例如:
ASSUME ES :NOTHING
第17章 汇编语言伪指令参考资料
假若没有指定DS寄存器或使用NOTHING取消了它, 那么为了要存取数据段内的数据项时,就必须明确规 定使指令操作数以DS寄存器为参考对象,即要指明操 作数相应的段寄存器,例如:
第17章 汇编语言伪指令参考资料
(3) 若没有NAME也没有TITLE,则源程序的名称 就成为模块的名称。汇编程序会把所选用的名称交给 链接程序。
汇编言语——常用伪指令

(5)可以用ASSUME伪指令指定两个或两个以上的段寄存 器作为同一个段中标识符的缺省段寄存器。当数据定义与指令 写在同一个段中时,就会出现以CS、DS甚至ES一起作为一个 段的缺省段寄存器的情况。此时,有关数据的操作(取值、存 数等)优先以DS作为段寄存器。 (6)ASSUME可以在程序的不同行上出现多次,并且可以 对一个段寄存器进行两次或两次以上的对应关系指定。当程序 中用ASSUME指定了一个段寄存器是某个段的缺省段寄存器后, 在程序的后续行中一直有效,除非再次使用ASSUME伪指令改 变该段寄存器与段的对应关系。
【解】变量a的定义中出现的$是带引号的,表示ASCII码 值为24H的符号而不是偏移地址;定义变量b时用的两个$没有 加引号,表示偏移地址,按照地址分配原则,第一个$代表 0001H,第二个$代表0003H;在变量c的定义中,$出现在数值 表达式中,是当前偏移地址0005H,变量a的起始偏移地址是 0000H,两者相减的结果是5,并且不再有类型,因此可以作 为字节型变量的一项初值。图5.6是该数据段对应的内存图。 a b
5.3 ASSUME
ASSUME伪指令占一行,用于指出后续程序中所使用的变 量、标号等标识符在涉及到逻辑地址的段地址部分时,用哪 个段寄存器作为缺省段地址。 【格式】ASSUME R1:S1 , R2:S2 , ... 【说明】 (1)格式中的Ri代表段寄存器名。必须是DS、ES、SS、 CS四个之一,Si是段地址,只能是一个段名或者“SEG 变量 名”的形式。 (2)Ri:Si是一组对应关系,表示Si段中的标识符都使用Ri 作为缺省段寄存器。 。
5.6 $ $是汇编语言中的一个特殊符号,代表汇编程序在处理到$ 所在的位置时当前安排的偏移地址值。程序中出现的$可以作 为常量看待,但是不同位置上的$,其代表的值是不同的。与 一般的数据不同的是,通常所说的常量(数值)是没有类型的, 包括“OFFSET 变量名”也没有类型,但$所表示的数据一定 是字型。$一般作为字型变量定义时的一个初值使用。 【例5.18】分析下面数据段中各$符所表示的值。 data SEGMENT a DB '$' b DW $,$ c DB $-a data ENDS
汇编语言中ASSUME的用法

关于汇编中ASSUME的讨论对于汇编中ASSUME的作用及,一直都没有弄清楚,下面是百度汇编吧中对这一问题的讨论:(篇幅过长,没时间细看的,请重点看24楼,72楼和补充知识。
)问题来源:百度汇编吧:ASSUME的作用?在实际应用中我糊涂了!ASSUME DS: DATA <---- 既然已经将DATA分配给DSASSUME ES: EXTR......MOV AX, DATA <---- 为什么还要把DATA的地址赋值给DSMOV DS, AXMOV AX, EXTRMOV ES, AX对于问题的回答中,自己认为比较合理的部分,节选如下:24楼,无名人士:在数据段中定义的每一个变量标志符其实都代表了一个偏移量(也称为有效地址),这个偏移量与数据段段值相结合就指向某个内存地址。
在程序中使用ASSUME伪指令是用来指明一个默认的段地址。
一旦你把某个数据段的段名指定给某个段寄存器(比如ASSUME DS,DATA1),这之后当你使用这个数据段(DATA1)内定义的变量,编译程序就自动把它与这个段寄存器(DS)里的段值(表示一个段地址)结合起来使用。
所以,assume并不分配内存,前面提到的确立对应关系其实就是为了以后能用上段里面的变量.要不以后用到段里面定义的变量时就不知道基地址是什么了29楼:我们汇编英文版这样说的:When the program loader leads an .exe program from disk into memory for execution,it constructs a 256-byte(100h)psp(program segment prefix)on a paragraph boundary in available internal memory and stores the porgram immediately following the boundary. the loader then..initializes the address of the code segment in cs..initializes the address of the stacd segment in ss and..initializes the address of the psp in ds and es (我的注释:把psp的值赋给ds和es)看到最后一句了吗,这就是说 assume cs:data,ds:data,ss:data 这句其实已经分别给cs,ds 和ss段寄存器相应赋值了,但是随后加载器又把psp的地址赋给了ds和es寄存器,而我们要的ds地址不是psp,这是在代码执行之前完成的,所以我们要在代码中显示地指明MOV AX,DATA MOV DS,AX ,而不用指明cs,ds及ss的寄存器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Assume指令解析
刚学习80X86汇编的时候,有一条称为段分配伪指令Assume,我刚开始看这个的时候,就一直没看懂什么意思,老师也仅仅就说了一下,必须得这样,至于更深层次的讨论就没有,所以关于assume指令一直是懵懵懂懂的。
这些天才回过头来看的话,貌似有一点感悟!很久没写点文章了,就写下自己对于assume的理解吧。
很多书上说的是assume指令使段寄存器与某个段关联起来,但是assume指令是伪指令,还必须通过指令来赋值给段寄存器。
这话第一次看的时候,确实很迷茫。
在这里我试着从另外的一个角度去理解assume指令。
还是先来个例子(为了突出重点,例子都是很简单,甚至仅为测试而写,没有实际意义)DA TA SEGMENT ;数据段
MESS DB "HELLO",0DH,0AH,'$'
DA TA ENDS
;
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DA TA
START: MOV AX,DA TA
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,9 ;显示信息HELLO
INT 21H
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
在这个程序中,红色指令对应的是取得MESS的偏移地址,当我们对于MESS进行访问时候,汇编程序识别呢?我看可以这么理解哈,首先看到MESS的时候,汇编程序察觉这个是在DATA段中定义的变量,但是要访问它的时候,必须知道它的确切地址才行,所以在DATA段中,必须知道DATA的段地址,这个时候程序开始的前两条语句就已经给DS 赋予了值,但是我们如何得知DS和DATA的关系呢?这个时候就是assume的作用了,它就是告诉汇编程序,用指定的段寄存器寻址相应的逻辑段,建立段寄存器与段的默认关系。
所以程序的开始用的是两个assume指令使代码段与数据段和指定的寄存器关联起来,程序的段地址知道了,偏移地址就是汇编程序地址计数器在进行汇编的时候自动算出来的,这个不用我们担心!
另外在dos装入EXE程序的时候,DS和ES被初始化为PSP(程序段前缀)的段地址,而不是用本身的数据段和附加数据段,所以源程序中必须重新初始化DS和ES。
CS:IP指向源程序的代码段,cs必须被关联到指定的段,否则程序不能运行(代码段必须用ASSUME CS:CODE指明,否则编译器不知道代码从何处开始执行,编译不通过)。
SS:SP指向程序的堆栈段,如果程序未设堆栈,则SS为PSP的段地址加上256个字节,SP为00h。
上面说的可能还是不太清楚,写2个例子在下面看哈或许更明白些吧
DA TA SEGMENT ;数据段
MESS DB "HELLO",0DH,0AH,'$'
DA TA ENDS ;
CODE SEGMENT ;代码段
ASSUME CS:CODE,ES:DATA ;用ES关联,一样的效果
; ASSUME CS:CODE,DS:DATA
START: MOV AX,DA TA
MOV ES,AX
mov al,mess + 1
or al,20h ;大写变小写
mov mess+1,al
MOV AX,ES
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,9 ;显示信息HELLO
INT 21H
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
结果输出的是HeLLO
我们可以把红色代码换成ASSUME CS:CODE,DS:DATA,输出结果是HELLO,即没有变化。
我们可以看下反汇编的代码就一切明白了。
这个是没有改动的,可以看到访问变量mess的时候,自动加上了es段寄存器,这个就是assume的作用。
如果改成ASSUME CS:CODE,DS:DA TA,那么访问mess的话,则自动关联到ds寄存器,但是我们的程序中ds的值没有赋值,即ds的值还是原来程序段前缀的段地址,所以我们写的大小写转换不是在操作我们的数据,而是PSP中的某个数据,看下图:
相信说到这了,大家应该有一点稍微清晰的认识吧!(原文参看了部分书籍的介绍)。