鱼C论坛

 找回密码
 立即注册
查看: 2685|回复: 6

请各位高手帮忙检查一下

[复制链接]
发表于 2011-12-8 14:32:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 IceRainow 于 2011-12-8 15:54 编辑

这是实验10的第一个子程序,调试时结果显示不准确,麻烦个别帮忙看一下是不是哪里错了
谢谢各位
assume cs:codesg,ds:datasg

datasg segment
    db 'welcome to masm!',0
datasg ends

codesg segment
start: mov dh,8
       mov dl,3
       mov cl,2
       mov ax,datasg
       mov ds,ax
       mov si,0
       call show_str

       mov ax,4c00h
       int 21h

show_str: mov ax,0b800h
          mov es,ax
          mov bl,cl
          mov al,0a0h
          dec dh
          mul dh
          mov dx,ax
          mov al,02h
          dec dl
          mul dl
          add ax,dx
          mov di,ax
   color: mov cl,bl
          mov ch,[si]
          mov es:[di],ch
          mov es:[di+1],cl
          mov cl,0
          jcxz ok
          inc si
          add di,2
          jmp short color
      ok: ret

codesg ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-8 15:09:46 | 显示全部楼层
本帖最后由 zzmatrix 于 2011-12-8 15:28 编辑

第25行,你把ax值给了dx,那你之后27、28行的dl还是传递过来的dl=3吗?其他也有错的地方
1.把21行移到30、31行中间
2.把25行、29行的dx换成bx,因为你要用到dl。
3.把26行改成mov ax,02h,因为要把ah置零。
4.以后程序要写注释,不然看起来很麻烦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-8 15:36:24 | 显示全部楼层

谢谢2L的高手,有时候,程序越改错的越多,看的都晕了,自己检查了几遍,这么多错误都没发现
再次感谢


顺便问一下,在没有定义stack和ss的情况下,程序中可以直接用push和pop吗,如果可以的话,stack是在哪呢?
举个例子,程序中用到了call,执行到call的时候,ip被压栈,这个时候,栈究竟在哪里呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-8 15:40:06 | 显示全部楼层
可以用push和pop的。会自动编译一段空间作为栈。

具体在哪里呢。呵呵

自己debug一下不就知道了吗,看看ss和sp的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-8 15:52:15 | 显示全部楼层
zzmatrix 发表于 2011-12-8 15:40
可以用push和pop的。会自动编译一段空间作为栈。

具体在哪里呢。呵呵

哈哈,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-8 16:08:05 | 显示全部楼层
zzmatrix 发表于 2011-12-8 15:40
可以用push和pop的。会自动编译一段空间作为栈。

具体在哪里呢。呵呵

这是修改后的程序,可以正常运行,结果正确,有些地方,没有按照您说的修改,不知道还有没有错误
assume cs:codesg,ds:datasg

datasg segment
    db 'welcome to masm!',0
datasg ends

codesg segment
start: mov dh,8
       mov dl,3
       mov cl,2
       mov ax,datasg
       mov ds,ax
       mov si,0
       call show_str

       mov ax,4c00h
       int 21h

show_str: mov ax,0b800h
          mov es,ax
          mov al,0a0h
          dec dh
          mul dh
          mov bl,cl
          mov cx,ax
          mov al,02h
          dec dl
          mul dl
          add ax,cx
          mov di,ax
   color: mov cl,bl
          mov ch,[si]
          mov es:[di],ch
          mov es:[di+1],cl
          mov cl,0
          jcxz ok
          inc si
          add di,2
          jmp short color
      ok: ret

codesg ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-8 16:35:20 | 显示全部楼层
结果正确就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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