真是奇怪了,检查几遍没有发现错误,却结果不正确。
本帖最后由 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:56 编辑
栈顶指针怎么是2呢。。。对于那个循环前的入栈表示费解,而外循环开始的出栈也不是很理解。 本帖最后由 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:05 编辑
栈空间问题吧,,,你只定义了一个字栈的空间,而你两次入栈,应该是栈溢出了,是不是有个提醒stack overflow呢,其实你那个循环前的入栈完全是多余的,去掉应该就没事了。。。对了下次发代码用括起来,这样别人方便看 本帖最后由 超越自我 于 2011-5-14 21:06 编辑
真是奇怪了,用你的代码编译怎么提示没有栈段呢!不是有木{:5_94:}
楼主的头像看得我心里发凉{:2_39:} 本帖最后由 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
:L不是吧?还没有结贴? 回复 sunhopp 的帖子
你确定没有问题了么??怎么编译的时候还是说没有栈段呢?麻烦你一步一步调试一下,看能不能全部执行完,谢谢了! 回复 超越自我 的帖子
我这里调试可都是能成功运行的!且结果正确!代码肯定是没有问题。 本帖最后由 超越自我 于 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 编辑
no stack segment;我也有这样的提示!也不知道为什么了!
页:
[1]