| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1816 人关注过本帖
标题:关于中断调用
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:17 
关于中断调用
王爽汇编13章关于int 7ch中断的一个列子
就是ax里有一个数 然后用写一个7ch中断来求他的平方
我基本照书复制了一个中断 程序能运行 但是调用后 在屏幕上什么都没显示
我去掉中断 直接在mov ax, 2345后面 写mul ax 运行后就能在屏幕上显示正确的结果:2 * 2345^2 = 10998050
下面是代码 还是不知道是中断写的有问题 还是 调用的时候有问题
代码比较长 但几个子函数:show_str, divdw, dtoc基本不用看 应该没问题
各位看官就帮看下start后面的中断和main的衔接是否正常。
程序代码:
;#Mode=DOS
;MASMPlus 单文件代码模板 - 纯 DOS 程序
;--------------------------------------------------------------------
;单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件
assume cs:code, ds:data

data segment
   db 20 dup(0)
data ends

code segment
     start:  mov bx, cs
             mov ds, bx
             mov si, offset sqr
            

             mov bx, 0
             mov es, bx
             mov di, 200h
            

             mov cx, offset sqrend - offset sqr
             cld
             rep movsb
            

             mov bx, 0
             mov es, bx
             mov WORD ptr es:[7ch * 4], 200h
             mov WORD ptr es:[7ch * 4 + 2], 0
            

             mov ah, 1
             int 21h
             mov ax, 4c00h
             int 21h
           

       sqr:  mul ax
             iret
            

     sqrend:  nop
    

      main:  mov ax, data     

             mov ds, ax
            

             mov ax, 2345
             int 7ch
             ;mul ax           ; 曾经试过直接求平方 可以得到正确的结果

             add ax, ax
             adc dx, dx
             mov si, 0         ; 指向数据段首地址
             call  dtoc        ; 平方后翻倍 并把结果转化为字符串 放到data中
            

             mov dh, 9
             mov dl, 3
             mov cl, 2
             mov si, 0
             call  show_str    ; 显示字符串
            

             mov ah, 1
             int 21h
             mov ax, 4c00h
             int 21h
    

     dtoc:   push ax
             push bx
             push cx
             push dx
             push si
             push di
             mov di, 0
       d20:  mov cx, 10
             call divdw       ; 呼叫不溢出除法
             add cx, 30h
             push cx
             inc di
             mov cx, ax
             jcxz d21
             jmp d20
       d21:  mov cx, dx
             jcxz d22
             jmp d20
       d22:  mov cx, di
       d23:  pop ax
             mov [si], al
             inc si
             loop d23
             mov al, 0
             mov [si], al
             pop di
             pop si
             pop dx
             pop cx
             pop bx
             pop ax
             ret
            

     divdw:                

             push bx
             push si
             push ax
             mov ax, dx
             mov dx, 0
             div cx
             mov si, ax
             pop ax
             div cx
             mov cx, dx
             mov dx, si
             pop si
             pop bx
             ret

 

  show_str:  push ax
             push bx
             push es
             mov ax, 0b800h
             mov es, ax
             mov ax, 160
             mul dh
             mov bx, ax
             mov ax, 2
             mul dl
             add bx, ax
             mov al, cl
             mov cl, 0
            

      show1: mov ch, [si]
             jcxz  show2
             mov es:[bx], ch
             mov es:[bx].1, al
             add bx, 2
             inc si
             jmp show1
      show2: pop es
             pop bx

             pop ax          

             ret
            

code ends

end start

搜索更多相关主题的帖子: start 
2012-08-18 20:43
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
今天Z版 搬砖搬累了 是不是喝了二两 倒头就睡了。

梅尚程荀
马谭杨奚







                                                       
2012-08-18 20:58
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
以下是引用有容就大在2012-8-18 20:58:00的发言:

今天Z版 搬砖搬累了 是不是喝了二两 倒头就睡了。

对啊 明早还得搬砖呢
2012-08-18 21:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 3楼 zklhp
搞大中断那一块就有点蒙了 按理说是很顺当的程序,和书上的也没多大差别怎么就出不了正确结果呢。

梅尚程荀
马谭杨奚







                                                       
2012-08-18 21:51
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
呵呵 估计Z版被这种教科书式的问题搞烦躁了。

梅尚程荀
马谭杨奚







                                                       
2012-08-19 21:22
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用有容就大在2012-8-19 21:22:36的发言:

呵呵 估计Z版被这种教科书式的问题搞烦躁了。

对啊 你这问题20分要看这么长的代码 C版很多问题只要复述出书上的话就能得分 我肯定烦躁啊。。
2012-08-19 21:26
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 6楼 zklhp
哈哈 看来这次伸手没成功。。。

梅尚程荀
马谭杨奚







                                                       
2012-08-19 21:34
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用有容就大在2012-8-19 21:34:54的发言:

哈哈 看来这次伸手没成功。。。

汇编版很多大牛的 我只不过是个小菜 一块等大神罢
2012-08-19 21:38
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 8楼 zklhp
呵呵 真正的大神是王爽~~

梅尚程荀
马谭杨奚







                                                       
2012-08-19 21:47
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
看来是我要求太多 发问太频 有些失礼 如果有冒犯Z版的地方 还请多多海涵。
以后争取多看书 少发问

梅尚程荀
马谭杨奚







                                                       
2012-08-19 23:18
快速回复:关于中断调用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014119 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved