1809228982 发表于 2019-11-4 16:24:26

关于多个段的编程

本帖最后由 1809228982 于 2019-11-4 16:29 编辑

为什么ds段和ss段需要重新给它赋值呢??

        mov ax, stack
        mov ss, ax
        mov sp, 10h
       
        mov ax, date
        mov ds, ax

一开始不是把    assume ds:date, ss:stack, cs:code    吧地址绑定在一起了吗???

而cs段的就不需要??

为什么cs可以找到地址,而ds,和ss缺找不到呢??

assume ds:date, ss:stack, cs:code

date segment
        dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
date ends

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

code segment
               
start:
        mov ax, stack
        mov ss, ax
        mov sp, 10h
       
        mov ax, date
        mov ds, ax
       
        mov bx, 0       
        mov cx, 8
s:push
        add bx, 2
        loop s
       
        mov bx, 0
        mov cx, 8
s0:pop
        add bx, 2
        loop s0
       
        mov ax, 4c00h
        int 21h
       
code ends

end start

kikiatw 发表于 2019-11-4 17:24:55

一個執行檔載入記憶體中運行, 他會從你 end start 的這個start標號開始, 也就是start標號開始翻譯指令, 翻譯到end start為止.
然而你在data segment 中有預設一些資料, 當程式載入記憶體中, 他並不知道你的資料從哪裡開始, 所以你要指定它正確的地址才能找到你預定的資料
stack segment也是一樣, 只是stack 是保留一段空間當棧, 所以你要把他指定到正確的空間當作棧的操作空間

1809228982 发表于 2019-11-6 09:07:46

kikiatw 发表于 2019-11-4 17:24
一個執行檔載入記憶體中運行, 他會從你 end start 的這個start標號開始, 也就是start標號開始翻譯指令, 翻 ...

那是不是说CS段的地址其实是由系统自动分配的,程序一载入就已经分配了的。而ds和ss则需要程序员手动分配地址??
当我把start去掉之后 debug程序,用G命令跳转到代码的部分,cs的值依旧是刚载入程序的那样。
assume ds:date, ss:stack, cs:code

date segment
        dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
date ends

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

code segment
               

        mov ax, stack
        mov ss, ax
        mov sp, 10h
       
        mov ax, date
        mov ds, ax
       
        mov bx, 0       
        mov cx, 8
s:push
        add bx, 2
        loop s
       
        mov bx, 0
        mov cx, 8
s0:pop
        add bx, 2
        loop s0
       
        mov ax, 4c00h
        int 21h
       
code ends

end

kikiatw 发表于 2019-11-6 09:24:41

如果把START標號去除, 他會從Code segment開始
如果此時沒有 start標號, 而且你在code segment 定義變量, 他會從變量開始
小甲魚視頻你看到後面就會說到這個了

1809228982 发表于 2019-11-6 09:34:45

kikiatw 发表于 2019-11-6 09:24
如果把START標號去除, 他會從Code segment開始
如果此時沒有 start標號, 而且你在code segment 定義變量,...

好的,谢谢
页: [1]
查看完整版本: 关于多个段的编程