(1) (2)
数据和内存单元正好都是64,从0开始递增
assume cs:code
code segment
mov ax,20h
mov ds,ax
mov bx,0
mov cx,64
s: mov [bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
最后查看0:200-0:23f的内容,可以发现的确是0到3f(63)
(3)
assume cs:code
code segment
mov ax,cs(第一条指令开始的地方)
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,8h(先随便填一个数据,然后再通过debug跟踪时查看)
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
cx值为001ch
现在看看程序的16进制编码:
程序从076a:0到076a:0016,所以前两排就是我们要复制的程序
所以要循环17h次将076a:0到076a:0016复制到0:200处
现在执行程序并用-d 20:0查看0:200处内容
可以看到从076a:0到076a:0016两者是一样的,说明复制成功
复制的是mov ax,4c00h之前的程序代码
共17h(23)个字节,通过-u命令查看开始到mov ax,4c00h之前共多少内存单元,一个内存单元一个字节。