马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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的数据还有别的运算方法 |