好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 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寄存器中的值就相当于循环的次数
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|