杨季文 80x86汇编语言程序设计 实例一
2008-03-17 22:14
148 查看
JUMP MACRO selector,offsetv
DB 0EAH
DW offsetv
DW selector
ENDM
ECHOCH MACRO ascii
mov ah,2
mov dl,ascii
int 21h
ENDM
DESCRIPTOR STRUC
LIMITL DW 0
BASEL DW 0
BASEM DB 0
ATTRIBUTES DW 0
BASEH DB 0
DESCRIPTOR ENDS
PDESC STRUC
LIMIT DW 0
BASE DD 0
PDESC ENDS
.386P
DATA SEGMENT USE16
GDT LABEL BYTE
DUMMY DESCRIPTOR <>
CODE_DES DESCRIPTOR <0FFFFH,0,0,98H,0>
CODE_SEL = CODE_DES - GDT
DATAD_DES DESCRIPTOR <0FFFFH,0,0,92H,0>
DATAD_SEL = DATAD_DES - GDT
DATAS_DES DESCRIPTOR <0FFFFH,0,11H,92H,0>
DATAS_SEL = DATAS_DES - GDT
GDTLEN = $-GDT
VGDTR PDESC <GDTLEN-1,0>
BUFFERLEN = 256
BUFFER DB BUFFERLEN DUP(0)
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV BX,16
MUL BX
ADD AX,OFFSET GDT
ADC DX,0
MOV WORD PTR VGDTR.BASE,AX
MOV WORD PTR VGDTR.BASE+2,DX
MOV AX,CS
MUL BX
MOV CODE_DES.BASEL,AX
MOV CODE_DES.BASEM,DL
MOV CODE_DES.BASEH,DH
MOV AX,DS
MUL BX
ADD AX,OFFSET BUFFER
ADC DX,0
MOV DATAD_DES.BASEL,AX
MOV DATAD_DES.BASEM,DL
MOV DATAD_DES.BASEH,DH
LGDT QWORD PTR VGDTR
CLI
CALL EA20
MOV EAX,CR0
OR EAX,1
MOV CR0,EAX
JUMP <CODE_SEL>,<OFFSET VIRTUAL>
VIRTUAL:
MOV AX,DATAS_SEL
MOV DS,AX
MOV AX,DATAD_SEL
MOV ES,AX
CLD
XOR SI,SI
XOR DI,DI
MOV CX,BUFFERLEN/4
REPZ MOVSD
MOV EAX,CR0
AND EAX,0FFFFFFFEH
MOV CR0,EAX
JUMP <SEG REAL>,<OFFSET REAL>
REAL:
CALL DA20
STI
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUFFER
CLD
MOV BP,BUFFERLEN/16
NEXTLINE:
MOV CX,16
NEXTCH:
LODSB
PUSH AX
SHR AL,4
CALL TOASCII
ECHOCH AL
POP AX
CALL TOASCII
ECHOCH AL
ECHOCH ' '
LOOP NEXTCH
ECHOCH 0DH
ECHOCH 0AH
DEC BP
JNZ NEXTLINE
MOV AH,4CH
INT 21H
TOASCII PROC
and al,0fh
add al,90h
daa
adc al,40h
daa
ret
TOASCII ENDP
EA20 PROC
PUSH AX
IN AL,92H
OR AL,2
OUT 92H,AL
POP AX
RET
EA20 ENDP
DA20 PROC
PUSH AX
IN AL,92H
AND AL,0FDH
OUT 92H,AX
POP AX
RET
DA20 ENDP
CODE ENDS
END START
相关文章推荐
- 杨季文 80x86汇编语言程序设计 实例三
- 杨季文 80x86汇编语言程序设计 实例二
- 杨季文 80x86汇编语言程序设计 实例五
- 深入浅出Win32多线程程序设计之(五):综合实例
- CPU卡程序设计实例(六)ETU配置
- Windows程序设计的第一个实例
- CPU卡程序设计实例(十六)文件选择
- WPF程序设计指南(Applications = Code + Markup)实例源码下载
- JavaScript程序设计高级算法之动态规划实例分析
- Android学习总结————Java程序设计技巧与开发实例(朱福喜)
- Linux 程序设计学习笔记----终端及串口编程及实例应用
- Linux JNI实例及其JNI程序设计模板
- [转]smarty实例教程 ---程序设计部分
- unix网络编程各种TCP客户-服务器程序设计实例(三)
- 程序设计模式(五) C++ 单实例(Singleton)模式
- 面向对象的程序设计-学习笔记-28-虚函数的使用(实例补充)
- Android程序设计之AIDL实例详解
- CPU卡程序设计实例(七)CPU卡上、下电
- Java 打印程序设计实例
- 深入浅出Win32多线程程序设计之综合实例