王爽汇编第五章,[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

上一篇:运行期优化 Java内存模型与线程 线程安全与优化


下一篇:案例一(haproxy+keepalived高可用负载均衡系统)【转】