回 帖 发 新 帖 刷新版面

主题:王爽课后习题看不懂

assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data 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,16
      mov ax,data
      mov ds,ax
      push ds:[0]
      push ds:[2]
      pop ds:[2]
      pop ds:[0]
      mov ax,4c00h
      int 21h
code ends
end start
设程序加载后code段的段地址为X,则data段的段地下为X-2,stack段的段地址为X-1
这个看不懂,为什么data的段地址是X-2?

回复列表 (共5个回复)

沙发

请回复的师傅举个例子,讲解一下!谢了!

板凳

地址=(段址 左移 4)+偏移
(左移 4)=*10h=*16

3 楼

data是8个项16字节
stack也是

4 楼

下面的行为 编译时确定

data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
;这里0123h的地址作为 数据段的起始地址
;结尾地址是 0123h的地址+15
data ends

stack segment
dw 0,0,0,0,0,0,0,0
;接着上面的数据段  0123h的地址+15 作为 堆栈段的起始地址
;结尾地址是 0123h的地址+31
stack ends

code segment
start:mov ax,stack
;代码段的地址 0123h的地址+31
;段寄存器保存20位地址的高16位
;如果cs-1 ,对于20位地址来说 其实是减去16,接着你往上看回就明白了

5 楼


王爽老师的汇编语言学习论坛(http://www.asmedu.net)
    人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。 
   所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功能。
   所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。机器的逻辑功能,软件系统功能构筑其上,硬件系统功能运行于下。 
   汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。 
   学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点和最有效途径。
                   ----摘自 汇编语言学习论坛(http://www.asmedu.net)

我来回复

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