8086 汇编笔记(四):[BX] 和 loop 指令

一、BX

bx 同样也表示一个内存单元,它的偏移地址在 bx 中,比如下面的指令:

复制代码
mov ax,[bx]

二、loop 指令

通常我们用 loop 指令来实现循环功能,cx 中存放循环次数

案例:计算 2^12

复制代码
codesg segment

    mov ax,2
    mov cx,11
s:  add ax,ax
    loop s

    mov ax,4C00H
    int 21H

codesg ends

end

CPU 执行 loops 的时候,要进行两步操作:

1:(cx)(cx)-1;

2:判断 cx 中的值,不为0则转至标号s所标识的地址处执行(这里的指令是 add ax,ax),如果为0则执行下一条指令(下一条指令是 mov ax,4c00h)。

三、Debug 和汇编编译器 masm 对指令的不同处理

(1) 在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用"..."来表示内存单元,如果在"门"里用一个常量 idata 直接给出内存单元的偏移地址,就要在"\[\]"的前面显式地给出段地址所在的段寄存器。比如

复制代码
mov al,ds:[0]

如果没有在 "\[\]" 的前面显式地给出段地址所在的段寄存器,比如

复制代码
mov al,[0]

那么,编译器 masm 将把指令中的"idata"解释为"idata"

(2) 如果在"门"里用寄存器,比如 bx,间接给出内存单元的偏移地址,则段地址默认在 ds 中。当然,也可以显式地给出段地址所在的段寄存器。

四、段前缀

复制代码
mov ax,cs:[0]
mov ax,ss:[0]
mov ax,es:[bx]
mov ax,ss:[bx]
mov ax,ds:[bx]

这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的 "ds:","cs:","ss","es"在汇编语言中称为段前缀

五、一段安全的空间

  1. 我们需要直接向一段内存中写入内容;

  2. 这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误;

  3. DOS 方式下,一般情况,0:200~0:2ff 空间中没有系统或其他程序的数据或代码;

  4. 以后,我们需要直接向一段内存中写入内容时,就使用 0:200~0:2ff这段空间。

相关推荐
菩提小狗1 小时前
每日安全情报报告 · 2026-10-02
网络安全·漏洞·cve·安全情报·每日安全
红红谈说2 小时前
论坛帖子审核链路怎么设计?内容安全与状态机的一次复盘
安全·状态机·内容审核·敏感词·异步审核
风123456789~8 小时前
【架构专栏】第18章 安全架构设计 1/3
安全·架构·安全架构
白帽攻防录8 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
天远API8 小时前
零信任架构实战:基于天远运营商三要素简版V即时版查询构建自动化司乘安全绑定网关
人工智能·安全·架构·自动化
FakeOccupational10 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记
要吃这碗饭11 小时前
深入理解 TCP 协议:从三次握手到可靠传输
网络·网络协议·tcp/ip
和裕11 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
呉師傅13 小时前
得力P2500、M2500系列打印机硒鼓加粉及清零方法【纯享版】
运维·网络·windows·电脑
Horn Still Sounds13 小时前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件