鱼C论坛

 找回密码
 立即注册
查看: 3886|回复: 10

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

[复制链接]
发表于 2011-5-14 17:09:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 loop 于 2011-5-29 23:34 编辑
  1. assume cs:code,ss:stack,ds:data
  2. stack segment
  3. dw 0,0
  4. stack ends

  5. data segment
  6. db '1. display      '
  7. db '2. brows        '
  8. db '3. replace      '
  9. db '4. modify       '
  10. data ends

  11. code segment
  12. start:mov ax,data
  13.       mov ds,ax
  14.           mov ax,stack
  15.           mov ss,ax
  16.           mov sp,2
  17.           mov bx,3
  18.           mov si,0
  19.           mov cx,4
  20.           push cx
  21.           push bx
  22.           
  23.           s:pop bx
  24.              pop cx
  25.             
  26.                
  27.                 s1:mov al,[bx+si]
  28.                    and al,0dfh
  29.                    mov [bx+si],al
  30.                    inc bx
  31.                   
  32.                    loop s1
  33.                   
  34.                    add si,16
  35.                   
  36.                   
  37.                    loop s
  38.                    mov ax,4c00h
  39.                    int 21h
  40. code ends
  41. end start
复制代码
真是奇怪了,检查几遍没有发现错误,却结果不正确。   
                  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-14 18:40:30 | 显示全部楼层
本帖最后由 陌路狂奔 于 2011-5-14 18:56 编辑

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

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 我很赞同~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-5-14 19:28:40 | 显示全部楼层
本帖最后由 loop 于 2011-5-14 21:31 编辑

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

  5. data segment
  6. db '1. display      '
  7. db '2. brows        '
  8. db '3. replace      '
  9. db '4. modify       '
  10. data ends

  11. code segment
  12. start: mov ax,data
  13.        mov ds,ax
  14.            mov ax,stack
  15.            mov ss,ax
  16.            mov sp,2
  17.            mov bx,3
  18.            mov si,0
  19.            mov cx,4
  20.            push cx
  21.           
  22.                         s:push cx
  23.                           
  24.                           mov bx,3
  25.                           mov cx,4
  26.                          
  27.           
  28.                  s1:mov al,[bx+si]
  29.                         and al,0dfh
  30.                         mov [bx+si],al
  31.                         inc bx
  32.                          
  33.                     loop s1
  34.                         add si,16
  35.                         pop cx
  36.                         loop s
  37.           
  38.            mov ax,4c00h
  39.            int 21h
  40.           
  41. code ends
  42. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-14 20:03:54 | 显示全部楼层
本帖最后由 陌路狂奔 于 2011-5-14 20:05 编辑

栈空间问题吧,,,你只定义了一个字栈的空间,而你两次入栈,应该是栈溢出了,是不是有个提醒stack overflow呢,其实你那个循环前的入栈完全是多余的,去掉应该就没事了。。。对了下次发代码用[code][/code]括起来,这样别人方便看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-14 20:44:36 | 显示全部楼层
本帖最后由 超越自我 于 2011-5-14 21:06 编辑

QQ截图未命名.png 真是奇怪了,用你的代码编译怎么提示没有栈段呢!不是有木
楼主的头像看得我心里发凉{:2_39:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-15 00:11:10 | 显示全部楼层
本帖最后由 sunhopp 于 2011-5-15 04:52 编辑

是 栈出了问题!

正确代码:

  1. assume cs:code,ds:data,ss:stack
  2. stack segment
  3. dw 0,0,0,0,0,0,0,0;设置栈
  4. stack ends

  5. data segment
  6. db '1. display      '
  7. db '2. brows        '
  8. db '3. replace      '
  9. db '4. modify       '
  10. data ends

  11. code segment
  12. start:        mov ax,stack
  13.                 mov ss,ax
  14.                 mov sp,16
  15.                 mov ax,data
  16.                 mov ds,ax
  17.                 mov bx,0;定位行
  18.                 mov si,3;定位内存单元
  19.                 mov cx,4
  20.                
  21.         s:        push cx
  22.                 mov si,3
  23.                 mov cx,5
  24.                
  25.                  s0:mov al,[bx+si]
  26.                         and al,0dfh
  27.                         mov [bx+si],al
  28.                         inc si
  29.                         loop s0
  30.                        
  31.                 add bx,16;换至下一行
  32.                 pop cx
  33.                 loop s
  34.            
  35.         mov ax,4c00h
  36.         int 21h
  37.            
  38. code ends
  39. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-15 19:15:54 | 显示全部楼层
:L不是吧?还没有结贴?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-16 13:12:31 | 显示全部楼层
回复 sunhopp 的帖子

你确定没有问题了么??怎么编译的时候还是说没有栈段呢?麻烦你一步一步调试一下,看能不能全部执行完,谢谢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-16 17:14:03 | 显示全部楼层
回复 超越自我 的帖子

我这里调试可都是能成功运行的!且结果正确!代码肯定是没有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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 [ECL] in the year 2001 - enjoy
Copyright (C) Microsoft Corp 1981-2000.  All rights reserved.

Assembling: n2.asm

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

Object Modules [.obj]: n2.obj
Run File [n2.exe]: "n2.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment;这是为什么呢?
调试结果:
14A9:0000  31 2E 20 44 49 53 50 4C-61 79 20 20 20 20 20 20   1. DISPLay
14A9:0010  32 2E 20 42 52 4F 57 53-20 20 20 20 20 20 20 20   2. BROWS
14A9:0020  33 2E 20 52 45 50 4C 41-63 65 20 20 20 20 20 20   3. REPLAce
14A9:0030  34 2E 20 4D 4F 44 49 46-79 20 20 20 20 20 20 20   4. MODIFy
14A9:0040  B8 A8 14 8E D0 BC 10 00-B8 A9 14 8E D8 BB 00 00   ................
14A9:0050  BE 03 00 B9 04 00 51 BE-03 00 B9 05 00 8A 00 24   ......Q........$
14A9:0060  DF 88 00 46 E2 F7 83 C3-10 59 E2 EA B8 00 4C CD   ...F.....Y....L.
14A9:0070  21 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   !...............
-
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-16 20:40:08 | 显示全部楼层
本帖最后由 sunhopp 于 2011-5-16 20:40 编辑

no stack segment;我也有这样的提示!也不知道为什么了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 18:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表