wuyaozi 发表于 2011-11-5 10:56:23

关于书本6.2章例题数据逆序存放SP的设置问题

本帖最后由 wuyaozi 于 2011-11-5 10:58 编辑

我在学习鱼C6.2章中 "将程序中定义的数据逆序存放"时遇到一个问题
就是书本上面8个数据存放时程序设置栈顶是这样的 MOV SP,30H
而小甲鱼在视频里面设置是这样的MOV SP,32
我不知道哪里是对的 还有加H和不加有区别吗、为什么这里的32不是转化成16进制的数据呢
小甲鱼程序如下:
assume cs:abc
abc segment
    dw 0011h,2233h,4455h,6677h,8899h,9900h,6622h,8866h
    dw 0,0,0,0,0,0,0,0
start: mov ax,cs
    mov ss,ax
    mov sp,32问题就在这里的32 还是32H 还是课本上的30H 还是32的是16进制数20H
    mov bx,0
    mov cx,8
s:push cs:
    add bx,2
    loop s
   mov bx,0
    mov cx,8
   s1:pop cs:
   add bx,2
   loop s1

mov ax,4c00h
int 21h
abc ends
end start

掌心的呵护 发表于 2011-11-5 11:05:30

是32,也就是20H。。。

wuyaozi 发表于 2011-11-5 11:08:05

掌心的呵护 发表于 2011-11-5 11:05 static/image/common/back.gif
是32,也就是20H。。。

关键是照这上面的程序运行,结果不对

ever.g 发表于 2011-11-5 12:22:36

程序没问题吧。。
小甲鱼的代码也没错
只是栈的储存位置不一样。。
sp 30H
sp 32 即 20H只不过错了10H 正好16个字节而已。。
从结果上来说是一样的。
过程上只是栈顶地址不一样而已

100531319 发表于 2011-11-5 12:24:45

本帖最后由 100531319 于 2011-11-5 12:25 编辑

你怎么没有   abc ends? 0011h到8866H是0~15,15加下面的16字节,在指针加1,也就是32=20H,

你得书跟我又点差别,我是0123,0456, 栈空间是16个0{:5_107:}书好像有很多版本一样{:5_94:}

还有我刚学, 也不是很懂, 希望我有什么错,请指正

ever.g 发表于 2011-11-5 12:32:11

本帖最后由 ever.g 于 2011-11-5 12:40 编辑

:L 他都直接弄代码段里了
abc ends 在最后
所以他开始是mov ax,cs 这样可以的



这我直接拷贝的你代码,结果确实逆序存放了~
还有程序中 32 就是10进制
后面带H 32H 就是16进制,不要弄混
另外10101b带b就是2进制

不区分大小写

掌心的呵护 发表于 2011-11-5 14:06:44

wuyaozi 发表于 2011-11-5 11:08 static/image/common/back.gif
关键是照这上面的程序运行,结果不对

可以啊
结果是正确的。。。

18555587 发表于 2011-11-5 19:48:14

是32或者20H
dw是定义字型数据,16个字型数据=32个字节型数据
也就是CS:0~19H

kane080824 发表于 2011-11-5 20:28:29

呵呵在赋值时如果数字后面你不写H,编译器认为你输入的是十进制数字,比如:mov ax,100就和mov ax,64H一模一样
页: [1]
查看完整版本: 关于书本6.2章例题数据逆序存放SP的设置问题