当前位置: 代码迷 >> 汇编语言 >> assume语句的功用
  详细解决方案

assume语句的功用

热度:229   发布时间:2016-05-02 04:37:58.0
assume语句的作用
assume cs:code,ds:data,ss:stack

data segment
     dw 0123h
data ends

stack segment
   dw 0,0,0,0
stack ends

code segment
start : mov ax,stack
           mov ss,ax
       ......
code ends
end start

根据我的理解  assume ss:stack  语句已经将 stack的值告诉了ss, 为什么还要用 mov ax,stack 和  mov ss,ax  来给ss赋值?



------解决方案--------------------
assume XX:XXXX 只是告诉汇编程序,各个段分别分配给了哪一个段寄存器。但它只是一条伪指令,并不会把段地址装入寄存器。
------解决方案--------------------

------解决方案--------------------
assume伪指令决定,汇编时候,程序访问内存的指令,汇编后需不需要附加段前缀指令。
如果,assume指定定了段和段寄存器的对应关系,汇编的时候,和访问了寄存器对应的段的内存,不需要加段前缀,否则必须加段前缀访问,如果不指定,汇编程序无法确定段和段寄存器的对应关系。
而代码,只能在程序运行过程中,确定段和段寄存器对应关系。
如果,CS 对应的段,没有指定,加载的时候,CS对应的段地址无法确定。
这种程序,一般汇编程序会指定代码段,对应CS寄存器。