汇编语言-[BX]和loop指令
汇编语言-[BX]和loop指令
[BX]指令介绍
mov ax,[bx]
功能:
bx为偏移地址,段地址默认为ds。因此,上面指令作用就是将ax中的数据送入内存ds:bx处,即:((ds)*16 + (bx)) = (ax)
也可以通过下面指令实现上面指令功能:
mov ax,ds:[bx]
//mov ax,es:[bx]
通过这种ds:[bx]
,通过这种方式来获得ds:bx
中的内容。同理也可以获得es:[bx]中的内容。
注:这里的[bx],不可以改为[ax],或者其他的代替。
loop指令介绍
mov cx,12H
s:
mov dx,es:[bx]
mov ds:[bx],dx
inc bx
loop s
mov ax,4c00H
功能:
通过loop,来完成循环操作。
下面对参数进行一一讲解:
s:标记符,标记符就是其所在的指令的地址。例如上面程序:s就表示
mov dx,es:[bx]
指令的地址。cx:相当于for循环中的x,每次运行到loop指令时,cx的数值就会 -1 。当cx为零的时候,退出loop循环。
loop: 当cpu执行loop的时候,要进行两步操作:
- cx = cx - 1
- 判断cx中的数值是否为0。不为0则转至标号s所标识的地址处执行(这里的指令是mov dx,es:[bx]),如果为0则执行下一条指令(下一条指令是mov ax,4c00H)
loop 和 [bx]混合运用
assume cs:code
code segment
mov ax,20H
mov ds,ax
mov bx,0
mov cx,40H
s:
mov [bx],bx
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
上面代码,实现了向内存0:200~0:23F,依次传送数据0~63(3FH)的功能。