回 帖 发 新 帖 刷新版面

主题:初学汇编的几个问题

.386p
Seg_Data  SEGMENT  use16                       
      VarByte DB "Test"
Seg_Data ENDS

Seg_Stack  SEGMENT  use16
      DW  512  dup  (?)
      Top  label  WORD
Seg_Stack  ENDS

Seg_Code SEGMENT use16
main proc far
     Assume  cs:Seg_Code , ds:Seg_Data , ss:Seg_Stack
 Start:
                 mov    ax ,  Seg_Stack
                 mov    ss ,  ax
                 mov    sp ,  offset Top

                 push    ds
                 xor     ax ,  ax
                 push ax

                 mov    ax ,  Seg_Data
                 mov    ds ,  ax
                 mov    es ,ax
;========================================= 
                 call    FAR ptr TestProc
;=========================================
                mov ax,4c00h
                int 21h
main Endp

TestProc proc far

       ret
TestProc endp
Seg_Code  ENDS
  End  start


1。use16  是什么意思?
2。mov    sp ,  offset Top  这句话怎么解释

回复列表 (共2个回复)

沙发

mov    sp ,  offset Top就是把top的偏移地址送到sp中.

use16嘛,我想是定义的名字来的,不过我不是很清楚,其他的大虾补充下吧

板凳

use16表示16位指令,因为.386p默认为32位指令,用use16可以把段定义为16位指令段。


mov sp , offset top是初始化堆栈指针sp。由于例子没有把堆栈段的组合类型定义为stack,因此需要对ss和sp进行手工初始化。

我来回复

您尚未登录,请登录后再回复。点此登录或注册