当前位置: 代码迷 >> 汇编语言 >> 汇编求解,该如何解决
  详细解决方案

汇编求解,该如何解决

热度:426   发布时间:2013-02-26 00:00:00.0
汇编求解
下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:
C/C++ code
assume cs:codesgcodesg segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hstart: mov ax,0mov ds,axmov bx,0mov cx,8s: mov ax,[bx]mov cs:[bx],axadd bx,2loop smov ax,4c00hint 21hcodesg endsend start

以上代码是该问题的参考答案。
我的问题是:这一句s: mov ax,[bx]没有问题吗,根据王爽所讲,两个数据的类型需要匹配,ax是寄存器16位而[bx]是内存地址8位,这样是不是有问题?

------解决方案--------------------------------------------------------
mov ax,[bx];这句表示DS:[bx]中的2个字节给ax

如果是
mov al,[bx];这句表示DS:[bx]中的1个字节给al

------解决方案--------------------------------------------------------
没有问题, ax就确定了是16位数据, 因此这里[bx]指的是 [bx]和[bx+1]组合的16位数据
------解决方案--------------------------------------------------------
问题楼上都说了,楼主要搞清谁决定谁的问题。
------解决方案--------------------------------------------------------
定义数据是 字, dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h


如果定义为 字节 时:(部份代码需要改动 如下)
s: mov ax,dword ptr [bx]
mov dword ptr cs:[bx],ax
  相关解决方案