吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1818|回复: 6
收起左侧

[求助] 王爽汇编语言6.3疑惑点

[复制链接]
qwert0312 发表于 2020-1-6 23:29
书本给出的程序内容为:
assume cs:code
code segment
             DW 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H
                         DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   //按照我的理解,应该是DW 0,0,0,0,0,0,0,0  八个字就可以了,何必需要16个字.
                         start:mov ax,cs
                               mov ss,ax
                                   mov sp,30H                        //按照我的理解,应该是八个字20H就可以了,何必需要16个字.
                                   mov bx,0
                                   mov cx,8
                                 s:push cs:[bx]
                   add bx,2
                   loop s
                       mov bx,0
                   mov cx,8
                                so:pop cs:[bx]
                   add bx,2
                   loop s0
                   mov ax,4c00H
                   int 21H
code ends
end start
但是从我看的书本知识来看,这道题只是要将开始给出的8组字逆序排放,那么栈地址书本上为什么要给出的是30H?我觉得给8个字20H就可以了.另外我测试了下,发现20H也可以正常逆序排放,请问书本上的30H是作为什么目的?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaohui888 发表于 2020-1-7 09:50
不懂汇编,但是你说的8字,一个宽字符为2个字节,8个字等于16字符,没毛病呀!!
cube 发表于 2020-1-8 17:27
把DW 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H看成
DW 01H,023H,04H, 56H,07H,89H,0AH,BCH,0DH,EFH,0FH,EDH,0CH,BAH,09H,87H就可以理解了
z1390595 发表于 2020-1-12 16:34
我个人的理解是,sp是水桶底部的水瓢(底部指针),你往栈里加水(数据),水瓢(指针)就往上浮。
虽然伪指令好像不一定就直接申请空间了,但他一开始的指令就相当于申请了16个字大小的空间,这时,如果把sp设为16个字,那就是在桶低的位置,如果设为8个字,那就是用铁板封死了8个字的位置,直接从一半开始用起了。

另外,实际执行循环的控制变量是CX,所以只要栈的空间够,你SP要弄个特别大的空间也是没半毛钱问题的。
z1390595 发表于 2020-1-12 16:44
z1390595 发表于 2020-1-12 16:34
我个人的理解是,sp是水桶底部的水瓢(底部指针),你往栈里加水(数据),水瓢(指针)就往上浮。
虽然伪 ...

另外,不太懂,为什么20H是8个字,30H是16个字?
30H = 48
20H = 32
10H = 16
8个字应该是16字节吧。
所以我估计这里改成10H应该也可以吧?,楼主要不要考虑试下?(我这边没有汇编环境,所以没有自己尝试了)
 楼主| qwert0312 发表于 2020-1-13 00:02
本帖最后由 qwert0312 于 2020-1-13 00:04 编辑
z1390595 发表于 2020-1-12 16:44
另外,不太懂,为什么20H是8个字,30H是16个字?
30H = 48
20H = 32

你好,因为定义数据用掉了16个字节,然后再定义栈空间又用掉了16个字节,如果栈为空,SP等于栈底加1,所以如果我定义的是16个字节,那么SP自然等于20H.如果定义SP是10F,那么push将会更改掉定义的原始数据.
z1390595 发表于 2020-1-13 09:34
qwert0312 发表于 2020-1-13 00:02
你好,因为定义数据用掉了16个字节,然后再定义栈空间又用掉了16个字节,如果栈为空,SP等于栈底加1,所以如果 ...

对哦,太久没用汇编了,有点忘记了。
以前写汇编的时候都习惯另外定义SS段的,忽略了你 mov ss,ax;那句了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 22:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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