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这段空间。

相关推荐
2501_920047037 小时前
iptables防火墙
linux·运维·网络安全
lqj_本人7 小时前
鸿蒙electron跨端框架PC青简笔记实战:从笔记列表、编辑器到桌面导出,一次做完整
笔记·编辑器
lunzi_08267 小时前
【学习笔记】《Python编程 从入门到实践》第2章:变量命名规则、字符串操作与数值类型详解
笔记·python·学习
CTO Plus技术服务中7 小时前
企业智能安全运营中心AISOC
安全
xian_wwq7 小时前
【学习笔记】“网络空间安全≠网络安全”——ISO SC27标准组十四年仍在求解的不等式
笔记·学习·安全
心中有国也有家8 小时前
pytorch-adapter:让 PyTorch 模型“无缝”跑在昇腾 NPU 上
人工智能·pytorch·笔记·python·学习
IpdataCloud8 小时前
企业IT管理中,如何通过IP地址查询定位快速溯源异常终端?用IP离线库实现
服务器·网络·数据库·tcp/ip
生成论实验室8 小时前
通用人工智能完整技术方案:一个基于字序生命模型(WOLM)认知决策层实时、安全、可交互的数字生命体
人工智能·机器人·自动驾驶·agi·安全架构
搞科研的小刘选手8 小时前
【人工智能专题研讨会】第五届人工智能与智能信息处理国际学术会议(AIIIP 2026)
人工智能·神经网络·机器学习·网络安全·数据挖掘·人机交互·信息处理
咸甜适中8 小时前
rust语言学习笔记Trait(九)PartialEq、 Eq(相等比较)
笔记·学习·rust