回 帖 发 新 帖 刷新版面

主题:[讨论]如何在.com模式下 写中断程序??????

我写了一个 中断程序 要用 tlink  *.obj /t

连接成  .com文件时总是 显示 segment-relocatable  items present


源程序 如下  希望高人指点一下阿 ^_^ 
code    segment
    org    100h
    assume    cs:code,ds:code,ss:code,es:code
main    proc    near

    call    CLRSCR
    lea    dx,news
    mov    ah,09h
    int    21h


    
    push    ds    
    mov    ax,seg IRQ
    mov    ds,ax
    lea    dx,IRQ
    mov    al,0fh
    mov    ah,25h
    int    21h
    pop    ds    
    cli
    and    al,01111111b
    out    21h,al
    mov    count,5 ;set the counter
    sti
loop1:
    jmp    loop1
    
main    endp    
;====================================    
IRQ    proc    near

    
    call    CLRSCR
    lea    dx,new_IRQ
    mov    ah,09h
    int    21h
    
    mov    al,20h
    out    20h,al
    
    dec    count
    jnz    exit
    
    in    al,21h
    or    al,10000000b
    out    21h,al
    
    sti



    mov    ax,4c00h
    int    21h

exit:
    iret
IRQ    endp
....
...
...

code     ends

         end   main



回复列表 (共5个回复)

沙发

你不应该直接用汇编器生成com文件,应该先产生exe文件(当然内部格式仍然用com的格式编写),然后用dos的exe2bin工具把它转换为com文件。

板凳


我试了试
可是 仍然不行啊

希望 版主 能 将其运行一下 
看是否可以


我同学编了一个  .exe格式的(用了 两个段  cs 和 ds)
可是我想知道用 .com的 (只用一个段)行马???


谢谢您

3 楼

NASM可以直接生成.com文件。

4 楼

IRQ    proc    near

    
    call    CLRSCR
    lea    dx,new_IRQ
    mov    ah,09h
    int    21h
    
    mov    al,20h
    out    20h,al
    
    dec    count
    jnz    exit
    
    in    al,21h
    or    al,10000000b
    out    21h,al
    
    sti



    mov    ax,4c00h
    int    21h

exit:
    iret
IRQ    endp
你这个程序应该是外部中断调用。因为外部中断是随即产生的,它的ds也是不确定的
所以在这个中断程序开始应该有
mov ax,data
mov ds,ax
这是必须的~你试一下

5 楼

哈哈

非常感谢各位
我试试  果然可以 

同时 我 也知道了我原来的错误在哪里

我用.com模式编程时  不应该有 mov ax,seg IRQ
因为 这里只有一个 code 段 所以 用seg 命令会使 编译器(masm)
产生错误

再次 谢谢你们 :)

我来回复

您尚未登录,请登录后再回复。点此登录或注册