吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 549|回复: 3
收起左侧

[学习记录] loop指令+cx寄存器

[复制链接]
knife911 发表于 2024-1-23 08:43
本帖最后由 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

1705977871829.png


执行过程:
1、CX = CX - 1
2、判断此时CX是否为 0
3、如果CX不为 0,则转到标号处执行(jmp 标号)
4、如果CX为 0,则继续向下执行


1705977992994.png

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次方
1705978649362.png
实际上:
(ax)=0004H      执行了2的12次方
若为零,则继续执行下条指令
mov ax,1000h


说明:
1、标号s,实质上是偏移地址
2、CX寄存器中的值就相当于循环的次数

免费评分

参与人数 1吾爱币 +1 收起 理由
kesshei + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

冥界3大法王 发表于 2024-1-23 10:32
@knife911 啥环境下,用的哪款汇编测试平台呢?
 楼主| knife911 发表于 2024-1-23 10:34
本帖最后由 knife911 于 2024-1-23 10:36 编辑
冥界3大法王 发表于 2024-1-23 10:32
@knife911 啥环境下,用的哪款汇编测试平台呢?

vscode+masm/tasm插件,,,,dosbox模拟器,
FelixLee 发表于 2024-1-23 11:15
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表