一、编程,向内存0:200 ~ 0:23F依次传送数据0 ~ 63(3FH)
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0 ;内存偏移始址
mov cx,64 ;循环40h次
mov ax,0 ;待写入元素的开始值
s: mov ds:[bx],ax
inc bx
inc ax
loop s
mov ax,4c00h
int 21h
code ends
end
因为这里bx和ax都是从0开始,所以我们可以进行一些优化:
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0 ;内存偏移始址及起始值
mov cx,64 ;循环40h次
s: mov ds:[bx],ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
二、下面程序功能是将"mov ax,4c00h"之前的指令复制到内存0:200处,补全程序,调试跟踪结果
assume cs:code
code segment
mov ax,____
mov ds,ax ;ds:ax
mov ax,0020h
mov es,ax ;es:0020
mov bx,0
mov cx,____
s: mov al,[bx] ;将ds:0处的内容送给al
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
我们这里有两行是不确定的值,我们可以在debug下去查看,这里不确定的值可以随便填写,我们填写为1,进入debug后进行观察
在这里我们可以知道,每次复制1字节内容,使用al寄存器进行中转
这里我们可以看到循环次数为076A:0000 ~ 076A:0016,所以cx = 17
第一行的内容应该是CS寄存器中的值给DS寄存器复制,所以第一行填入CS