鱼C论坛

 找回密码
 立即注册
查看: 1755|回复: 2

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

[复制链接]
发表于 2012-11-22 21:31:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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] ;将数据段中偏移地为si的值传送给bx
                mov cx,3 ;定义内循环cx
                call s ;调用子程序做N的3次运算
                mov word ptr ds:10h[di],ax ;将结果的低16值送入AX
                mov word ptr ds:12h[di],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结果:
p10exedebug.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-22 21:48:32 | 显示全部楼层
本帖最后由 浅塘半亩 于 2012-11-22 21:54 编辑

修改后的代码

修改后的代码

debug的结果

debug的结果



我不是大牛,但:lol我觉得你在s0循环内没有对ax和dx的值进行初始化,他们还保留着上一次3次方的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-2 20:12:47 | 显示全部楼层
还没有学到  爱莫能助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表