lyoal 发表于 2012-11-22 21:31:54

求大牛指正一下我写的一段代码?

本帖最后由 lyoal 于 2012-11-22 21:36 编辑

求大牛们帮忙看看下面我写的一段代码,这是鱼C课后留的思考,书上的一个例子,没看书自己写的。
代码功能:是将内存中的一段中数据进行3次方运算,将结果存入另一段内存中。
代码如下:
assume cs:code,ds:data
data segment
      dw 11,22,33,44,55,66,77,88
      dd 8 dup (0)
data ends

stack segment
      dw 8 dup (0)
stack ends

code segment
start:      mov ax,data
                mov ds,ax ;关联数据段
                mov ax,stack
                mov ss,ax ;关联栈段
                mov sp,10h ;初始化将栈顶指针
                mov si,0 ;定义si为数据段列索引
                mov di,0
                mov cx,8 ;定义总循环次数为8
                mov ax,1
               
                s0:push cx ;将外循环cx寄存器值压入栈
                mov bx,word ptr ds: ;将数据段中偏移地为si的值传送给bx
                mov cx,3 ;定义内循环cx
                call s ;调用子程序做N的3次运算
                mov word ptr ds:10h,ax ;将结果的低16值送入AX
                mov word ptr ds:12h,dx ;高16位送入DX
                add di,4
                add si,2 ;为计算下个数据做准备
                pop cx ;将外循环cx值出栈
                loop s0
               
                mov ax,4c00h
                int 21h
               
                s:mul bx
                loop s
                ret
               
               
                code ends
      end start

能正确执行完成,但我DEBUG跟踪了一下,发现运算的结果不对,不知道怎么回事儿?求指点,万分感谢!
带上DEBUG结果:

浅塘半亩 发表于 2012-11-22 21:48:32

本帖最后由 浅塘半亩 于 2012-11-22 21:54 编辑




我不是大牛,但:lol我觉得你在s0循环内没有对ax和dx的值进行初始化,他们还保留着上一次3次方的值

小水 发表于 2012-12-2 20:12:47

还没有学到爱莫能助
页: [1]
查看完整版本: 求大牛指正一下我写的一段代码?