X86汇编语言-从实模式到保护模式—笔记(26)-第13章 程序的动态加载和执行(4)
本帖最后由 兰陵月 于 2017-12-5 21:52 编辑;代码清单13-3
;文件名:c13.asm
;文件说明:用户程序
;创建日期:2011-10-30 15:19
;===============================================================================
SECTION header vstart=0
program_length dd program_end ;程序总长度#0x00
head_len dd header_end ;程序头部的长度#0x04
stack_seg dd 0 ;用于接收堆栈段选择子#0x08
stack_len dd 1 ;程序建议的堆栈大小#0x0c
;以4KB为单位
prgentry dd start ;程序入口#0x10
code_seg dd section.code.start ;代码段位置#0x14
code_len dd code_end ;代码段长度#0x18
data_seg dd section.data.start ;数据段位置#0x1c
data_len dd data_end ;数据段长度#0x20
;-------------------------------------------------------------------------------
;符号地址检索表
salt_items dd (header_end-salt)/256 ;#0x24
salt: ;#0x28
PrintString db'@PrintString'
times 256-($-PrintString) db 0
TerminateProgram db'@TerminateProgram'
times 256-($-TerminateProgram) db 0
ReadDiskData db'@ReadDiskData'
times 256-($-ReadDiskData) db 0
header_end:
;===============================================================================
SECTION data vstart=0
buffer times 1024 db0 ;缓冲区
message_1 db0x0d,0x0a,0x0d,0x0a
db'**********User program is runing**********'
db0x0d,0x0a,0
message_2 db'Disk data:',0x0d,0x0a,0
data_end:
;===============================================================================
;===============================================================================
SECTION code vstart=0
start:
mov eax,ds
mov fs,eax
mov eax,
mov ss,eax
mov esp,0
mov eax,
mov ds,eax
mov ebx,message_1
call far
mov eax,100 ;逻辑扇区号100
mov ebx,buffer ;缓冲区偏移地址
call far ;段间调用
mov ebx,message_2
call far
mov ebx,buffer
call far ;too.
jmp far ;将控制权返回到系统
code_end:
;===============================================================================
SECTION trail
;-------------------------------------------------------------------------------
program_end:
diskdata.txt文件~
页:
[1]