'masmaster'大神给个话
- Assembly code
assume cs:code,ds:datadata segment dw 1,2,3,4,5,6,7,8 dd 0,0,0,0,0,0,0,0data endscode segmentstart: mov ax,data mov ds,ax mov bx,0 mov cx,2 call s mov ax,4c00h int 21hs: mov ax,bx mul bx mul bx mov ds:[bx+12h],ax mov ds:[bx+10h],dx add bx,8 loop s ret
------解决方案--------------------------------------------------------
在加上 code ends 与 end start 以后还是有逻辑错误。
不知道楼主的是要什么功能,我在上面的程序基础上,进行了修改,下面的程序的功能将1、2、3...8全部进行3次方,并存放。在call指令执行完后,可以看到在ds:10中有1H、8H、1BH(27)等,即为算出来的数
下面程序已通过MASM5.0与LINK5.0的编译连接,并进行了基本的测试
注意,在第一次乘完后,需要将低位与高位的AX和DX寄存器进行累加,然后再进行第二次乘
- Assembly code
assume cs:code,ds:datadata segment dw 1,2,3,4,5,6,7,8 dd 10 dup(0)data endscode segmentstart: mov ax,data mov ds,ax mov bx,0 mov cx,8 call s mov ax,4c00h int 21hs: ; 栈保护与初始化 push di mov di , 0 s1: mov ax , ds:[ di ] ; 存放乘数 mul word ptr ds:[ di ] ; 第一次乘 add ax , dx ; 得到第一次乘法后的总值(没有溢出保护) mul word ptr ds:[ di ] ; 第二次乘 mov ds:[bx+12h],ax mov ds:[bx+10h],dx add bx,8 add di , 2 loop s1 ; 栈恢复与返回 pop di retcode endsend start