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
欢迎关注博主公众号
薛定谔的小鱼儿