1、向内存0:200~0:23F依次传送数据0~63(3FH),用汇编语言写出来
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
mov dx,0
s: mov [bx],dx
inc bx
inc dx
loop s
mov ax,4c00h
int 21h
code ends
end
执行结果如下所示
2、向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov ax,4c00h”和“int 21h”
assume cs:code
code segment
mov ax,0020h
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
3、下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
assume cs:code
code segment
mov ax, cs ;填空处
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx, 17h ;填空处
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
第一个空很好理解,因为我们要复制的是指令,当然是从要获取cs的段地址,接下来主要分析的就是第二个空
当我们写测试代码的时候,原本在程序中CX 给 10h的时候,用Debug将可执行文件加载进内存的时候CX的值为001C 为23个字节大小,减去mov ax,4c00h和int 21h 的5个字节大小,就为17h大小,也就是说为23个字节就可以复制完成。
之后我们将CX改为17h,执行结果如下所示,CX还是001C
紧接着我们再去执行指令,然后去查看0:200的汇编指令果然除了mov ax,4c00h之前的都复制进去了,如下图所示