loop指令+cx寄存器
本帖最后由 knife911 于 2024-1-23 11:02 编辑;示例代码
assume cs:code
code segment
mov ax,0002H ;ax寄存器赋值2
mov cx,000BH ;cx寄存器赋值11
s: add ax,ax ;ax=ax+2
loop s ;执行标号为s处的代码
mov ax,1000H
int 21H
code ends
end
执行过程:
1、CX = CX - 1
2、判断此时CX是否为 0
3、如果CX不为 0,则转到标号处执行(jmp 标号)
4、如果CX为 0,则继续向下执行
debug -t单步执行
可以看到程序从段寄存器:偏移地址CS:IP=0E24:0000处开始执行。
寄存器AX中内容在累加
CX寄存器中的值在每次循环后减1直至为0,跳出循环
执行dos中断指令。
1cx初始值=11(000BH)
(cx)=(cx)-1
ax=0002H ax初始值0002H
add ax,ax (ax)=0004H
(cx)=000BH
10=11-1 第1次执行s
9=10-1 第2次执行s
.
.
.
0=1-1 第11次执行s
判断cx的值是否为0
若不为零,则跳转至标号s处
ax寄存器中的值:AX=1000h= 2,4,8,16,32,64,128,256,512,1024,2048,4096=2的12次方
实际上:
(ax)=0004H 执行了2的12次方
若为零,则继续执行下条指令
mov ax,1000h
说明:
1、标号s,实质上是偏移地址
2、CX寄存器中的值就相当于循环的次数
@knife911 啥环境下,用的哪款汇编测试平台呢? {:301_986:} 本帖最后由 knife911 于 2024-1-23 10:36 编辑
冥界3大法王 发表于 2024-1-23 10:32
@knife911 啥环境下,用的哪款汇编测试平台呢?
vscode+masm/tasm插件,,,,dosbox模拟器, 汇编基础知识
页:
[1]