鱼C论坛

 找回密码
 立即注册
查看: 2450|回复: 2

关于零基础学汇编监测点6.1的问题。

[复制链接]
发表于 2012-4-23 14:32:18 | 显示全部楼层 |阅读模式
1鱼币
下面的程序实现依次用内存0:0-0:15单元中的内容改写程序中的数据,完成程序
assume cs:code
code 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    ;这里是小甲鱼老师给出的答案。
      add bx,2
      loop s
      mov ax,4c00h
      int 21h
code ends
end start

这个是小甲鱼老师给出的标准答案,我有一个疑问。请老师解答.
根据题目的要求,实现依次内存0:0-0:15内存改写程序中的数据,最后填空哪里,如何得知CS是0000H和偏移地址也是0H?
如果这样写是否是将AX的值写入到了,程序当前CS的段地址+偏移地址0,这里的CS可以是很多数值。(比如我的电脑上CS就指向了0753:0, 而并非题目要求的0:0处)所以这个好像和题目要求不太一样。。。或者是我自己的理解有问题。是否在不给CS赋值的情况下,也就是不给出段地址的情况下,CS默认是0?而不是系统自动分配?

下面写出我自己对该程序的理解,望指点:
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  ;IP00H-10H的内容。
start:mov ax,0   ;ax=0
      mov ds,ax   ;ds=0
      mov bx,0    ;bx=0
      mov cx,8    ;cx=8
s:    mov ax,[bx]   ;将当前CS段地址:0的内存单元的内容送入ax. 这里的内容应该是上面00-10H的数据段内容。
      mov cs:[bx],ax    ;然后又将刚才赋值的ax内容,又反过来送回到刚才那个位置去。这里很矛盾。
      add bx,2              ;IP+2
      loop s                   ;跳转循环
      mov ax,4c00h
      int 21h
code ends
end start

初学者,学到这里就已经开始犯迷糊了。望老师耐心解答,是否[BX]在默认情况下是DS:[BX]这种,而并非CS:[BX]?循环那句是否应该写成mov ax,ds:[bx]
                     mov cs:[bx],ax
望老师详细解答!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-4-23 14:40:12 | 显示全部楼层
这个问题是我自己的问题,前面课本我没有理解好,mov ax,[BX],等同于mov ax,ds:[bx] ,主要是被小甲鱼那句  mov cs:[bx],ax,搞迷糊了。。。。。。疑问已经解决。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-7 22:44:31 | 显示全部楼层
多谢分享,很有用!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 14:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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