大股东 发表于 2012-4-23 14:32:18

关于零基础学汇编监测点6.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,
      mov cs:,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,   ;将当前CS段地址:0的内存单元的内容送入ax. 这里的内容应该是上面00-10H的数据段内容。
      mov cs:,ax    ;然后又将刚才赋值的ax内容,又反过来送回到刚才那个位置去。这里很矛盾。
      add bx,2            ;IP+2
      loop s                   ;跳转循环
      mov ax,4c00h
      int 21h
code ends
end start

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

大股东 发表于 2012-4-23 14:40:12

这个问题是我自己的问题,前面课本我没有理解好,mov ax,,等同于mov ax,ds: ,主要是被小甲鱼那句mov cs:,ax,搞迷糊了。。。。。。疑问已经解决。

2004wmj 发表于 2014-9-7 22:44:31

多谢分享,很有用!
页: [1]
查看完整版本: 关于零基础学汇编监测点6.1的问题。