kyowjw01 发表于 2017-5-23 10:12:23

关于实验十二不明白的内存报错

assume cs:code
code segment
start:       mov ax,cs
                mov ds,ax
                mov si,offset p1
               
                mov ax,0
                mov es,ax
                mov di,200h
               
                mov cx,offset p1end-offset p1
               
                cld
                rep movsb
               
                mov ax,0
                mov es,ax
                mov word ptr es:,200h
                mov word ptr es:,0
               
                mov ax,4c00h
                int 21h
               
p1:          jmp short p2
                db 'ERROR!'

p2:          mov ax,cs
                mov ds,ax
                mov si,202h
               
                mov ax,0b800h
                mov es,ax
                mov di,2*160+0*2
               
                mov cx,6
show:      push cx
                mov cl,1010b
                mov al,
                mov es:,al
                mov es:,cl
                inc si
                inc di                                ;这两个inc改成add di,2就没有事了。可以正常运行!
                inc di                                ;
                pop cx
                loop show

p1end:      nop
code ends
end start

执行后会报错。

如果把标号show处的两个inc di改成add di,2却能正常运行,始终不知道是为什么。也许可能还有其他的原因?小白不解。

kyowjw01 发表于 2017-5-23 10:15:28

{:10_266:}{:10_266:}{:10_266:}{:10_254:}在线等。

kyowjw01 发表于 2017-5-23 10:29:46


╮(╯_╰)╭纠结纠结ing……
来个大神帮小弟解答吧{:9_234:}

人造人 发表于 2017-5-23 13:12:29

iret

人造人 发表于 2017-5-23 13:13:57

assume cs:code

code segment
start:


;int 0

;mov ax, 4c00h
;int 21h



        mov ax, cs
        mov ds, ax
        mov si, offset p1

        mov ax, 0
        mov es, ax
        mov di, 200h

        mov cx, offset p1end - offset p1

        cld
        rep movsb

        mov ax, 0
        mov es, ax
        mov word ptr es:, 200h
        mov word ptr es:, 0

        mov ax, 4c00h
        int 21h

p1:
        jmp short p2
        db 'ERROR!'

p2:
        mov ax, cs
        mov ds, ax
        mov si, 202h

        mov ax, 0b800h
        mov es, ax
        mov di, 2 * 160 + 0 * 2

        mov cx, 6
show:
        push cx
       
        mov cl, 1010b
        mov al,
        mov es:, al
        mov es:, cl
        inc si
       
        inc di                              ;这两个inc改成add di,2就没有事了。可以正常运行!
        inc di                              ;
       
        pop cx
        loop show
       
        iret ; 中断返回

p1end:
        nop

code ends
end start

kyowjw01 发表于 2017-5-23 22:54:56

人造人 发表于 2017-5-23 13:13


谢谢版主的细心回答。待我有空回去再去瞅瞅,不会,继续补刀哈!{:5_91:}

人造人 发表于 2017-5-23 22:56:31

kyowjw01 发表于 2017-5-23 22:54
谢谢版主的细心回答。待我有空回去再去瞅瞅,不会,继续补刀哈!

^_^

kyowjw01 发表于 2017-5-23 22:56:59

{:5_107:}第一次发帖,不知道如何回复,删了自己的回复贴,扣了一点荣誉。{:10_266:}{:10_258:}

freedomOO 发表于 2021-6-3 07:43:22

我现在准备做这个实验来看看做的人多不多{:5_109:}
页: [1]
查看完整版本: 关于实验十二不明白的内存报错