api 发表于 2011-11-9 22:40:50

检测点14.2

编程:用加法和移位指令计算(ax)=(ax)*10
提示:(ax)*10=(ax)*2+(ax)*8
完整程序如下:

assume cs:code

code segment

start:

      mov ax,1000h

      mov bx,ax

      shl bx,1            ;(ax)=(ax)*2

      mov cl,3

      shl ax,cl         ;(ax)=(ax)*8

      add ax,bx         ;(ax)=(ax)*10



      mov ax,4c00h

      int 21h



code ends

end start
(ax)=(ax)*10不是向左移一位的意思吗?为什么这里移了那么多位. 还有我数学不好,谁能解释下上面写的是什么意思

ascxyh009 发表于 2011-11-10 13:16:33

左移一位相当于*2,所以ax*10=ax*8+ax*2,其中ax*8=ax*2*2*2(就是左移3次),以上都是在没溢出的时候才成立

api 发表于 2011-11-10 13:41:28

ascxyh009 发表于 2011-11-10 13:16 static/image/common/back.gif
左移一位相当于*2,所以ax*10=ax*8+ax*2,其中ax*8=ax*2*2*2(就是左移3次),以上都是在没溢出的时候才成立 ...

N进制左移一位相当于*N,二进制你可以用上面的表示,但是汇编语言都是16进制的

無涯 发表于 2013-3-17 02:04:46

额*10是对十进制来说的,计算机是2进制,移一位相当于*2而已
页: [1]
查看完整版本: 检测点14.2