帮下忙菜鸟问题!!!!

jy01807853 2008-10-06 09:03:36
assume cs : code_sg , ds : data_sg , ss : stack_sg

data_sg segment

db 'welcome to masm!' , 0

data_sg ends

stack_sg segment

dw 8 dup (0)

stack_sg ends

code_sg segment

start: mov dh , 8
mov dl , 3
mov cl , 2
mov ax , stack_sg
mov ss , ax
mov sp , 16
mov ax , data_sg
mov ds , ax
mov si , 0

call show_str
mov ax , 4c00H
int 21H

show_str:
push si
push cx
mov ax , 0
mov al , dl
mov bl , 2
mul bl
mov si , ax
mov al , dh
mov bl , 160
mul bl
mov bx , ax
mov di , 0
pop bp

heart_sg: mov ax , 0B800H
mov es , ax
mov cl , ds : [di]
mov es : bx[si], cl
mov ch , 00
jcxz ok
and byte ptr es : bx[si], 11011111B
inc si

mov es : bx[si], bp //问题在这..bp寄存器是16位的..他的内容有可能把es:bx[si]的内容覆盖
//一个显示的字符他是由2个部分组成..ASCII和他的属性...我这的bp只是想
//把2这个属性给es:bx[si]我调试看了bp=0002为什么覆盖了..结果还正确
//希望大家帮我解释下谢谢 ...我的表达能力比较差....
inc si
inc di
jmp short heart_sg

ok: pop cx
pop si
ret

code_sg ends

end start
...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BAYNPU 2008-10-06
  • 打赏
  • 举报
回复
先把它生成列表文件看看,然后再结合DEBUG一步一步跟踪调试,这样更容易理解.
jy01807853 2008-10-06
  • 打赏
  • 举报
回复
我就是在DEBUG下一步一步的调试分析出在1楼的结果..但是不确定自己是否分析正确
cnzdgs 2008-10-06
  • 打赏
  • 举报
回复
按照你的分析来修改验证一下就知道对不对了。
好的方法当然有,不过学习总是要循序渐的,不必一开始就追求最好,代码写得多了自然就知道该如何写了。
jy01807853 2008-10-06
  • 打赏
  • 举报
回复
谢谢指点 ...请问我上面的分析对吗?还是错了...还望指出...
对于这个程序...还有好的算法吗? 感觉自己写的这个太杂乱了...
cnzdgs 2008-10-06
  • 打赏
  • 举报
回复
bp寄存器是访问函数的参数和局部变量用的,尽量不要用做其它用途,(除非在极特殊情况下为了提高运行效率)。
jy01807853 2008-10-06
  • 打赏
  • 举报
回复
明白了因为我si++了一次...就移动到了下一个字节...bp寄存器的内容就覆盖到了从这个字节开始的一个字单元
后面我又使si++了一次..移动到了bp的高8位..就正好覆盖了..所以最后的结果是正确的....
我是这样分析的...如果有错误还望大家指出....
刚开始学习汇编...以后希望大家帮助啊!!!
呵呵~~~~~

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧