付笑 发表于 2012-2-29 12:37:39

这个O号中断哪里有问题啊

和实验12的答案好像没什么区别啊,可是运行实验12答案可以实现功能,运行我这个为什么就不行呢


assume cs:code
code segment
start:mov ax,cs
      mov ds,ax
   mov si,offset do0
   mov ax,0
   mov es,ax
   mov di,200h
   mov cx,offset do0end-offset do0
   cld
   rep movsb
   
   mov word ptr es:,200h
   mov word ptr es:,0h
   
      
   mov ax,4c00h
   int 21h
   
   do0:jmp short s
       db "divide error"
   s:mov ax,0b800h
   mov es,ax
   mov di,160*12+36*2
   mov si,202h
   mov ax,cs
   mov ds,ax
   
   mov cx,12
      
   s0:mov al,
   moves:,al
   inc si
   add di,2
   jmp short s0
   
       mov ax,4c00h
   int 21h
do0end:nop
   
   code ends
end start

莫名其妙 发表于 2012-2-29 14:10:56

本帖最后由 莫名其妙 于 2012-2-29 14:28 编辑

mov cx,12
      
   s0:mov al,
   moves:,al
   inc si
   add di,2
   jmp short s0
CX 木有参与循环jmp 无条件跳转!~
要用loop s0



付笑 发表于 2012-2-29 22:03:36

谢谢了,原来我是用的条件跳转,后来改成循环,下面没有改.......

付笑 发表于 2012-2-29 22:20:16

我改成下面这样后为什么,显示后面多了个0,还有个乱码呢

assume cs:code
code segment
start:mov ax,cs
      mov ds,ax
          mov si,offset do0
          mov ax,0
          mov es,ax
          mov di,200h
          mov cx,offset do0end-offset do0
          cld
          rep movsb
          
          mov ax,0
          mov es,ax
          
          mov word ptr es:,200h
          mov word ptr es:,0h
          
             

          mov ax,4c00h
          int 21h
          
          do0:jmp short s
              db "divide error",'0'
               s:mov ax,0b800h
                   mov es,ax
                   mov di,160*12+34*2
                   mov si,202h
                   mov ax,cs
                   mov ds,ax
                  
                   mov cx,12
                  
                        s0:
                          mov ch,0
                        mov cl,
                        jcxz ok
                       
                        mov al,
                        moves:,al
                        inc si
                        add di,2
                        jmp short s0
                       
             ok:mov ax,4c00h
                   int 21h
        do0end:nop
                  
                   code ends
                end start

莫名其妙 发表于 2012-3-2 08:48:22

本帖最后由 莫名其妙 于 2012-3-2 09:09 编辑

付笑 发表于 2012-2-29 22:20 http://bbs.fishc.com/static/image/common/back.gif
我改成下面这样后为什么,显示后面多了个0,还有个乱码呢

assume cs:code


   db "divide error",'0'

要细心阿!!! 0不能加 '   ' 单引号 加了表示的是字符了字符就要显示他的ASCII码    (双引号表示的是字符串!~)
                        而你要用jcxz 判断 只能是数据0 不是判断ascii码

mov cx,12   ;这里定义了cx =12   下面接着就给chcl 修改了你这里定义的到底什么意思呢 ?
                     ;你要用循环 下面就用loop 不能用jmp而且不用做 jcxz的判断
                     ;你要 用 jcxz 和jmp   那上面就不要用 cx=12做循环   只要给上面那个'0' 改成 0 就行了
                     ; 这样jcxz 才会判断cx是不是等于0
                  
                        s0:
                        mov ch,0
                        mov cl,
                        jcxz ok
                        
                        mov al,
                        moves:,al
                        inc si
                        add di,2
                      jmp short s0
                        

亲 搞定了 明白了要给好评哦!~

莫名其妙 发表于 2012-3-2 09:05:14

本帖最后由 莫名其妙 于 2012-3-2 09:09 编辑

assume cs:code
code segment
start:mov ax,cs
      mov ds,ax
          mov si,offset do0
          mov ax,0
          mov es,ax
          mov di,200h
          mov cx,offset do0end-offset do0
          cld
          rep movsb
         
          mov ax,0
          mov es,ax
         
          mov word ptr es:,200h
          mov word ptr es:,0h
         
            

          mov ax,4c00h
          int 21h
         
          do0:jmp short s
            db "divide error",0
                        s:mov ax,0b800h
                   mov es,ax
                   mov di,160*12+34*2
                   mov si,202h
                   mov ax,cs
                   mov ds,ax
                  ;    mov cx,12   ;如果用绿色CX循环的部分 请删掉蓝色部分                                    
                        s0:
                         mov ch,0
                        mov cl,
                        jcxz ok                           
                        mov al,
                        moves:,al
                        inc si
                        add di,2
                      jmp short s0
                     ;    loop s0      ;用loop 执行循环

                                    ok:mov ax,4c00h
                   int 21h
      do0end:nop
                  
                   code ends
                end start
已经OK了!~

这个是溢出错误的
assume cs:code
code segment
start: mov ax,10000
                mov al,10
                div al
      mov ax,4c00h
      int 21h
      
                   code ends
                end start      

fishc1008 发表于 2016-12-31 11:56:55

学习学习
页: [1]
查看完整版本: 这个O号中断哪里有问题啊