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. 8086 汇编笔记):[BX] loop 指令

    2024-06-08 07:00:06       31 阅读
  2. 汇编语言-[bx]loop指令

    2024-06-08 07:00:06       31 阅读
  3. 8086 汇编笔记(九):call 指令 ret 指令

    2024-06-08 07:00:06       34 阅读
  4. 8086 汇编笔记(八):转移指令的原理

    2024-06-08 07:00:06       31 阅读
  5. 8086 汇编笔记(十一):内中断

    2024-06-08 07:00:06       33 阅读
  6. 8086:qemu执行汇编

    2024-06-08 07:00:06       34 阅读
  7. ARM 汇编指令:() 位运算指令

    2024-06-08 07:00:06       45 阅读
  8. 8086 汇编学习 Part 6

    2024-06-08 07:00:06       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 07:00:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 07:00:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 07:00:06       82 阅读
  4. Python语言-面向对象

    2024-06-08 07:00:06       91 阅读

热门阅读

  1. 关键主题汇编

    2024-06-08 07:00:06       26 阅读
  2. 深拷贝的实现方式

    2024-06-08 07:00:06       32 阅读
  3. 8086 汇编笔记(八):转移指令的原理

    2024-06-08 07:00:06       31 阅读
  4. test1

    2024-06-08 07:00:06       27 阅读
  5. 【MongoDB】rs.add 将成员添加到副本集

    2024-06-08 07:00:06       31 阅读
  6. CMakeFile根据不同指令集配置加载obj对象

    2024-06-08 07:00:06       24 阅读
  7. Element-UI快速入门

    2024-06-08 07:00:06       31 阅读
  8. C++中的字符串详解

    2024-06-08 07:00:06       28 阅读
  9. Linux入门学习指南

    2024-06-08 07:00:06       26 阅读
  10. 设计模式之模板方法模式

    2024-06-08 07:00:06       29 阅读
  11. Linux基于V4L2的视频捕捉

    2024-06-08 07:00:06       33 阅读
  12. Unity3D DOTS 10W GPU Intancing 动画与合批优化详解

    2024-06-08 07:00:06       28 阅读
  13. Excel中的SUMPRODUCT函数:使用方法与案例分析

    2024-06-08 07:00:06       30 阅读
  14. 【MyBatisPlus条件构造器】

    2024-06-08 07:00:06       29 阅读
  15. [DT] 翻译笔记

    2024-06-08 07:00:06       24 阅读