softkiller_1976 发表于 2017-10-20 19:08:55

请帮我看一下,这个程序错在哪

assume cs:daima
daima segment
      dw 1h,2h,3h,4h,5h,6h,7h,8h
          dw 0,0,0,0,0,0,0,0
          start: mov ax,cs ;把代码段的段地址送入AX,继而把它送入SS,即堆栈段中的段地址与代码段的段地址一样,指向了一个段
                 mov ss,ax
                       mov sp,32;堆栈段的栈顶指针指向32
                       xor bx,bx;BX清0
                       mov cx,8;循环8次
                  s: push cs:;把代码段中的第一个字单元元素压/送入栈。
                     add bx,2
                       loop s
                       
                       xor bx,bx
                       mov cx,8
                       s1: pop cs:;向代码段中的第一个字单元送入数据,这个数据字单元数据来源于栈。
                          add bx,2
                                loop s1
                        mov ax,4c00h
                        int 21h
                        daima ends
                        end start
                       
                  

3-3 发表于 2017-10-21 07:24:26

有什么错误?贴图看一下。

lhzcm 发表于 2017-10-21 20:31:10

栈有一个特点就是先入后出,你入栈的顺序是1,2,3,4,5,6,7,8那么出栈的顺序为8,7,6,5,4,3,2,1所以代码段的前八个字节会变成8,7,6,5,4,3,2,1这个顺序。改正:
                         mov bx,16;让bx指向第八个字
                         mov cx,8
                         s1: pop cs:
                              sub bx,2 ;bx-2, bx指向前一个字
                              loop s1
页: [1]
查看完整版本: 请帮我看一下,这个程序错在哪