汇编 系统 & 通信 & 硬件

图片.png

介绍

显卡
  • 显卡内部非常复杂,且包含大量寄存器
  • 为了不过度占用I/O空间,故很多寄存器都使用指定的寄存器间接访问
显卡寄存器映射地址描述
14,150x0e,0x0f光标索引 //8bit * 2 //两个寄存器共同存储光标索引

;中断---------------

;退出进程
mov ax, 1
int 0x80

;打印文字
msg db "hello world!"  ;字符
msg_len equ $-data     ;字符长度
	mov ax, 4          ;写入
	mov bx, 1          ;标准输出
	mov cx, msg        ;字符串
	mov dx, msg_len       ;字符串长度
	int 0x80


;输入输出--------------------------
;显卡读写-------
;获取光标的行号 ; al = 0x0e
mov al, 0x0e
out 0x3d4, al   ;0x3d4 = 0x0e ;指定要读取的寄存器
in al, 0x3d5    ;al = 0x3d5   ;获取指定的寄存器的值

;修改光标的行号 ; 0x0e = al
out 0x3d5, al   ;0x3d5 = al   ;修改指定的寄存器的值

;读取硬盘--------
计算机原理
;要求硬盘从主盘,使用LBA模式读取 0x0000002 扇区号开始的 1 个扇区

; 设置读取扇区数量
mov al, 0x01
out 0x1f2, al

; 0xe0000002 => LBA = 0x0000002 
mov al, 0x02
out 0x1f3, al   ;0x1f3 = 0x02
mov al, 0x00
out 0x1f4, al   ;0x1f4 = 0x00
out 0x1f5, al   ;0x1f5 = 0x00
mov al, 0xe0
out 0x1f6, al   ;0x1f6 = 0xe0 ; 硬盘号 = 0xe = 1111 = 1 , 111 = (主盘,LBA模式)

;发送 0x20 命令 ;要求硬盘执行读取
mov al, 0x20
out 0x1f7, al   

;等待数据到达 ;循环等待直到 al = 000100 
waits:
	in al, 0x1f7
	and al, 0x88    ; al | 0x88 ;过滤其他状态仅留下 0000 1000
	cmp al, 0x08    ; 比较 0000 1000 与 0000 1000 来决定是否完成状态
	jnz waits
    
;读取数据
mov bx, buffer  ;设置buffer ;存储读取到的数据
mov cx, 256     ;循环次数 ;每次读取 16bit ;读取256 * 16 bit
readw:
	in ax, 0x1f0
	mov [bx], ax
	add bx, 2
	loop readw

;定义 buffer 256 byte 字节
buffer db 0
times 255 db 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值