鱼C论坛

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

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

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

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

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

x
本帖最后由 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,[bx+si]
                   and al,0dfh
                   mov [bx+si],al
                   inc bx
                   
                   loop s1
                   
                   add si,16
                  
                   
                   loop s
                   mov ax,4c00h
                   int 21h
code ends
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执行几步,程序自动结束了。
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,[bx+si]
                        and al,0dfh
                        mov [bx+si],al
                        inc bx
                         
                    loop s1
                        add si,16
                        pop cx
                        loop s
           
           mov ax,4c00h
           int 21h
           
code ends
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 编辑

是 栈出了问题!

正确代码:
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,[bx+si]
                        and al,0dfh
                        mov [bx+si],al
                        inc si
                        loop s0
                        
                add bx,16;换至下一行
                pop cx
                loop s
           
        mov ax,4c00h
        int 21h
           
code ends
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-9-19 09:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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