• UNIT FIVE TO EIGHT


    内存单元间接表示

    mov dl, [0] :直接寻址

    mov bx, 0
    mov dl, [bx]:间接寻址

    loop指令

    1.语法

    loop 标号

    2.CPU执行指令过程

    ① (cx) ← (cx) - 1
    ② 判断cx的值是否为0。
    如果(cx) ≠ 0,跳转到标号处执行;
    如果(cx) = 0, 执行loop后面的其它指令。

    (常用)

    mov cx,次数

    ...

    loop 标号

    inc指令

    Tips

    默认情形下,无论是直接给出的偏移地址,还是通过bx间接给出的偏移地址,都是取ds的值作为段地址来计算物理地址。

    可以通过增加「段前缀」改变默认状况。

    伪指令

    在代码段中用栈

    示例:

    advantage

    ① 程序结构清晰
    ② 对于8086而言,可以使用多个段,解决长度超64KB的限制问题

    代码、数据、栈tips

    ① 使用伪指令segment和ends定义逻辑段后,究竟是用作代码段、数据段还是栈,由程序员指定。
    ② 使用assume仅仅表示将某个逻辑段和某个段寄存器关联起来;真正当作特定的段使用,需要在代码段中设置相应的段寄存器值,如ds, ss。
    ③ 段名代表的是段地址,是常数。不能使用mov直接送入段寄存器。

    and&or指令

    and

    and是按位逻辑与,即都为一才赋一

    用法:

    ① and指令语法格式及对操作数要求与add指令同
    ② 可以实现将操作数指定位设置为0

    or

    or是按位逻辑或,即有一即赋一

    用法:

    ① or指令语法格式及对操作数要求与add指令同
    ② 可以实现将操作数指定位设为1

     应用:

    字母大小写的转换:

     数字字符与数值的转换

     其他灵活的内存地址表示

    用[bx + idata]表示表示内存单元。idata表示常数。

    用[si]表示表示内存单元。
    用[si + idata]表示表示内存单元。idata表示常量。

    用[di]表示表示内存单元。
    用[di + idata]表示表示内存单元。idata表示常量。

    用[bx+di], [bx+si]表示表示内存单元。
    用[bx+di+idata], [bx+si+idata]表示表示内存单元。

    其他

  • 相关阅读:
    gevent实现基于epoll和协程的服务器
    用greenlet实现协程消费者生产者
    More is better(MST)(求无向图中最大集合元素个数)
    小希的迷宫(MST单棵树判断法则)
    畅通工程再续(MST)
    畅通工程再续
    畅通工程
    还是畅通工程(MST)
    Minimum Inversion Number
    Who Gets the Most Candies?(线段树 + 反素数 )
  • 原文地址:https://www.cnblogs.com/zc-de-blog/p/10166683.html
Copyright © 2020-2023  润新知