lkp1115 发表于 2018-11-22 12:10:30

mov传送的数据莫名其妙的被改变了,新手求助

源代码如下:

assume cs:code,ds:data
data segment

        db 'i love lkp'

data ends

code segment
start:        mov ax,data
                mov ds,ax
       
                mov ax,0b800h
                mov es,ax
       
                mov di,0h
                mov si,70h
       
                mov cx,10h
s:                mov dl,ds:
                mov es:,dl                                ;执行这里的时候,传送进去的值不是dl 的值而是20h
                mov byte ptr es:,0ah                ;这里传送进去的也是07h 不是0ah
       
                add si,2h
                inc di
                loop s
       
                mov ax,4c00h
                int 21h

code ends

end start

求各位大佬帮忙看看

丶忘却的年少o 发表于 2018-11-22 12:57:52

等语句执行完了后看一下es指向的内存看看里面是 0x69 还是 0x20。
我记得后面显示的值是当前这块地址的值,而且你还没 t,也就是说这条 mov 指令还没执行,那这块内存也只能显示 0x20,而不是你要放进去的值

lkp1115 发表于 2018-11-22 15:39:31

丶忘却的年少o 发表于 2018-11-22 12:57
等语句执行完了后看一下es指向的内存看看里面是 0x69 还是 0x20。
我记得后面显示的值是当前这块地址的值 ...

额,我看了下内存都是20,执行完之后也是,就是dl的值好像传到内存里就都变20了。

丶忘却的年少o 发表于 2018-11-22 18:53:46

lkp1115 发表于 2018-11-22 15:39
额,我看了下内存都是20,执行完之后也是,就是dl的值好像传到内存里就都变20了。

直接运行起来能显示出字符嘛?不单步调试。
记得单步会影响内存中的值的

lkp1115 发表于 2018-11-22 19:09:49

丶忘却的年少o 发表于 2018-11-22 18:53
直接运行起来能显示出字符嘛?不单步调试。
记得单步会影响内存中的值的

额,好像都没显示。好奇怪!

superbe 发表于 2018-11-23 11:10:01

测试了下,不单步直接运行的话是能正常显示的,如下图
如果debug单步执行就看不到。我想是这样的,字符本来是刚写进去了的,但立刻被debug单步T的输出滚屏覆盖了显示缓冲区,就看不到了。

lkp1115 发表于 2018-11-24 09:18:00

superbe 发表于 2018-11-23 11:10
测试了下,不单步直接运行的话是能正常显示的,如下图
如果debug单步执行就看不到。我想是这样的,字符本 ...

清屏后就可以显示了,然后用dir命令填满屏幕,再执行看到了显示了一瞬间然后马上消失,我想应该就是您说的那样,谢谢!

lkp1115 发表于 2018-11-24 09:18:33

也谢谢2楼的回答!
页: [1]
查看完整版本: mov传送的数据莫名其妙的被改变了,新手求助