汇编语言 循环控制指令

循环控制指令是一组增强型的条件转义指令,用来控制一个程序段的重复执行,重复次数由CX寄存器中的内容决定。这类指令的字节数均为2,第1字节是操作码,第2字节是8位偏移量,转移的目标都是短标号。

LOOP 循环指令(Loop)
指令格式:LOOP 短标号

指令功能:这条指令用于控制重复执行一系列指令。指令执行前必须事先将重复次数放在CX寄存器中,每执行一次LOOP指令,CX自动减1。如果减1后CX≠0,则转移到指令中所给定的标号处继续循环;若自动减1后CX=0,则结束循环,转去执行LOOP指令之后的那条指令。一条LOOP指令相当于执行一下两条指令的功能:

DEC CX
JNZ 标号

以下是
计算 123 * 236 的结果 最后得到结果为 AX = 7164H

assume cs:code

; loop 循环指令  cx = cx - 1  检测cx 是不是等于 0
; 循环体
; cx 循环次数

code segment
				mov ax, 0
				mov cx, 123
				
addNumber:  	add ax, 236
				mov dx, 1000H
				mov dx, 2000H
				loop addNumber   ;标号  地址
				
				mov ax, 4C00H
				int 21H
code ends

end

以下是
求FFFF:0 到FFFF:F 字节型数据的和 结果存放在DX中
在这里插入图片描述

assume cs:code
; loop 循环指令  cx = cx - 1  检测cx 是不是等于 0

code segment
				mov ax, 0FFFFH
				mov ds, ax
				mov bx, 0
				
				mov ax, 0
				mov dx, 0
				
				mov cx, 16
				
addNumber:  	mov al, ds:[bx]
				add dx, ax
				inc bx
				loop addNumber   ;标号  地址
				
				mov ax, 4C00H
				int 21H
				
code ends

end

注:数据不允许字母开头 0FFFFH 0BCH
以下是运行结果:
在这里插入图片描述
将FFFF:0~FFFF:F 中的字节型数据 复制到 0:200 - 0:20F中

第一种方式:
assume cs:code

code segment
				mov bx, 0
				mov cx, 16
				
copyDate:  		mov ax, 0FFFFH
				mov ds, ax
				mov dl, ds:[bx]
				
				mov ax, 0020H
				mov ds, ax
				mov ds:[bx], dl
				
				inc bx
				loop copyDate
				
				mov ax, 4C00H
				int 21H
				
code ends

end
第二种方式
assume cs:code

; 数据不允许字母开头 0FFFFH  0BCH

code segment
				mov ax, 0FFFFH
				mov ds, ax
				
				mov ax, 0020H
				mov es ,ax
				
				mov bx, 0
				mov cx, 16
				
copyDate:  		mov dl, ds:[bx]
				mov es:[bx], dl
				inc bx
				loop copyDate   ;标号  地址
				
				mov ax, 4C00H
				int 21H
				
code ends

end

运行结果:
在这里插入图片描述
注:0:200H ~ 0:2FFH 和 0:7E00H ~ 0:FFFFH 属于可用区域,否则会涉及到内存安全的问题。

向内存0:200 - 0:23F 传递数据0~63(3FH)

assume cs:code

code segment
				mov ax, 0020H
				mov es, ax
			
				mov bx, 0
				
				mov ax, 0
				
				mov cx, 64
				
addNumber:  	mov es:[bx], al
				inc bx 
				inc al
				loop addNumber
				
				mov ax, 4C00H
				int 21H
				
code ends

end

运行结果:
在这里插入图片描述

下面的程序功能是将 mov ax, 4C00H 之前的指令复制到内存 0:200
需要考虑:

  • 1.复制的是什么?
  • 2.从哪里到哪里?
  • 3.有多少个字节?
assume cs:code

code segment
				mov ax, cs
				mov ds, ax
			
				mov ax, 0020H
				mov es, ax
				mov bx, 0
				
				mov cx, 17H
				
copyDate:  	    mov al, ds:[bx]
				mov es:[bx], al
				inc bx
				loop copyDate
				
				mov ax, 4C00H
				int 21H
				
code ends

end

要复制的指令所占的字节
在这里插入图片描述

程序执行后:
在这里插入图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值