王爽汇编第五章,[bx]和loop指令

王爽汇编第五章,[bx]和loop指令

[bx]和loop指令

[bx]之前我们介绍寄存器的时候,已经很详细的说明过了,bx是偏移寄存器用来索引,那么加上[]表示他是一个内存单元,段地址在ds寄存器中,偏移地址在bx中,计算方式:ds*16 + bx

looploop指令是一个循环指令,他的指令格式是loop 标号,CPU执行loop指令的之后,要进行两个步骤:

  • (cx) = (cx) - 1
  • 判断cx的值,不为0则转到标号出继续执行程序,直到cx为0才停止。

例子:

计算2的12次方

assume cs:code

code segment
start:
	  mov ax,2
	  mov cx,11;循环的次数
	s:add ax,ax;在汇编中标号其实代表一个地址.
	  loop s
	  
	  ;程序退出
	  mov ax,4c00h
	  int 21h
code ends
end start

loop和[bx]的联合应用

问题:计算ffff:0 ~ ffff:b单元中的数据的和,结果存放在dx中。

解题思路:

  • 这些内存单元都是字节型数据范围在(0~255)中,12个字节的数据不会超过0xFFFF, 所以dx寄存器可以存下。
  • 对于8位的数据不能直接加到dx中,所以我们应当采用[bx]寻址。
assume cs:code

code segment
start:;1
	  mov ax,0ffffh ;设置段寄存器
	  mov ds,ax
	  ;2
	  mov bx,0;从ffff:0开始寻址
	  mov ax,0;sum
	  ;3
	  mov cx,0bh;循环次数
s:    mov al,ds:[bx]
      mov ah,0
      add dx,ax
      inc bx
      loop s
      
      ;程序退出
	  mov ax,4c00h
	  int 21h
	  
code ends
end start

参考文献:
https://blog.csdn.net/qq_39654127/article/details/88698911

posted @ 2021-07-27 10:09  VxerLee昵称已被使用  阅读(168)  评论(0编辑  收藏  举报