指令 mov ax,[bx]
作用:把寄存器bx里的内容当作偏移量(段地址在ds里),把ds:[bx] 地址处的内容放入ax
问题5.1
程序和内存初始情况如下:
程序执行后的,21000H-21007H单元的内容
逐步分析:
- mov ax,2000H
ax = 2000H - mov ds,ax
ds = 2000H - mov bx,1000H
bx = 1000H - mov ax,[bx]
将 ds:[bx] 处, 也就是2000H:1000H, 也就是21000H处的 内容mov到ax里,ax = 00BEH - inc bx
bx += 1 -> bx = 1001H - inc bx
bx += 1 -> bx = 1002H - mov [bx], ax
将ax的内容 (00BEH) 复制到ds:[bx] 处, 也就是2000H:1002H处,
此时21002H字节为BEH,21003H字节为00H - inc bx
bx += 1 -> bx = 1003H - inc bx
bx += 1 -> bx = 1004H - mov [bx],ax
21003H处为BEH,21004H处为00H - inc bx
bx += 1 -> bx = 1005H - mov [bx],al
21005H处为ax的低8位 -> BEH - inc bx
bx += 1 -> bx = 1006H - mov [bx],al
21006H处为ax的低8位 -> BEH
所以结束时内存的情况:
程序验证:
代码:
assume cs:codesg
codesg segment
mov ax,2000H
mov ds,ax
mov bx,1000H
mov ax,[bx]
inc bx
inc bx
mov [bx],ax
inc bx
inc bx
mov [bx],ax
inc bx
mov [bx],al
inc bx
mov [bx],al
mov ax,4c00H
int 21H
codesg ends
end
debug程序:
运行结束时的内存