米泔水 发表于 2022-5-20 22:01

疫情期间在家学汇编语言,有个题不太理解,恳请哪位老师看一下!

数据段中有一由N个元素组成的字数级,其中首地址为DEST,要在该数组中查找等于8888的字符,并将其序号送入INDEX单元。
            ⋮
      xor di,di                               ;DI清0
       mov cx,N                              ;数组长度存入CX
       movAX,8888H                  ;查找数据存入AX
AGAIN:
      CMPax, DS:DEST            ;比较是否与查找数据相同
      jeFIND                                 ;相同则跳转
      adddi,2                              ;修改指针
      loop   AGAIN                        ; 继续查找
FIND:
   sar    di,1                               :把DI除以2才是序号
   mov    INDEX, di                   ;把序号送入指定单元
         ⋮

以上的sar    di, 1   这条指令不太理解为什么要除以2才是序号。

kof888 发表于 2022-5-21 11:19

因为序号di每次都是+2,所以实际需要除以2

wgz001 发表于 2022-5-21 11:44

那么问题来了,为什么di每次要加2呢?

米泔水 发表于 2022-5-21 13:31

kof888 发表于 2022-5-21 11:19
因为序号di每次都是+2,所以实际需要除以2

还是不懂为啥要除以2才是序号?

A学习的小菜鸟 发表于 2022-5-22 11:24

因为段地址长度是2倍,所以要除以2,你只要知道要除以2就可以了,如果要深入理解汇编,要结合操作系统原理一起来看,如果要编程,则只需要理解汇编的内存原理就行,没必要过于纠结汇编
页: [1]
查看完整版本: 疫情期间在家学汇编语言,有个题不太理解,恳请哪位老师看一下!