zoukankan      html  css  js  c++  java
  • 汇编语言(王爽) 第5章[BX]和loop指令

    mov ax,[0] 把一个内存单元给寄存器ax,内存单元长度2个字节,偏移地址0,段地址ds

    mov al,[0] 把一个内存单元给寄存器al,内存单元长度1个字节,偏移地址0,段地址ds

    so:要描述一个内存单元,需要1.ds和偏移地址2.内存单元长度

    [bx]也表示一个内存单元,偏移地址在寄存器bx中罢了

    我们用()表示一个寄存器或一个内存单元中的内容

    ()中可以是寄存器,段寄存器,内存单元的物理地址

    5.1 [bx]

    mov ax,[bx] 把段寄存器ds和偏移地址在bx中的内存单元的内容给ax

    也就做一个下面的很简单的程序

    5.2 loop

    循环

    s为标号,代表指令的地址

    loop s执行的过程就是1 cx-- ,2 判断cx是不是0,不是的话跳到S标号出执行,是0的话直接执行下面的语句

    5.3 都是实践的,直接写代码了

    5.4 编译器中内存单元的写法

    mov ax,[0]在编译器中会解释成mov ax,0

    mov ax,[bx]和mov ax, ds:[bx]都会解释成把段地址ds*16+bx中的偏移地址所代表的物理地址中的内容给ax寄存器

    5.5 loop和[bx]的联合应用

    这里唯一要注意的就是8位的数据加到16位寄存器的方法

    这里用土办法

    mov ah,0

    mov al,ds:[0]

    mov bx,ax

    用一个寄存器的高位设0,低位接收数据,再赋给另一个寄存器

    5.6 段前缀

    mov ax,ds:[0] ds就是段前缀

    就是ds,cs,ss,es这些东西,出现在指令中,指明段地址的东西称为段前缀

    5.7 段安全空间

    有些内存是不可写的,写的话会报错

    不要去手动改内存的内容

    程序运行的时候,cpu会自动给程序分配内存

    扯淡完毕

    EOF

  • 相关阅读:
    从源码解读Spring如何解决bean循环依赖
    前后端分离下用jwt做用户认证
    断点调试获取程序当前位置的运行结果
    Win10安装MySQL8压缩包版
    IDEA实用快捷键推荐
    多平台博客发布工具OpenWrite的使用
    Tomcat部署多个war包
    从储值卡(会员卡)充值业务看分布式事务的设计
    再谈 PHP 未来之路
    Swoole 实战:MySQL 查询器的实现(协程连接池版)
  • 原文地址:https://www.cnblogs.com/wz0107/p/5380167.html
Copyright © 2011-2022 走看看