鱼C论坛

 找回密码
 立即注册
查看: 4893|回复: 16

[汇编作业] 检测点6.1

[复制链接]
发表于 2018-6-8 17:50:56 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 奥普瓯江 于 2018-6-8 18:21 编辑

(1)下面的程序实现依次用内存0:0-0:15单元中的内容改写程序中的数据,完成程序如下:
assume cs:codesg
  codesg segment
    dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
start:  mov ax, 0
          mov ds, ax
          mov bx, 0
         
          mov cx, 8
          s:mov ax, [bx]
          mov cs:[bx], ax    ;在循环的开始cs:[bx]代表数据段dw中的第一个字数据把(ds:[bx])中的数据传给他, 因为用了ax所以传输单位是以“字”这个单位计算的
          add bx, 2
          loop s
          mov ax, 4c00h
          int 21h
codesg ends
end start
(2)下面的程序实现依次用内存0:0-0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。完成程序如下:
assume cs:codesg
codesg segment
  dw 0123h ,0456h, 07879h, 0abch, 0defh, 0ffedh, 0cbah, 0987h
  dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0    ;10个字单元用作栈的空间
start: mov ax, cs       ;debug开始加载程序的时候cs中储存的是执行的段地址,在当前程序中数据和栈段都包含在其中
         mov ss, ax
         mov sp, 24h    ;此处填写24h是因为数据段加上栈段,所得的和是23h在加上栈的指向,多指一个字节所以是24h,在这里需要强调一下他们都是从零开始的
         mov ax, 0h
         mov ds, ax
         mov bx, 0
         mov cx, 8       ;还有这里为什么要写8,个人理解是因为栈的进出栈规则是一次进入1个“字”,一个“字”等于二个字节,出站也是同理,所以只需要循环八次即可
         s:push [bx]
         pop cs:[bx]    ;把栈中的数据取出放在数据段中,这个程序只用到了栈中的储存位置(ss:[23]和ss:[22])这两个储存字节单元
         add bx, 2       ;因为栈的储存是一个“字”所以出站时只需要把低位储存过去他的下一个高位字节也会自动储存过去,这样就会占两个字节的储存空间所以bx要加2
         loop s
         mov 4c00h
         int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-8 14:13:53 | 显示全部楼层
第二题的 mov sp, 24h 算错了吧。。。。。。。。总共18个字型数据的空间乘以二是36个内存空间也就是0-35,所以sp再往下移一个应该就是 mov sp,36 才对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2018-7-8 14:22:36 | 显示全部楼层
shit  我忘了进制了  (*/ω\*)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-9 15:50:49 | 显示全部楼层
有关部门临时工 发表于 2018-7-8 14:22
shit  我忘了进制了  (*/ω\*)

我也总忘
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-30 17:28:49 | 显示全部楼层
一开始没明白看了刚那哥们的留言懂了。感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-25 18:36:15 | 显示全部楼层
有关部门临时工 发表于 2018-7-8 14:13
第二题的 mov sp, 24h 算错了吧。。。。。。。。总共18个字型数据的空间乘以二是36个内存空间也就是0-35, ...

你看清楚,24h是十六进制,36是十进制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-29 03:47:03 | 显示全部楼层
请问你们是怎么看明白题目是想怎样改的?他有说人倒序了吗?他只是说改写程序中的数据.这个是真的看不懂.请楼主解释一下.(答题能看得懂)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-3 21:15:16 | 显示全部楼层
题目中 s:mov ax,[bx]和s:push [bx] 的[bx]前面不应该加上cs:[bx]跟ds:[bx]吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-19 00:12:21 | 显示全部楼层
mnb266 发表于 2019-1-3 21:15
题目中 s:mov ax,和s:push  的前面不应该加上cs:跟ds:吗?

cs:[bx]加了在这里ds:[bx]中的ds是默认的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-21 18:16:01 | 显示全部楼层
0:0-0:15不是应该有22个字节吗,如果用16进制算的话
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-21 18:31:31 | 显示全部楼层
siugaawai 发表于 2018-11-25 18:36
你看清楚,24h是十六进制,36是十进制

mov sp,36也是对的,因为编译器是十进制的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-22 14:31:21 | 显示全部楼层
作业在那???找不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-22 14:31:57 | 显示全部楼层
课后作业在那???找不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-22 17:11:58 | 显示全部楼层
大佬哦 发表于 2019-2-22 14:31
课后作业在那???找不到

去那本书上找王爽写的《汇编语言》第二版,上面有检测点这个标题的,那个就是作业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-2 16:38:49 | 显示全部楼层
我覺得第二個問題, 棧那邊DW 0 就可以了, 根本也沒必要弄那麼多0, 多達10個空間, 但是前面九個都是沒在用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-14 20:11:29 | 显示全部楼层
有关部门临时工 发表于 2018-7-8 14:13
第二题的 mov sp, 24h 算错了吧。。。。。。。。总共18个字型数据的空间乘以二是36个内存空间也就是0-35, ...

16进制24h就是十进制36
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-14 21:30:34 | 显示全部楼层
为什么栈段要 和 数据段 一样长,push 进去,马上pop出来, 不需要24h那么长啊,1个字,2个字节的长度也够用啊?
还是说有其他的规定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 10:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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