鱼C论坛

 找回密码
 立即注册
查看: 2359|回复: 9

王爽老师的汇编实验五(6)题

[复制链接]
发表于 2012-7-5 00:02:50 | 显示全部楼层 |阅读模式
3鱼币
本帖最后由 考试郁闷者 于 2012-7-5 21:37 编辑

为什么一步步执行到倒数第三步就跳出了?和标准答案对比了,没有任何差别啊。。。但是就是跳出。。。已经有人问过了,但是没有解决啊!
  1. assume cs:code,ds:a,ss:b
  2. a segment
  3. dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
  4. a ends
  5. b segment
  6. dw 0,0,0,0,0,0,0,0
  7. b ends
  8. code segment
  9. start:
  10. mov ax,a
  11. mov ds,ax
  12. mov ax,b
  13. mov ss,ax
  14. mov sp,10h
  15. mov bx,0
  16. mov cx,8
  17. s: push ds:[bx]
  18. add bx,2
  19. loop s

  20. mov ax,4c00h
  21. int 21h
  22. code ends
  23. end start
复制代码
第一行去掉cs、es段也一样啊!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-5 07:01:24 | 显示全部楼层
最好贴出源代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 10:17:37 | 显示全部楼层
贴出源代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-11 19:24:03 | 显示全部楼层
标准答案在这里
  1. (6)程序如下,编写code段中代码,用PUSH指令将A段中的前8个字型数据,逆序存储到B段中。

  2. assume cs:code

  3. a segment

  4.     dw 1,2,3,4,5,6,7,8

  5. a ends

  6. b segment

  7.     dw 0,0,0,0,0,0,0,0

  8. b ends

  9. code segment

  10. start: mov ax,a

  11.        mov ds,ax   ;ds指向a段

  12.        mov ax,b

  13.        mov bx,0    ;ds:bx指向a段的第1个单元

  14.        mov ss,ax

  15.        mov sp,16   ;设置栈顶指向b:16

  16.        mov cx,8

  17.     s: push [bx]

  18.        add bx,2

  19.        loop s      ;将a段中0~16个单元逆次入栈

  20. code ends

  21. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-12 13:45:07 | 显示全部楼层
14.mov sp,10h,这里错了,栈段长度不够
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-26 08:13:11 | 显示全部楼层
本帖最后由 无限幻想 于 2012-7-26 08:17 编辑

我给一个新思维答案,解题思路是实验五第二题第四个问题答案的结论
assume cs: code

a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends

b segment
dw 0,0,0,0,0,0,0,0
b ends

code segment
start: mov bx, 0
        mov ax, cs
                sub ax, 1h
                mov ss, ax
                mov sp, 16
                mov ax, cs
                sub ax, 3h
                mov ds, ax
                mov cx, 8
               
      s:push [bx]
            add bx, 2
                loop s

        mov ax, 4c00h
                int 21h
code ends
end start
你的答案就是栈顶设置错误,SP 应为16,不然存不下8个数,或者是你画葫芦的时候画失误了,呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-26 10:12:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-26 10:13:29 | 显示全部楼层
无限幻想 发表于 2012-7-26 08:13
我给一个新思维答案,解题思路是实验五第二题第四个问题答案的结论
assume cs: code

16=10H   啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-27 08:53:34 | 显示全部楼层
不好意思,我把你的程序debug了,是正确的,你之所以遇到调试问题是可能系统造成的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-27 09:40:26 | 显示全部楼层
assume cs: code , ds: a, ss: b

a segment
dw 1,2,3,4,5,6,7,8,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends

b segment
dw 0,0,0,0,0,0,0,0
b ends

code segment
start: mov ax, a
       mov ds, ax
       mov ax, b
       mov ss, ax
       mov sp, 22
       mov bx, 0
       mov cx, 8
     s:push ds:[bx]
       add  bx, 2
       loop s
          
           mov ax, 4c00h
           int 21h
code ends
end start
我反复用debug调试了,原先的程序在loop那儿用p就可以通过,一直用t到最后3个就会报错,后来研究了sp的值,发现达到22的时候程序运行无误不会出错,但是查看ss段数据,就不是那么回事,比16多出来的空间有垃圾值存在,08不是从ss:0开始的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 03:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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