汇编求解下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:assume cs:codesgcodes
汇编求解
下面的程序实现依次用内存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
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end 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