tebi 发表于 2011-5-14 17:09:21

真是奇怪了,检查几遍没有发现错误,却结果不正确。

本帖最后由 loop 于 2011-5-29 23:34 编辑

assume cs:code,ss:stack,ds:data
stack segment
dw 0,0
stack ends

data segment
db '1. display      '
db '2. brows      '
db '3. replace      '
db '4. modify       '
data ends

code segment
start:mov ax,data
      mov ds,ax
          mov ax,stack
          mov ss,ax
          mov sp,2
          mov bx,3
          mov si,0
          mov cx,4
          push cx
          push bx
          
          s:pop bx
             pop cx
          
               
                s1:mov al,
                   and al,0dfh
                   mov ,al
                   inc bx
                  
                   loop s1
                  
                   add si,16
                  
                  
                   loop s
                   mov ax,4c00h
                   int 21h
code ends
end start真是奇怪了,检查几遍没有发现错误,却结果不正确。   
                  

陌路狂奔 发表于 2011-5-14 18:40:30

本帖最后由 陌路狂奔 于 2011-5-14 18:56 编辑

栈顶指针怎么是2呢。。。对于那个循环前的入栈表示费解,而外循环开始的出栈也不是很理解。

tebi 发表于 2011-5-14 19:28:40

本帖最后由 loop 于 2011-5-14 21:31 编辑

更正后的:但是又有一个问题debug时,t执行几步,程序自动结束了。assume cs:code,ds:data,ss:stack
stack segment
dw 0
stack ends

data segment
db '1. display      '
db '2. brows      '
db '3. replace      '
db '4. modify       '
data ends

code segment
start: mov ax,data
       mov ds,ax
           mov ax,stack
           mov ss,ax
           mov sp,2
           mov bx,3
           mov si,0
           mov cx,4
           push cx
          
                        s:push cx
                          
                          mov bx,3
                          mov cx,4
                       
          
                 s1:mov al,
                        and al,0dfh
                        mov ,al
                        inc bx
                       
                  loop s1
                        add si,16
                        pop cx
                        loop s
          
           mov ax,4c00h
           int 21h
          
code ends
end start

陌路狂奔 发表于 2011-5-14 20:03:54

本帖最后由 陌路狂奔 于 2011-5-14 20:05 编辑

栈空间问题吧,,,你只定义了一个字栈的空间,而你两次入栈,应该是栈溢出了,是不是有个提醒stack overflow呢,其实你那个循环前的入栈完全是多余的,去掉应该就没事了。。。对了下次发代码用括起来,这样别人方便看

超越自我 发表于 2011-5-14 20:44:36

本帖最后由 超越自我 于 2011-5-14 21:06 编辑

真是奇怪了,用你的代码编译怎么提示没有栈段呢!不是有木{:5_94:}
楼主的头像看得我心里发凉{:2_39:}

sunhopp 发表于 2011-5-15 00:11:10

本帖最后由 sunhopp 于 2011-5-15 04:52 编辑

是 栈出了问题!

正确代码:
assume cs:code,ds:data,ss:stack
stack segment
dw 0,0,0,0,0,0,0,0;设置栈
stack ends

data segment
db '1. display      '
db '2. brows      '
db '3. replace      '
db '4. modify       '
data ends

code segment
start:        mov ax,stack
                mov ss,ax
                mov sp,16
                mov ax,data
                mov ds,ax
                mov bx,0;定位行
                mov si,3;定位内存单元
                mov cx,4
               
        s:        push cx
                mov si,3
                mov cx,5
               
               s0:mov al,
                        and al,0dfh
                        mov ,al
                        inc si
                        loop s0
                       
                add bx,16;换至下一行
                pop cx
                loop s
         
        mov ax,4c00h
        int 21h
         
code ends
end start

sunhopp 发表于 2011-5-15 19:15:54

:L不是吧?还没有结贴?

超越自我 发表于 2011-5-16 13:12:31

回复 sunhopp 的帖子

你确定没有问题了么??怎么编译的时候还是说没有栈段呢?麻烦你一步一步调试一下,看能不能全部执行完,谢谢了!

sunhopp 发表于 2011-5-16 17:14:03

回复 超越自我 的帖子

我这里调试可都是能成功运行的!且结果正确!代码肯定是没有问题。

超越自我 发表于 2011-5-16 19:42:08

本帖最后由 超越自我 于 2011-5-16 19:54 编辑

结果确实没问题,可是编译链接的时候总是提示没有栈段,和我上面的截图一样,真纳闷!
编译链接结果:
C:\Users\qhc>f:

F:\>cd test

F:\test>ml n2.asm
Microsoft (R) Macro Assembler Version 6.15.8803
      Patched for you by promethee in the year 2001 - enjoy
Copyright (C) Microsoft Corp 1981-2000.All rights reserved.

Assembling: n2.asm

Microsoft (R) Segmented Executable LinkerVersion 5.60.339 Dec5 1994
Copyright (C) Microsoft Corp 1984-1993.All rights reserved.

Object Modules [.obj]: n2.obj
Run File : "n2.exe"
List File : NUL
Libraries [.lib]:
Definitions File :
LINK : warning L4021: no stack segment;这是为什么呢?
调试结果:
14A9:000031 2E 20 44 49 53 50 4C-61 79 20 20 20 20 20 20   1. DISPLay
14A9:001032 2E 20 42 52 4F 57 53-20 20 20 20 20 20 20 20   2. BROWS
14A9:002033 2E 20 52 45 50 4C 41-63 65 20 20 20 20 20 20   3. REPLAce
14A9:003034 2E 20 4D 4F 44 49 46-79 20 20 20 20 20 20 20   4. MODIFy
14A9:0040B8 A8 14 8E D0 BC 10 00-B8 A9 14 8E D8 BB 00 00   ................
14A9:0050BE 03 00 B9 04 00 51 BE-03 00 B9 05 00 8A 00 24   ......Q........$
14A9:0060DF 88 00 46 E2 F7 83 C3-10 59 E2 EA B8 00 4C CD   ...F.....Y....L.
14A9:007021 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   !...............
-

sunhopp 发表于 2011-5-16 20:40:08

本帖最后由 sunhopp 于 2011-5-16 20:40 编辑

no stack segment;我也有这样的提示!也不知道为什么了!
页: [1]
查看完整版本: 真是奇怪了,检查几遍没有发现错误,却结果不正确。