主题:有个程序,各位大虾帮忙分析一下
程序如下:
assume cs:codesg
codesg segment
mov ax,cs
mov ss,ax
mov sp,number
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21h
db 10 dup(0)
number:
codesg ends
end
1.POP过后原来的数据不是应该不变的吗?为什么POP AX运行前后存储空间的数值有变化呢??(DEBUG里看是有变化)
2.你举的例子里有一句,mov sp,number,number是定义的一个变量,字节变量"00"一共重复10次,也就是10个字节,DEBUG里查看sp的值,该条指令执行后,从最初的0000变为001C,明显不是number变量的长度,用U命令查看,mov ss,ax之后的指令是:mov sp,001C,这句是....???为什么载入程序后会出现一条直接给sp赋值001C的命令呢??
3.还是例子中的一句
db 10 dup(0)
number:
这个是定义number的吧?改为number db 10 dup (0)运行结果就不一样了
是不是这一句根本就不是定义变量的语句呢??
4.该程序DEBUG一步一步运行时没有问题(Windows平台),而另一个程序却会出错,原因是系统没有给程序分配堆栈空间,但是上面这个程序载入后系统给程序分配堆栈空间了吗??
堆栈大小是??
assume cs:codesg
codesg segment
mov ax,cs
mov ss,ax
mov sp,number
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21h
db 10 dup(0)
number:
codesg ends
end
1.POP过后原来的数据不是应该不变的吗?为什么POP AX运行前后存储空间的数值有变化呢??(DEBUG里看是有变化)
2.你举的例子里有一句,mov sp,number,number是定义的一个变量,字节变量"00"一共重复10次,也就是10个字节,DEBUG里查看sp的值,该条指令执行后,从最初的0000变为001C,明显不是number变量的长度,用U命令查看,mov ss,ax之后的指令是:mov sp,001C,这句是....???为什么载入程序后会出现一条直接给sp赋值001C的命令呢??
3.还是例子中的一句
db 10 dup(0)
number:
这个是定义number的吧?改为number db 10 dup (0)运行结果就不一样了
是不是这一句根本就不是定义变量的语句呢??
4.该程序DEBUG一步一步运行时没有问题(Windows平台),而另一个程序却会出错,原因是系统没有给程序分配堆栈空间,但是上面这个程序载入后系统给程序分配堆栈空间了吗??
堆栈大小是??