指令mov es:[bp],al执行后es:[bp]中的值怎么和al中的不一样
本帖最后由 xiaochen 于 2017-9-9 20:50 编辑assume cs:code
data segment
db 'welcome to masm'
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov ax,0b800h
mov es,ax
mov bp,0
mov al,ds:
mov es:,al
mov ax,4c00h
int 21h
code ends
end start
指令mov es:,al执行后es:中的值怎么和al中的不一样 你看这个图,我把程序改一下,让es指到一个初始化的地址,那么你的问题就解决了。你现在有想明白问题的所在吗?
答案:就是因为b800:0这个地址你没有初始化,系统是自动分配值的,就是跑飞了,什么值都可能(当然这个是夸张),所以每次你中断调试都是重新刷新了一次系统,就没了。
懂了记得点“最佳答案”{:10_303:}
xiaochen 发表于 2017-9-9 21:15
我刚学到第十章 还不知道中断呢
你的是单步调试,打错了,其实中断也会产生这样的效果,只是你看不到 xiaochen 发表于 2017-9-9 21:15
我刚学到第十章 还不知道中断呢
初始化就是把内存单元都变为0吗
丶忘却的年少o 发表于 2017-9-9 20:57
你看这个图,我把程序改一下,让es指到一个初始化的地址,那么你的问题就解决了。你现在有想明白问题的所在 ...
怎么初始化呀 xiaochen 发表于 2017-9-9 21:13
怎么初始化呀
我刚学到第十章 还不知道中断呢 你源码中es指向了显存,那么这个es的内容就是你屏幕中对应位置所显示内容的数据,就是说,每一次你屏幕更新的时候,如果es所指向的显存中数据发生变化,那么es也会发生变化。 显存中的数据是根据屏幕更新后所在位置的内容所决定的,所以要不你就将es的位置设置的屏幕中间或者靠后,在使用cls 对屏幕进行清屏,这样由于 屏幕中es的位置没有受到影响,所以就会可以得到你想看到的效果。
在你的源码中,是在屏幕第一行第一例进显示,显然,每次屏幕刷新之后,都会更改你的数据内容,你得不到想要的数据的。 你可以把源码调试一下,看看得到的es:中的内容是不是对应显存所在位置的ASCII值。 3-3 发表于 2017-9-9 21:36
你可以把源码调试一下,看看得到的es:中的内容是不是对应显存所在位置的ASCII值。
好的 太谢谢拉 学编程的哥们都讲究 相互学习啊,毕竟学无止境。 3-3 发表于 2017-9-9 21:44
相互学习啊,毕竟学无止境。
哥们 几点睡呀 我还有个问题不明白一会儿 还想再发个问题贴 你帮我在看一下被 好,发吧 3-3 发表于 2017-9-9 21:53
好,发吧
谢拉 我先编下 马上
页:
[1]