. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->内中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验十二的一个问题  [待解决] 回复[ 1次 ]   点击[ 391次 ]  
inrg
[帖 主]   [ 发表时间:2010-02-04 09:47 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2007-12-08 14:22
书上有句“然后返回到DOS”这里说的是纯DOS模式么?我看了这个实验的程序都是 mov ax, 4c00h int 21h 结尾的,这个语句直接关闭MS-DOS了,iret可以显示字符串,但是也返回不到DOS,好像是死循环 -_-#,这里面用IRET返回,控制权(CS:IP)是交给DOS了还是系统内部了。。。

附上代码:
assume cs:codesg

codesg segment
start:
    mov cx, offset _int0end - offset int0
    mov ax, cs
    mov ds, ax
    mov si, offset int0
    mov ax, 0
    mov es, ax
    mov di, 200h
    cld
    rep movsb
    
    mov word ptr es:[0], 200h
    mov word ptr es:[2], 0
    
    mov ax, 1000h
    mov bl, 1
    div bl
    
    mov ah, 1
    int 21h
    
    mov ax, 4c00h
    int 21h
int0:
    jmp short _int0start
    db 'divide error!',0
_int0start:
    mov cx, 0b800h
    mov es, cx
    mov di, 0
    mov si, 202h
    xor cx, cx
_int0show:
    mov cl, cs:[si]
    jcxz _int0showend
    mov es:[di], cl
    inc si
    add di, 2
    jmp short _int0show
_int0showend:
    iret
_int0end:
    nop
codesg ends
end start
abob
[第1楼]   [ 回复时间:2010-02-04 15:40 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
书上有句“然后返回到DOS”这里说的是纯DOS模式么?我看了这个实验的程序都是 mov ax, 4c00h int 21h 结尾的,这个语句直接关闭MS-DOS了,
----------
第四章提到了这两条程序返回指令。

这两条实际是中断的调用,也就相当于C语言中的ansic库函数。相关的内容可以查看中断INT 21H
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved