零零 发表于 2012-3-26 20:43:27

《汇编语言》- 检测点6.1 小鱼老师可不可以解释下

原题目
assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0,0,0,0                                    
start:
    mov ax,cs   ;cs为所填第一空
    mov ss,ax
    mov sp,24h    ;此条指令为所填第二空
    mov ax,0
    mov ds,ax
    mov bx,0
    mov cx,8
s:
    push
    pop cs:    ;此条指令为所填第三空
    add bx,2
    loop s
   
    mov ax,4c00h
    int 21h
codesg ends
end start

我不太明白的是SP的变化一直都保持在24H,22H之间.那它为什么还要开僻十个字单元的栈空间??
本来它们的值压入SS:SP(24H)中,然后再POP取出,SP+2.不管怎么循环,SP的值依旧保持在24H~22H之间.既然如此那么,开僻十个字单元的栈空间有何意义?

wAterLoo 发表于 2012-3-26 23:57:07

本帖最后由 wAterLoo 于 2012-3-26 23:59 编辑

{:5_90:}

莫名其妙 发表于 2012-3-27 14:20:24

当多个段在一段内存中表示的时候    要注意各段之间内存数据的变化以免影响程序运行
也就是说一旦你修改栈中数据内容的时候有可能同时也修改了数据段或者代码段的内容

哈喇子淌一手 发表于 2012-8-25 00:58:32

莫名其妙 发表于 2012-3-27 14:20 static/image/common/back.gif
当多个段在一段内存中表示的时候    要注意各段之间内存数据的变化以免影响程序运行
也就是说一旦你修改栈 ...

我说的么,百思不解,怎么调试都不对,是不是定义这样的字段的好处就是代码随意运行,我试着改变他的字节,如果改到8个dw型也可以运行,没有出错,再少就出错了
页: [1]
查看完整版本: 《汇编语言》- 检测点6.1 小鱼老师可不可以解释下