汇编干货笔记->5.0 bx与loop

作者: Dongle聊测试 | 来源:发表于2017-10-01 09:47 被阅读53次


    以下是文字提取部分,阅读完毕的同学可以离开了
    我们之前讲过
    将;2字节;的内容放入ax的指令是
    mov ax,[0]
    这个偏移地址同样可以表示为bx
    mov ax,[bx]
    它的;段地址;依然在ds中

    以后;idata;这个词代表常量
    mov ax,[idata]代表偏移地址是;常量;
    我以后用()表示一个寄存器或内存单元的;内容;
    称;(ax);为ax中的内容
    这就好比穿衣服

    loop顾名思义是;循环操作;
    执行loop时会有两部操作
    ;(cx)=(cx)-1;
    ;(cx);如果为0转到标号处,反之继续执行
    下面的s就是所谓的;标号;
    这个程序要计算2^12

    注意:汇编中;不能;以字母开头
    A000H要写成;0;A000H
    debug时候使用;p;可以自动执行loop
    debug时使用g可以在;指定位置开始;执行程序

    Debug和Masm对指令的处理是;不一样;的
    比如mov al,[0]
    debug认为把;ds:0;的内容放入al
    但masm却认为把;0;放入al
    如果想实现把;内存单元;放入al
    你得mov bx,0 mov al,[bx]
    或者mov al,ds:[0]

    如果你想把ffff:0~ffff:b内存单元中的;数据累加;到dx
    请问可以吗?如何做?
    我们先分析一下;数据大小;
    8bit的最大值是;FFH;
    FFH×(b+1)=;BF4H;
    而dx是16bit,最大数据是;FFFFH;
    显然;可以存下;

    但是有个问题:;dx是16bit;
    内存单元中的数据是8bit
    如果用mov dx,[0]
    显然要放;两个内存单元的数据;才够dx挥霍
    于是很不争气地成了下面这样

    但是改用dl的话
    显然dl是8bit,最大数据是:;FFH;
    聪明的你有没有什么;好想法呢;
    你可以把数据存储在;al;里
    然后;ah置零;,此时数据:00FFH
    再;累加到dx;

    最后程序是这样的
    inc操作是;加一;

    之前的操作,段地址都是;默认在ds中;
    其实我们也可以显式指出
    mov ax,ds:[bx]
    mov ax,cs:[bx]
    mov ax,ss:[bx]
    mov ax,es:[bx]
    这些;ds:,cs:,ss:,es:;
    我们称为段;前缀;
    段前缀是用来解决下面这样的问题

    相关文章

      网友评论

      本文标题:汇编干货笔记->5.0 bx与loop

      本文链接:https://www.haomeiwen.com/subject/jivoextx.html