当前位置: 代码迷 >> 汇编语言 >> (汇编初级有关问题)请教这里是用什么命令输出的
  详细解决方案

(汇编初级有关问题)请教这里是用什么命令输出的

热度:629   发布时间:2013-02-26 00:00:00.0
(汇编初级问题)请问这里是用什么命令输出的
之前只知道调用bios中断10h和dos中断21h,然后读取相应的寄存器数据,来输出内容。

这里的TestRead-》DispAL里面调用的哪个命令是屏幕输出呢? 是怎么输出的呢?

哪些文章或书是有关这些I/O一类方面的?

; ==========================================

; pmtest2.asm 
; 编译方法:nasm pmtest2.asm -o pmtest2.com 
; ========================================== 


%include "pm.inc" ; 常量, 宏, 以及一些说明 


org 0100h 
jmp LABEL_BEGIN 


[SECTION .gdt] 
; GDT 
; 段基址, 段界限 , 属性 
LABEL_GDT: Descriptor 0, 0, 0 ; 空描述符 
LABEL_DESC_NORMAL: Descriptor 0, 0ffffh, DA_DRW ; Normal 描述符 
LABEL_DESC_CODE32: Descriptor 0, SegCode32Len - 1, DA_C + DA_32 ; 非一致代码段, 32 
LABEL_DESC_CODE16: Descriptor 0, 0ffffh, DA_C ; 非一致代码段, 16 
LABEL_DESC_DATA: Descriptor 0, DataLen - 1, DA_DRW ; Data 
LABEL_DESC_STACK: Descriptor 0, TopOfStack, DA_DRWA + DA_32 ; Stack, 32 位 
LABEL_DESC_TEST: Descriptor 0500000h, 0ffffh, DA_DRW 
LABEL_DESC_VIDEO: Descriptor 0B8000h, 0ffffh, DA_DRW ; 显存首地址 
; GDT 结束 


GdtLen equ $ - LABEL_GDT ; GDT长度 
GdtPtr dw GdtLen - 1 ; GDT界限 
dd 0 ; GDT基地址 


; GDT 选择子 
SelectorNormal equ LABEL_DESC_NORMAL - LABEL_GDT 
SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT 
SelectorCode16 equ LABEL_DESC_CODE16 - LABEL_GDT 
SelectorData equ LABEL_DESC_DATA - LABEL_GDT 
SelectorStack equ LABEL_DESC_STACK - LABEL_GDT 
SelectorTest equ LABEL_DESC_TEST - LABEL_GDT 
SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT 
; END of [SECTION .gdt] 


[SECTION .data1] ; 数据段 
ALIGN 32 
[BITS 32] 
LABEL_DATA: 
SPValueInRealMode dw 0 
; 字符串 
PMMessage: db "In Protect Mode now. ^-^", 0 ; 进入保护模式后显示此字符串 
OffsetPMMessage equ PMMessage - $$ 
StrTest: db "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0 
OffsetStrTest equ StrTest - $$ 
DataLen equ $ - LABEL_DATA 
; END of [SECTION .data1] 




; 全局堆栈段 
[SECTION .gs] 
ALIGN 32 
[BITS 32] 
LABEL_STACK: 
times 512 db 0 


TopOfStack equ $ - LABEL_STACK - 1 


; END of [SECTION .gs] 




[SECTION .s16] 
[BITS 16] 
LABEL_BEGIN: 
mov ax, cs 
mov ds, ax 
mov es, ax 
mov ss, ax 
mov sp, 0100h 


mov [LABEL_GO_BACK_TO_REAL+3], ax 
mov [SPValueInRealMode], sp 


; 初始化 16 位代码段描述符 
mov ax, cs 
movzx eax, ax 
shl eax, 4 
add eax, LABEL_SEG_CODE16 
mov word [LABEL_DESC_CODE16 + 2], ax 
shr eax, 16 
mov byte [LABEL_DESC_CODE16 + 4], al 
mov byte [LABEL_DESC_CODE16 + 7], ah 


; 初始化 32 位代码段描述符 
xor eax, eax 
mov ax, cs 
shl eax, 4 
add eax, LABEL_SEG_CODE32 
mov word [LABEL_DESC_CODE32 + 2], ax 
shr eax, 16 
mov byte [LABEL_DESC_CODE32 + 4], al 
mov byte [LABEL_DESC_CODE32 + 7], ah 


; 初始化数据段描述符 
xor eax, eax 
mov ax, ds 
shl eax, 4 
add eax, LABEL_DATA 
mov word [LABEL_DESC_DATA + 2], ax 
shr eax, 16 
mov byte [LABEL_DESC_DATA + 4], al 
mov byte [LABEL_DESC_DATA + 7], ah 


; 初始化堆栈段描述符 
xor eax, eax 
mov ax, ds 
shl eax, 4 
add eax, LABEL_STACK 
mov word [LABEL_DESC_STACK + 2], ax 
  相关解决方案