| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 奥普瓯江 于 2018-9-6 17:17 编辑  
 
编程,计算data段中第一组数据的3次方,结果保存在后面一组dword单元中。 
- assume cs:code
 
 - data segment
 
 -         dw 1, 2, 3, 4, 5, 6, 7, 8
 
 -         dd  0, 0, 0, 0, 0, 0, 0, 0
 
 - data ends
 
  
- code segment
 
 - start:mov ax, data    ;把数据段内存首地址传给ax
 
 -         mov ds, ax       ;把ax中储存的数据传给ds寄存器
 
 -         mov si, 0          ;设定si八位寄存器为零,我感觉si就相当一个变量一样
 
 -         mov di, 16        ;设定di八位寄存器为16指向dd
 
 -         
 
 -    
 
 -          mov cx, 8         ;设定cx寄存器初始值为8,这个是用于loop的计数器
 
 - s:      mov bx, [si]       ;把ds:[si]中的内存数据传给bx
 
 -          call cube           ;把下mov [di], ax命令首地址压进站中并跳转至cube标记处,并在cube标记处项下执行
 
 -          mov [di], ax       ;跳转回来后开始执行把ax中储存的数据传给内存ds:[di]
 
 -          mov [di].2, dx    ;dx寄存器中的数据传给内存ds:[di + 2]
 
 -          add si, 2            ;si寄存器中的数据加2
 
 -          add di, 4            ;di寄存器中的数据加4
 
 -          loop s                 ;再次循环,只有cx寄存器的数据为零的时候才结束循环,loop的运作方式是每当到达loop处cx减1等于cx如不等于零则继续循环如是零循环结束
 
  
-          mov ax, 4c00h      ;结束本次程序
 
 -          int 21h
 
  
- cube: mov ax, bx            ;把bx中的数据传给ax
 
 -          mul bx                  ;ax*bx       
 
 -          mul bx                  ;(ax*bx)*bx
 
 -          ret                        ;跳转回站中所储存的偏移地址(move [di], ax),并释放站中的数据
 
 - code ends
 
 - end start
 
  复制代码 
问题在mul bx中 
mul bx                  ;这里的结果应该是储存在了ax, 和dx中   
mul bx                  ;这里在现在这个程序中应该是只取了一个ax中的数值也就是低位寄存器中的数据(ax),高位寄存器的数据(dx)并没有读取进来,不知我这么理解是否对,如果只是运算小于上一个乘机小于65535的话是正确的如果高于这个数是否算出来的就是错误的数值呢?   
我想问的问题是,为什么这么处理,是否是程序的问题,或者是大于65535的数据还有别的运算方法 |   
 
 
 
 |