大家帮忙看下我的这个程序哪里出错了。
程序的作用是将 data段中第一组数据的3次方。。结果存在后面的一组的dword单元中
assume cs:code ds:data
data segment
dw 1,2,3,4,5,6,7,8
dw 0,0,0,0,0,0,0,0
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov cx,8
s:
mov bx, ds:
mov ax,bx
mulbx
mulbx
movds:,ax
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start
呵呵楼主, 你看看~
问题:为什么无法实现数字n的3次方
分析:1,ds里的 数字是dw型。是一个字,每个字占二个字节,所以是add si, 2
2,mul bx 这样是16位运算(bx,是通用寄存器,是十六位的),值默认在ax(低十六位) 和dx (高十六位) 中,所以应该是mul 8位寄存器,我是用mul bl (换做别的8位寄存器也可以)
代码如下assume cs:code, ds:data
data segment
dw 1,2,3,4,5,6,7,8
dw 0,0,0,0,0,0,0,0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
mov cx,8
s: mov bx, ds:
mov ax,bx
mul bl
mul bl
mov ds:,ax
add si, 2
loop s
mov ax,4c00h
int 21h
code ends
end start呵呵楼主希望能帮助你,bye~ 我也是才学完汇编语言第二版,不敢保证全部正确,以下是我的看法:
数据定义中dw 0,0,0,0,0,0,0,0改为dd 0,0,0,0,0,0,0,0
循环里面:movds:,ax
inc si
也有问题
因为第一排数据是dw,字型数据,所以si要加2,add si,2 或者用两个inc si
还有3次方的结果存放在dx,ax中,是双字数据,所以第二排定义的数据是dd(双字)
存放结果应该是:mov ds:,ax
mov ds:,dx(因为要有对比,好看清楚,所以写的麻烦点) 楼上的正解
页:
[1]