4.2 循环语句loop,等差数列求和

119 阅读1分钟

汇编语言

1. 循环语句loop

loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两部操作

  1. cx = cx - 1;
  2. 判断cx中的值,不为0则转至标号处执行程序,如果为0则向下执行
  • 循环使用loop来实现,循环次数存放在cx当中
  • cx相当于计数器(count)

2. 编程计算2^12,结果存在ax中

//code.asm文件代码
assume cs:codesg  //相当于c++头文件
codesg segment
    mov ax,2
    mov cx,11
    s:                 //相当于Python的函数定位,函数名:
            add ax,ax  //相当于二进制右移一位
            loop s  //cx不为0,回到循环前
            
    int 21h  //结束代码

codesg ends
end

//code.asm编译、链接和运行
mount c d:masm
c:
dir
masm
code
link
code
debug code.exe
r
t

image.png

image.png

3. 循环tips

3.1 u 076a:0000

  • 代码被放在cs:0000里面,如076a:0000
  • 我们可以提前查看代码,来确定程序将执行到的地址,不然每次都按t执行代码很麻烦

3.2 g 0012

  • g 0012 这一行代码可以执行到程序的最后一步
  • g(go) 偏移地址,直接执行到这一步

image.png

3.3 p指令

  • 我们希望循环一次执行完,可以使用p命令来达到目的
  • 在遇到loop时,可以用p命令一次执行完循环

image.png

4. 实现从1加到100

assume cs:codesg
codesg segment
	mov ax,0
	mov bx,0
	mov cx,100
	s:
		inc ax
		add bx,ax
		loop s
	int 21h
codesg ends
end

image.png

image.png

image.png