【问题标题】:Differences between: INT 10H , INT 16H, INT 21H区别:INT 10H、INT 16H、INT 21H
【发布时间】:2015-07-23 02:53:00
【问题描述】:

谁能向我解释一下汇编语言中的 INT 10H 、 INT 16H 、 INT 21H 之间的区别?我们什么时候应该使用它们中的任何一个以及用于什么目的?

例如:在这个打印“Hello, World!”的简单代码中 为什么我们在第四行使用 int 10h? 为什么我们在最后一行之前使用 int 16h?

name "hi-world"
org 100h     
mov ax, 3     
int 10h      
mov ax, 1003h
mov bx, 0
int 10h
mov ax, 0b800h
mov ds, ax
mov [02h], 'H'

mov [04h], 'e'

mov [06h], 'l'

mov [08h], 'l'

mov [0ah], 'o'

mov [0ch], ','

mov [0eh], 'W'

mov [10h], 'o'

mov [12h], 'r'

mov [14h], 'l'

mov [16h], 'd'

mov [18h], '!'


mov cx, 12  ; number of characters.
mov di, 03h ; start from byte after 'h'

c:  mov [di], 11101100b 
add di, 2 ; skip over next ascii code in vga memory.
loop c

; wait for any key press:
mov ah, 0
int 16h

ret

【问题讨论】:

    标签: assembly binary emulation x86-16


    【解决方案1】:

    首先INT表示中断,与int数据类型无关。

    每个INT代表一个函数族,其中AH通常代表函数号。

    例如:

    1. INT 0x10 用于屏幕操作
    • AH=0x00 -> 设置视频模式
    • AX=0x1003 -> 设置闪烁模式
    • AH=0x13 -> 写入字符串
    • AH=0x03 -> 获取光标位置
    1. INT 0x13 用于存储(HDD 和 FDD)
    • AH=0x42 -> 磁盘读取
    • AH=0x43 -> 磁盘写入
    1. INT 0x16 用于键盘控制和读取:
    • AH=0x00 -> 获取密钥
    • AH=0x03 -> 设置打字速度和延迟

    您可以在这里找到所有这些功能:Interrupt Jump Table

    但这些只是 BIOS INT,可以在启动期间由操作系统重写。例如Windows使用INT 0x2E进行用户空间和内核空间的通信;基于 Linux 的使用 INT 0x80。另见Linux System Call Table

    在您的代码中:

    • INT 0x10 with AH = 0x00 and AL = 3 (mov ax, 3) 表示:将视频模式设置为 TextMode 80x25 字符和 16 色。
    • INT 0x10 with AX = 0x1003 表示:启用切换强度/闪烁位到背景强度

    【讨论】:

    • 上次我检查 Windows 使用 int 0x2e 进行系统调用。入口点int 0x21 用于 DOS 调用。
    【解决方案2】:

    INT这里代表INTERRUPT,有00,01,02等Function Mode,INT 10h用于图形和视频模式初始化,INT 16h用于设置键盘行程。

    【讨论】:

      【解决方案3】:

      关于你的这个问题:

      我们应该在什么时候使用它们中的任何一个以及用于什么目的?

      可能永远不会。

      这些 BIOS 中断主要由 MS-DOS 应用程序使用,现在基本上已经过时了。它们在运行时不适用于在任何现代操作系统上运行的应用程序,因此您可能永远不会使用它们。 (例外情况可能包括如果您正在开发某些在启动过程的早期运行的软件,例如引导加载程序、硬件设备的固件,或者您正在开发 BIOS 本身。)

      【讨论】:

        猜你喜欢
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 2013-01-26
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多