请各位高手帮忙检查一下
本帖最后由 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: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.以后程序要写注释,不然看起来很麻烦。
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被压栈,这个时候,栈究竟在哪里呢 可以用push和pop的。会自动编译一段空间作为栈。
具体在哪里呢。呵呵
自己debug一下不就知道了吗,看看ss和sp的值。 zzmatrix 发表于 2011-12-8 15:40 static/image/common/back.gif
可以用push和pop的。会自动编译一段空间作为栈。
具体在哪里呢。呵呵
哈哈,谢谢 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 结果正确就行
页:
[1]