美文网首页
[015][x86汇编语言]BIOS中断,从键盘读取字符并显示

[015][x86汇编语言]BIOS中断,从键盘读取字符并显示

作者: AkuRinbu | 来源:发表于2018-05-26 05:32 被阅读0次

学习笔记

《x86汇编语言:从实模式到保护模式》
https://www.jianshu.com/p/d481cb547e9f

使用BIOS中断,从键盘读取字符并显示

使用BIOS中断,从键盘读取字符并显示

代码参考

配书代码 c09_2.asm

BIOS 与 DOS 的区别

BIOS 与 DOS 的区别-1
BIOS 与 DOS 的区别-2

《汇编语言(第三版)》王爽 第258-259页

BIOS是如何建立起调用中断的?

BIOS是如何建立起调用中断的-1
BIOS是如何建立起调用中断的-2

《x86汇编语言:从实模式到保护模式》第164-165页

中断类型:硬件中断、内部中断 、软中断

中断类型:硬件中断、内部中断 、软中断

完整源程序:用户程序 code_9-2.asm(增加注释)

         ;代码清单9-2
         ;文件名:code_9-2.asm
         ;文件说明:用于演示BIOS中断的用户程序 
         ;创建日期:5:02 2018/5/27
         
;===============================================================================
SECTION header vstart=0                     ;定义用户程序头部段 
    program_length  dd program_end          ;程序总长度[0x00]
    
    ;用户程序入口点
    code_entry      dw start                ;偏移地址[0x04]
                    dd section.code.start   ;段地址[0x06] 
    
    realloc_tbl_len dw (header_end-realloc_begin)/4
                                            ;段重定位表项个数[0x0a]
    
    realloc_begin:
    ;段重定位表           
    code_segment    dd section.code.start   ;[0x0c]
    data_segment    dd section.data.start   ;[0x14]
    stack_segment   dd section.stack.start  ;[0x1c]
    
header_end:                
    
;===============================================================================
SECTION code align=16 vstart=0           ;定义代码段(16字节对齐) 
start:
        mov ax,[stack_segment]
        mov ss,ax
        mov sp,ss_pointer
        mov ax,[data_segment]
        mov ds,ax
        
        mov cx,msg_end - message
        mov bx,message
        
    .putc:
        mov ah,0x0e     ;在寄存器ah中指定功能号0x0e
        mov al,[bx]     ;在寄存器al中指定要显示的字符
        int 0x10        ;执行中断0x10 的 0x0e号功能
        inc bx          ;       在屏幕上的光标处写一个字符,并且推进光标位置
        loop .putc  

    .reps:
        mov ah,0x00     ;在寄存器ah中指定功能号0x00
        int 0x16        ;执行中断0x16的0x00号功能:从键盘读字符
                        ;返回字符的ASCII码到寄存器al
        mov ah,0x0e     
        mov bl,0x07     ;???
        int 0x10        ;执行中断0x10的0x0e号功能
        
        jmp .reps
        
;===============================================================================
SECTION data align=16 vstart=0

    message       db 'Hello, friend!',0x0d,0x0a
                  db 'This simple procedure used to demonstrate '
                  db 'the BIOS interrupt.',0x0d,0x0a
                  db 'Please press the keys on the keyboard ->'
    msg_end:
                   
;===============================================================================
SECTION stack align=16 vstart=0
           
                 resb 256
ss_pointer:
 
;===============================================================================
SECTION program_trail
program_end:

相关文章

  • IO流java.util.Scanner

    从键盘读取 从字符串读取 从文件读取

  • BIOS 中断描述(4)

    7. 中断服务: 16H 键盘 I/O 服务 7.1 服务号:0 键盘读取 返回键盘缓冲区中的下一个字符; 如果没...

  • Linux学习笔记 - BOOT(轮廓)

    简述: 硬件主动读取BIOS. BIOS会检测硬件并做自我测试. BIOS根据配置获取第一个可以启动的装置, 并读...

  • linux内核是如何处理中断的

    中断是现代CPU工作的重要组曾部分。例如,每当你按下键盘上的按键,CPU就会产生中断,PC就会从键盘上读取您收入的...

  • Shell Snippet

    显示当前时间+时区 提示输入确认信息 switch-case语法 读取键盘输入 循环语句 and , or 字符串...

  • 009_从键盘上读取输入的字符串。

    namespace _009_从键盘上读取输入的字符串 { class Program { stati...

  • Android 显示输入法中的emoji表情以及String字符

    实现用原生键盘输入表情并显示,有两种办法: 发送时将String字符串转换为Unicode编码字符串,显示接收的列...

  • x86基础实验-INT16读取按键

    简介 分别使用AH=0中断方式、AH=1轮询方式读取键盘按键,并输出按键的扫描码和ASCII码。ESC键退出程序 ...

  • 读取键盘录入

    字节流: 字符流: 读取键盘录入: windows中的回车符:ASCII值 /r: 13/n: 10 需求: 从键...

  • 05-echo命令

    1.显示普通字符串: 2.显示转义字符 3.显示变量 read 命令从标准输入中读取一行,并把输入行的每个字段的值...

网友评论

      本文标题:[015][x86汇编语言]BIOS中断,从键盘读取字符并显示

      本文链接:https://www.haomeiwen.com/subject/cjnvjftx.html