鱼C论坛

 找回密码
 立即注册
查看: 5905|回复: 12

[汇编作业] 检测点6.1

[复制链接]
发表于 2020-3-28 13:55:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 流风逸雪 于 2020-3-28 13:56 编辑

(1)
  1. assume cs:codesg
  2. codesg segment
  3.         dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
  4. start:
  5.         mov ax,0
  6.         mov ds,ax
  7.         mov bx,0
  8.         mov cx,8
  9. s:        mov ax,[bx]
  10.         mov cs:[bx],ax//dw对应地址为cs:从0到定义数量*2,将ds:[bx]的数覆盖dw
  11.         add bx,2
  12.         loop s
  13.        
  14.        
  15.         mov ax,4c00H
  16.         int 21h
  17. codesg ends
  18. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-28 15:04:20 | 显示全部楼层
(2)
  1. assume cs:codesg
  2. codesg segment
  3.         dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
  4.         dw 0,0,0,0,0
  5. start:
  6.         mov ax,cs//要将第二行作为栈空间的地址传递给ss,以便push和pop
  7.         mov ss,ax
  8.         mov sp,16
  9.         mov ax,0
  10.         mov ds,ax
  11.         mov bx,0
  12.         mov cx,8
  13. s:        push [bx]
  14.         pop cs:[bx]//入栈再出栈相当于传递值
  15.         add bx,2
  16.         loop s
  17.        
  18.        
  19.         mov ax,4c00H
  20.         int 21h
  21. codesg ends
  22. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 22:04:40 | 显示全部楼层
第二题, dw 0,0,0,0,0,0,0,0//后面是8个0
              mov sp,32
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-1 10:32:38 | 显示全部楼层
红尘摆渡人 发表于 2020-3-30 22:04
第二题, dw 0,0,0,0,0,0,0,0//后面是8个0
              mov sp,32

你仔细看我的注释,入栈再出栈不需要那么多0,事实上2个0就够了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 10:36:39 | 显示全部楼层
本帖最后由 流风逸雪 于 2020-4-1 11:43 编辑
红尘摆渡人 发表于 2020-3-30 22:04
第二题, dw 0,0,0,0,0,0,0,0//后面是8个0
              mov sp,32


其实就算0个数少于8,编译器也会分配16个00.问题在于入栈再出栈无论循环多少次占用的空间都不会超过2个0.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 22:52:19 | 显示全部楼层
楼主,请问
为啥说
0个数少于8,编译器也会分配16个00,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-2 16:56:39 | 显示全部楼层
流风逸雪 发表于 2020-4-1 10:32
你仔细看我的注释,入栈再出栈不需要那么多0,事实上2个0就够了

对的,实际上2个就够了,取决于你准备留的栈多大来设置,只要是>2 都可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-30 03:19:30 | 显示全部楼层
(2)题目不是要求10个字单元的栈空间吗?
怎么把题目都改了? 如果是10个字单元的栈空间,sp = 15 + 10 * 2 + 1 = 36 或 24H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-4 14:27:21 | 显示全部楼层
结果 4BDB吗?+
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-12 02:24:30 | 显示全部楼层
本帖最后由 qq113009 于 2021-10-12 02:41 编辑

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

使用道具 举报

发表于 2021-12-31 01:57:16 | 显示全部楼层
完全错误,看的我一脸懵逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 11:05:06 | 显示全部楼层
按照题目MOV SP,34H啊,我是这样理解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-16 18:40:38 | 显示全部楼层
本帖最后由 snrjtg1 于 2022-2-16 19:48 编辑

怎么感觉取出来的第一个数就把栈顶给覆盖了
sp为8,一开始栈顶在0789的07上,然后第一次压入的【bx】是DS:0也就是0000:0里的数据,然后再pop cs:[bx]j是将0123中用ds:0中的数据给覆盖了,下一次就用0000:1中的数据将cd:[01]中的数据0456给覆盖了
这是我的理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 15:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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