关于汇编语言中的LOOP指令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于汇编语言中的LOOP指令相关的知识,希望对你有一定的参考价值。
参考技术A这个程序循环一次,是由CX存放的。
cx中存放的是循环的次数
编程计算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。
CPU执行LOOP指令的时候,要进行两步操作:
1 (cx)=(cx)-1
2 判断cx中的值,不为零则转移到标号处执行程序,如果为零,则向下执行
例1 计算2^2 结果放在AX
CODE SEGMENT
ASSUME CS:CODE
MOV AX,2
ADD AX,AX
MOV AX,4C00H
INT 21H
code ENDS
END
例2 计算2^3 结果放在AX
CODE SEGMENT
ASSUME CS:CODE
MOV AX,2
ADD AX,AX
ADD AX,AX
MOV AX,4C00H
INT 21H
code ENDS
END
扩展资料:
注意:
计算ffff:0-ffff:b单元中的数据之和,结果存储在dx中。
运算后的结果会不会查过dx所可以承受的存储范围。
ffff:0-ffff:b是字节型数据,范围在0-255,12个这样的数,即使都是255相加也不会超过65535
不可以直接将数据累加在dx中。
因为ffff:0-ffff:b是字节型数据8位,dx中存放16位数据。
不可以直接将数据累加到dl中,因为dl是8位寄存器,所容纳的数据的范围在0-255之间,ffff:0-ffff:b中的数据也都是8位,若仅向dl累加12个8位数据,可能会引起进位丢失的这种情况。
汇编语言 循环控制指令
循环控制指令是一组增强型的条件转义指令,用来控制一个程序段的重复执行,重复次数由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 属于可用区域,否则会涉及到内存安全的问题。
以上是关于关于汇编语言中的LOOP指令的主要内容,如果未能解决你的问题,请参考以下文章