我是一名汇编新手,目前在看的是王爽的汇编语言,在他的一个例子中,我遇到个问题
原例:
     完成下例程序,得用栈,将程序定义的数据逆序存入,
     assume cs:codesg
     codesg segment
         dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    ?
     codesg ends
     end
他给出的代码:
     assume cs:codesg
     codesg segment
         dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0
    start:
        mov ax,cs            
        mov ss,ax      ;将栈的段地址指向程序入口段地址
        mov sp,30h     ;设置偏移地址,此时栈顶地址应是 ss:0030
        mov bx,0
        mov cx,8
        s:
            push cs:[bx]    ;取出cs:bx中的数据压入栈顶
            add bx,2   
        loop s   ;循环操作
        
        mov bx,0
        mov cx,8
        s0:
            pop cs:[bx]     ;弹出栈内元素
            add bx,2
        loop s0;
        
    mov ax,4c00h
    int 21h    
     codesg ends
     end start
按着题意,运行后内存的数据应为
cs:0000 23 01 56 04 89 07 bc 0a ef 0d ed 0f ba 0c 87 09
cs:0010 87 09 bc 0c ed 0f ef 0d bc 0a 89 07 56 04 23 01
我照着例子,分析他的代码,第一个dw定义的数据地址应在 cs:0000 - cs:000F
第二个dw定义的数据应在 cs:0010 - cs:0001F
程序入口在cs:0020,SS:IP 应在 cs:0030,从逻辑上他的代码貌似就实现不了,
我自己也写了一段代码,能复制前面几个数据,后面就冒出奇怪的数据,
望高人解答,是我理解错了,还是这段代码达不到这个意思...