请教8086汇编语言中ASSUMEarm汇编伪指令详解的作用!

汇编语言中ASSUME的用法_中华文本库
第1页/共3页
关于汇编中ASSUME的讨论
对于汇编中ASSUME的作用及,一直都没有弄清楚,下面是百度汇编吧中对这一问题的讨论:
(篇幅过长,没时间细看的,请重点看24楼,72楼和补充知识。)
问题来源:百度汇编吧:ASSUME的作用?在实际应用中我糊涂了!
ASSUME DS: DATA &---- 既然已经将DATA分配给DS
ASSUME ES: EXTR
MOV AX, DATA &---- 为什么还要把DATA的地址赋值给DS
MOV DS, AX
MOV AX, EXTR
MOV ES, AX
对于问题的回答中,自己认为比较合理的部分,节选如下:
24楼,无名人士:
在数据段中定义的每一个变量标志符其实都代表了一个偏移量(也称为有效地址),这个偏移量与数据段段值相结合就指向某个内存地址。在程序中使用ASSUME伪指令是用来指明一个默认的段地址。一旦你把某个数据段的段名指定给某个段寄存器(比如
ASSUME DS,DATA1),这之后当你使用这个数据段(DATA1)内定义的变量,编译程序就自动把它与这个段寄存器(DS)里的段值(表示一个段地址)结合起来使用。
所以,assume并不分配内存,前面提到的确立对应关系其实就是为了以后能用上段里面的变量.要不以后用到段里面定义的变量时就不知道基地址是什么了
我们汇编英文版这样说的:
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的寄存器。
31楼,无名人士(不一定对,但有参考价值)
第1页/共3页
寻找更多 ""您现在的位置: &
8086汇编语言程序格式单选习题
  第三章 8086汇编语言程序格式
  单项选择题
  1.下列选项中不能作为名字项的是( C )。
  A.FH&&& B.A3&&& C.3B&&& D.FADC
  2.下列指令不正确的是( D )。
  A.MOV& AL,123&&&& B.MOV& AL,123Q
  C.MOV& AL,123D&&& D.MOV& AL,123H
  3.下列指令不正确的是( A )。
  A.MOV& BL,OFFSET& A&&&& B.LEA&& BX,A
  C.MOV& BX,OFFSET& A&&&& D.MOV& BX,A
  4.若定义“BUF& DB& 1,2,3,4”,执行MOV& AL,TYPE& BUF& 后AL=(B& )。
  A.0&&& B.1&&& C.2&&& D.3
  5.若定义“A& EQU& 100”,执行“MOV& AX,A”后,AX=( C )。
  A.A的偏移地址&&&&& B.A单元中的内容
  C.100&&&&&&&&&&&&&& D.A的段地址
  6.若定义“B& DW& 1,2,10& DUP(0)”,则该伪指令分配(D& )字节单元。
  A.10&&& B.20&&& C.22&&& D.24
  7.若定义“C& DD& 2,4”,则该伪指令分配( D )个字节单元。
  A.2&&&& B.4&&&& C.6&&&& D.8
  8、伪指令是(C& )规定的汇编说明符,它在源程序汇编时进行说明。
  A、DEBUG& B、LINK&& C、MASM& D、EDIT
  9.在上机操作过程中,MASM命令执行后,除了生成一个目标文件外,根据选择还可以生成一个( A )文件。
  A. .LST&&& B. .EXE& C. .MAP& D. .ASM
  10.LINK命令执行后可以生成一个以(B& )为扩展名的文件。
  A.ASM&&&&&&& B.EXE&&&& C.OBJ&&&&& D.COM
  11.一个段最大可定义(B& )字节。
  A.1M&&&&& B.64K&&& C.32K&&& D.16K
  12.若要求一个段的起始位置能被256整除的单元开始,在定位方式选项中应选( D )。
  A.BYTE&& B.WORD& C.PARA& D.PAGE
  13.宏指令与子程序相比,在多次调用时,宏指令调用的目标程序长度比子程序调用的(B )。
  A.相同&&& B.长&&&&& C.短&&&& D.不定
  14.宏指令与子程序相比,子程序调用的执行速度比宏指令的(C& )。
  A.相同&&& B.快&&&&& C.慢&&&& D.不定
  15.ASSUME伪指令说明了汇编程序所定义段与段寄存器的关系,它只影响( A )的设定。
  A.源程序& B.目标程序 C.汇编程序& D.连接程序
  16.设A和B为字变量,C为标号,下列指令中不正确的是(C& )。
  A.MOV& AX,A&&&&&& B.MOV& AX,B
  C.JNE&& A&&&&&&&&&&& D.JMP&& C
  17.代码段中的语句(B& )表示该段结束。
  A.ASSUME&&&&&&&&&&&&&&&&&&&& B.CODE& ENDS
  C.START:MOV& AX,DATA&&& D.END& START
  18.过程定义语句以“过程名PROC”开始,以过程名( B )结束。
  A.ENDS&&& B.ENDP&&& C.ENDM&&& D.END
  19.一个段可以放在内存的任何地方,但起始地址应该从一个能被(&& A )整除的单元地址开始。
  A.16&&&&&&&& B.32&&&&&&&&&&& C.64&&&&&&&&&&& D.128
  20.在数据定义语句中,下列描述不正确的是( A )。
  A.存放存储单元的地址可以用字节表示
  B.存放存储单元的地址可以用字表示
  C.存放存储单元的地址可以用双字表示
  D.存放存储单元的地址可以用四字表示

我要回帖

更多关于 汇编伪指令 的文章

 

随机推荐