汇编语言【BX】和LOOP的使用
例子1.向内存0:200~0:23F依次传送数据0~63(3FH)
分析:1. 0:200~0:23F 其实和 0020:0~0020:3F 内存空间是一样的。
2.用BX储存偏移地址,dx寄存器作为存储中间变量的容器(源数据,常量0-63)来向内存写入。
对应的程序代码:
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov ax,0
mov cx,64
s:mov ds:[bx],ax
inc bx
inc ax
loop s
mov ax,4c00h
int 21h
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov ax,0
mov cx,64
s:mov ds:[bx],ax
inc bx
inc ax
loop s
mov ax,4c00h
int 21h
code ends
end
end
经编译连接后生成可执行文件,用debug加载,跟踪它的运行,如图所示:
例子2.向内存0:200~0:23F依次传送数据0~63(3FH),程序只能使用9条指令,9条指令包括"MOV AX 4C00H"和"INT 21H"(返回指令)
分析:数据0-63是64个连续的数字,0-3fH也是连续的64个编号。可以使用一个bx变量就把偏移地址和数字的递增都表示了
程序代码如下:
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s:mov ds:[bx],bx
inc bx
loop s
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s:mov ds:[bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
int 21h
code ends
end
经编译连接后生成可执行文件,用debug加载,跟踪它的运行,如图所示: