haiouda 发表于 2014-8-20 15:09:44

初阶九求助?

assume cs:codesg,ds:datasg,ss:stacksg

datasg segment
db 'Welcome to masm!'
db 02h,24h,71h
datasg ends

stacksg segment
dw 8 dup(0)
stacksg ends

codesg segment

start:
      mov ax,datasg
                mov ds,ax
                mov ax,stacksg
                mov ss,ax
                mov ax,0b872h
                mov es,ax
                mov bx,0
                mov di,0
                mov si,16
          mov cx,3
               
       

   s0:push cx
                push si
                push di
               
           mov cx,11
        s:        mov al,
                mov es:,al
               
                mov ah,
                mov es:,ah
               
                add di,2
                add bx,1
                loop s
               
                pop di
                pop si
                pop cx
                add di,80
                add si,1
               
                loop s0
               

                mov ax,4c00h
                int 21h
               
                codesg ends
end start

               
实验九,在DEBUG中二次用查的结果不一样?
第一次,D B872:0 F
第二次,D B872:0




haiouda 发表于 2014-8-20 15:11:42

ES 段地址为:B872,DI=0

为什么二次查的结果不一样,而且下面往,B872:0写东西,写不进去??

haiouda 发表于 2014-8-20 15:20:15

实验九,错在哪里了,真的找不到拉!

第46条: ADD DI,80    ; DI增加80个字节,换到下一行同一列位置,这里有问题么?

haiouda 发表于 2014-8-20 15:23:59

B872:000为什么一直在变呀???

haiouda 发表于 2014-8-20 15:40:28

实验九,得不到正确结果,请高手指点{:1_1:}

haiouda 发表于 2014-8-20 15:59:45

费了好几个小时,找到问题改好了:loveliness:

assume cs:codesg,ds:datasg,ss:stacksg

datasg segment
db 'Welcome to masm!'
db 02h,24h,71h
datasg ends

stacksg segment
dw 8 dup(0)
stacksg ends

codesg segment

start:
      mov ax,datasg
                mov ds,ax
                mov ax,stacksg
                mov ss,ax
                mov ax,0b872h
                mov es,ax
                mov bx,0
                mov di,0
                mov si,16
          mov cx,3
               
       

   s0:push cx
                push si
                push di
                push bx
       
           mov cx,16
        s:        mov al,
                mov es:,al
               
                mov ah,
                mov es:,ah
               
                add di,2
                add bx,1
                loop s
               
                pop bx
                pop di
                pop si
                pop cx
                add di,160
                add si,1
               
                loop s0
               

                mov ax,4c00h
                int 21h
               
                codesg ends
end start

               

haiouda 发表于 2014-8-20 16:04:36

程序虽得到了正确结果,但还有问题:

段B872,为什么写不进去数据???,几个用D命令查看,为什么B872:0内的数据一直在变?我与进去的数据确找不到…………,那么,为什么还能得到结果????


                                 请高手回{:1_1:}

小靚同学Leon 发表于 2014-8-20 23:33:33

难道是堆栈的操作?:dizzy:

haiouda 发表于 2014-8-21 20:29:28

小靚同学Leon 发表于 2014-8-20 23:33
难道是堆栈的操作?

堆栈只是为,保存数据不被更改;
如我前面一直错找不到原因,就是BX,没保存;

现在是我在DEBUG里用D命查看段地址B872内的,数据一直在改变;如果说改变是因为,显卡一直在刷新的话,那么,我为什么还能得到正确的结果:dizzy:

小靚同学Leon 发表于 2014-8-21 21:19:03

haiouda 发表于 2014-8-21 20:29
堆栈只是为,保存数据不被更改;
如我前面一直错找不到原因,就是BX,没保存;



只能说明最后确实是写进去了,但是内存数据却是在动态的变化着。
好像说不通,期待精彩答案{:1_1:}

浮云旁观 发表于 2014-8-21 22:44:32

⊙﹏⊙b汗,上课没认真,看着都很熟悉,凑到一起就不认识了
页: [1]
查看完整版本: 初阶九求助?