汇编语言之loop指令

cx中存放的是循环的次数

(1)编程计算2^12:

assume cs:code

code segment

mov ax,2

mov cx,11

s:add ax,ax

loop s

mov ax,4c00h

int 21h

code ends

end

执行loop s时,首先要将(cx)减1,若(cx)不为0,则前往s处执行add ax,ax

(2)计算ffff:0-ffff:b单元中的数据之和,结果存储在dx中。

1)分析一下,运算后的结果会不会查过dx所可以承受的存储范围?

ffff:0-ffff:b是字节型数据,范围在0-255,12个这样的数,即使都是255相加也不会超过65535

2)我们是否可以直接将数据累加在dx中?

不可以,因为ffff:0-ffff:b是字节型数据8位,dx中存放16位数据,因此不可以。

3)我们是否可以直接将数据累加到dl中?

不可以,因为dl是8位寄存器,所容纳的数据的范围在0-255之间,ffff:0-ffff:b中的数据也都是8位,若仅向dl累加12个8位数据,可能会造成进位丢失。

4)如何实现?

先用一个16位寄存器作为中介,先将内存单元的8位数据赋值到一个16位寄存器ax中,再将ax中的数据加到dx

代码:

assume cs:code

code segment

    mov ax,0fffh

    mov ds,ax

    mov bx,0

    mov dx,0

    mov cx,12

s:  mov al,[bx]

     mov ah,0

     mov dx,ax

     inc bx

     loop s

     mov ax,4c00h

     int 21h

code ends

end


欢迎关注博主公众号

薛定谔的小鱼儿

猜你喜欢

转载自blog.csdn.net/weixin_38635069/article/details/80572556