芒果0011 发表于 2012-2-8 13:55:04

10.12 照书上写的代码为什么运行不出来,求解

assume cs:code,ds:data,ss:stack

data segment
db 'word',0
db 'unix',0
db 'wind',0
db 'good',0
data ends

stack segment
dw 8 dup(0)
stack ends

code segment

start: mov ax,data
mov ds,ax

mov bx,0
mov sp,16

mov cx,4
s:mov si,bx
call capital
add bx,5
loop s

mov ax,4c00h
int 21h

capital:push cx
push si

change:mov cl,
mov ch,0
jcxz ok
and byte ptr ,11011111b
inc si
jmp short change

ok: pop si
pop cx
ret

code ends
end start
求解,哪里错了

小马过河 发表于 2012-2-8 17:32:21

mov sp,16这句之前 你定义堆栈段了吗
mov ax,stack
mov ss,ax

Seely 发表于 2012-2-8 19:24:13

小马过河 发表于 2012-2-8 17:32 static/image/common/back.gif
mov sp,16这句之前 你定义堆栈段了吗
mov ax,stack
mov ss,ax

很明显他定义了。
你的代码没有问题。
你可以“g” 到 int 21h的地址,然后查看内存。
或者把你的堆栈段改大点。

芒果0011 发表于 2012-2-14 16:11:18

嗯,我没有把stack的地址传给ss,导致了栈的数据覆盖了data的数据,谢两位大虾了{:5_110:}
页: [1]
查看完整版本: 10.12 照书上写的代码为什么运行不出来,求解