当前位置: 代码迷 >> 汇编语言 >> N的3次放是这样么?该怎么解决
  详细解决方案

N的3次放是这样么?该怎么解决

热度:8806   发布时间:2013-02-26 00:00:00.0
N的3次放是这样么?
'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
  相关解决方案