IceRainow 发表于 2011-12-8 14:32:19

请各位高手帮忙检查一下

本帖最后由 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,
          mov es:,ch
          mov es:,cl
          mov cl,0
          jcxz ok
          inc si
          add di,2
          jmp short color
      ok: ret

codesg ends

end start

zzmatrix 发表于 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.以后程序要写注释,不然看起来很麻烦。

IceRainow 发表于 2011-12-8 15:36:24

zzmatrix 发表于 2011-12-8 15:09 static/image/common/back.gif
第25行,你把ax值给了dx,那你之后27、28行的dl还是传递过来的dl=3吗?其他也有错的地方
1.把21行移到30、 ...

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


顺便问一下,在没有定义stack和ss的情况下,程序中可以直接用push和pop吗,如果可以的话,stack是在哪呢?
举个例子,程序中用到了call,执行到call的时候,ip被压栈,这个时候,栈究竟在哪里呢

zzmatrix 发表于 2011-12-8 15:40:06

可以用push和pop的。会自动编译一段空间作为栈。

具体在哪里呢。呵呵

自己debug一下不就知道了吗,看看ss和sp的值。

IceRainow 发表于 2011-12-8 15:52:15

zzmatrix 发表于 2011-12-8 15:40 static/image/common/back.gif
可以用push和pop的。会自动编译一段空间作为栈。

具体在哪里呢。呵呵


哈哈,谢谢

IceRainow 发表于 2011-12-8 16:08:05

zzmatrix 发表于 2011-12-8 15:40 static/image/common/back.gif
可以用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,
          mov es:,ch
          mov es:,cl
          mov cl,0
          jcxz ok
          inc si
          add di,2
          jmp short color
      ok: ret

codesg ends

end start

zzmatrix 发表于 2011-12-8 16:35:20

结果正确就行
页: [1]
查看完整版本: 请各位高手帮忙检查一下