汇编语言 循环控制指令

发布者:Huixin8888最新更新时间:2022-10-20 来源: csdn关键字:汇编语言 手机看文章 扫描二维码
随时随地手机看文章

循环控制指令是一组增强型的条件转义指令,用来控制一个程序段的重复执行,重复次数由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


要复制的指令所占的字节

在这里插入图片描述

程序执行后:

在这里插入图片描述

关键字:汇编语言 引用地址:汇编语言 循环控制指令

上一篇:汇编语言 AND逻辑与指令
下一篇:使用DOSBox编译汇编代码

推荐阅读最新更新时间:2024-11-13 07:58

包含中断的LED显示汇编语言程序
例:电路如图。要求编程实现:主程序将P1口的8个LED从上到下循环显示(间隔时间约1S ), 中断 时(INT0)使8个LED同时闪烁5次(间隔时间约1S,设单片机晶振为6M)。 图片1 (1)主程序 ORG 0000H LJMP START START:MOV IE,#10000001B;允许INT0中断 MOV IP,#00000001B;INT0中断优先 MOV TCON,#01H ;INT0边沿触发方式 MOV SP,#70H MOV A,#80H ;左移初值 LOOP1:RL A
[单片机]
包含中断的LED显示<font color='red'>汇编语言</font>程序
51单片机驱动1602液晶汇编语言程序
LCMRS EQU P2.4 LCMRW EQU P2.5 LCMEN EQU P2.6 LCMDATA EQU P0 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#60H LCALL LCMSET LCALL LCMCLR MOV A,#80H LCALL LCMWR0 MOV DPTR,#TAB0 LCALL LCMWR2 MOV A,#0C0H LCALL LCMWR0 MOV DPTR,#TAB1 LCALL LCMWR2 SJMP $ TAB0: DB I AM YUAN MING ,00H TAB1: DB NICE TO MEET YOU ,00H LCMLAY:
[单片机]
汇编语言 字母的大小写转换
大小写转换问题 A 41H 0100 0001B or 0010 0000B 转换为小写 B 42H 0100 0010B C 43H 0100 0011B D 44H 0100 0100B a 61H 0110 0001B and 1101 1111B 转换为大写 b 62H 0110 0010B c 63H 0110 0011B d 64H 0110 0100B 方法一: assume cs:code data segment db 'ABcDEF' ; 将ABcDEF全部转换为小写 db 'abCdef'
[单片机]
<font color='red'>汇编语言</font> 字母的大小写转换
STM8与汇编语言(12)--EEPROM应用
在单片机的应用系统中,经常会用到EEPROM,用来保存一些掉电后仍然需要保存的数据。传统的方法是在单片机外再加一个EEPROM芯片,这种方法除了增加成本外,也降低了可靠性。现在,许多单片机芯片公司也都推出了集成有小容量EEPROM的单片机,降低了成本,提高了可靠性。 STM8单片机芯片内部也集成有EEPROM,容量从640字节到2K字节。最为关键的是,在STM8单片机中,访问EEPROM就向访问常规的内存一样,非常方便。EEPROM的地址空间与内存是统一编址的,地址从004000H开始,大小根据不同的芯片型号而定。 如果我们要读出EEPROM中的第一个单元的内容,则只要执行LD A,$4000这条指令,就可以将EEPROM
[单片机]
嵌入式系统学习笔记(6)——MCS51汇编语言程序设计
有汇编程序和反汇编程序,可以由机器语言得到汇编语言 不是所有都会默认从0000H开始,保险起见,还是要在开头用ORG 0000H,然后加一条跳转指令到程序存放起始地址 交叉汇编,在一台电脑上汇编,在另一台电脑上运行 注意,除了51单片机之外,其它单片机上电后PC值并不一定是0000H,所以需要根据实际情况放第一条指令的位置。此外,0003H到0023H是中断入口,所以第一条指令只能是0000H到0002H一共三个字节,LJMP指令恰好就是3个字节。跳转后的两个NOP是为了等外接芯片复位,因为外接芯片可能复位比51的CPU慢,这段时
[单片机]
嵌入式系统学习笔记(6)——MCS51<font color='red'>汇编语言</font>程序设计
STM8与汇编语言(15)--AD转换
现在大部分的单片机也都具备了A/D转换器,有8位的,也有10位的,当然性能好的具备了12位的A/D。在STM8单片机中,提供的是10位的A/D,通道数随芯片不同而不同,少的有4个通道,多的则有16个通道。 下面的实验程序首先对A/D输入进行采样,然后将采样结果的高8位(丢弃最低的2位),作为延时参数去调用延时子程序,然后再去驱动LED控制信号。因此不同的采样值,决定了LED的闪烁频率。当旋转ST三合一开发板上的电位器时,可以看到LED的闪烁频率发生变化。 同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 stm8/ #include mapping.inc
[单片机]
嵌入式汇编语言学习经验
最近参与了一个项目,需要用嵌入式汇编写测试程序。汇编程序写过,C程序也写过,但是将它们混合起来写还是第一次,完全没有概念。只能上网找资料,自己慢慢摸索。 自己一直用Windows操作系统,但是我们的项目是在Linux系统上,这两者的汇编语言系统是不同的,windows一直是Intel汇编,而Linux是At&T汇编。为了调试的方便,我决定现在windows中尝试着写点嵌入式汇编,然后再在Linux中写(主要原因是自己对Linux调试不熟悉)。 首先遇到的第一个问题是,格式到底是什么。上网查资料,前篇一律,都是_asm_ _volatile_(…);格式,但是自己弄的时候总是不行,说明网络虽好,但是不可盲目相信。经过多番测试
[单片机]
单片机外中断汇编语言和C语言程序
以下两个程序效果相同,一个使用汇编语言,一个使用C语言,从仿真效果看,c语言程序运行比较流畅。 两个外中断跑马灯汇编语言程序 ORG 0000H LJMP MAIN ORG 0003H LJMP WZD0 ORG 0013H LJMP WZD1 ORG 0040H WZD0: MOV DPTR,#0220H MOV R3,#42D CB0: CLR A MOVC A,@A+DPTR MOV P1,A INC DPTR LCALL DELAY2 DJNZ R3
[单片机]
单片机外中断<font color='red'>汇编语言</font>和C语言程序
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved