鱼C论坛

 找回密码
 立即注册
查看: 3398|回复: 6

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

[复制链接]
发表于 2012-2-29 12:37:39 | 显示全部楼层 |阅读模式
1鱼币
和实验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:[0],200h
   mov word ptr es:[2],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,[si]
   mov  es:[di],al
   inc si
   add di,2
   jmp short s0
   
       mov ax,4c00h
     int 21h
do0end:nop
     
     code ends
  end start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-29 14:10:56 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-2-29 14:28 编辑
mov cx,12
      
   s0:mov al,[si]
   mov  es:[di],al
   inc si
   add di,2
   jmp short s0 
CX 木有参与循环  jmp 无条件跳转!~
要用  loop s0



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-29 22:03:36 | 显示全部楼层
谢谢了,原来我是用的条件跳转,后来改成循环,下面没有改.......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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:[0],200h
          mov word ptr es:[2],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,[si]
                        jcxz ok
                       
                        mov al,[si]
                        mov  es:[di],al
                        inc si
                        add di,2
                        jmp short s0
                       
               ok:mov ax,4c00h
                   int 21h
        do0end:nop
                  
                   code ends
                end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-2 08:48:22 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-2 09:09 编辑


   db "divide error",'0'

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

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

亲 搞定了 明白了要给好评哦!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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:[0],200h
          mov word ptr es:[2],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,[si]
                        jcxz ok
     
                        
                        mov al,[si]
                        mov  es:[di],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        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-31 11:56:55 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 18:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表