|
发表于 2017-10-31 20:40:59
|
显示全部楼层
本帖最后由 兰陵月 于 2017-10-31 21:06 编辑
- ;源基本程序来源地址:http://bbs.fishc.com/forum.php?mod=viewthread&tid=99149&page=1&extra=#pid3065138
- ;源程序属该帖一楼楼主所发,位于一楼。
- ;以下为修改程序
- ;时间:2017-10-31 20:55
- ;by 鱼C论坛 ID:兰陵月
- assume cs:cjh,ds:sy
- sy segment
- db 'wo ai wo jia',0
- sy ends
- cjh segment
- ks: mov ax,sy
- mov ds,ax
- mov si,0
- mov dh,8
- mov dl,3
- mov cl,2
- call show_str
- mov ax,4c00h
- int 21h
- show_str:
- ;第8行行首偏移量为(行号-1)*160=1120 ,本处行号为dh=8
- mov al,160
- sub dh,1
- mul dh
- ;上一行的结果保存在AX中。
- ;第3列的偏移量:某列在该行的偏移量(N-1)*2
- sub dl,1 ;第3列,3-1
- shl dl,1 ;乘以2,即左移1位。
- ;得到第8行第3列在显存中的总偏移值,并给BX。
- mov dh,0
- add ax,dx
- mov bx,ax
- ;上一句执行完毕后,bx的值为1124,这就是第8行第3列的总偏移值
- mov ax,0b800h
- mov es,ax
- mov ah,cl
- s: mov ch,0
- mov cl,ds:[si]
- jcxz over
- mov es:[bx],cl
- inc bx
- mov es:[bx],ah
- inc bx
- ;inc cx ;此处来这么一条inc cx是什么意思?我觉得不需要。
- inc si
- loop s
- over: ret
- cjh ends
- end ks
复制代码
如下图,调试没有问题!!!
下图清屏,准备看运行结果!!!
下图,运行结果完全符合要求!!!
楼主错误主要发生行号列号求偏移地址时发生了错误。
以后程序调用过程的时候最好能把一些寄存器压栈保存一下,以防发生错误了,我这里就没帮你加了。 |
|