鱼C论坛

 找回密码
 立即注册
查看: 2096|回复: 0

[学习笔记] X86汇编语言-从实模式到保护模式—笔记(26)-第13章 程序的动态加载和执行(4)

[复制链接]
发表于 2017-12-1 19:12:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 兰陵月 于 2017-12-5 21:52 编辑
  1.          ;代码清单13-3
  2.          ;文件名:c13.asm
  3.          ;文件说明:用户程序
  4.          ;创建日期:2011-10-30 15:19   
  5.          
  6. ;===============================================================================
  7. SECTION header vstart=0

  8.          program_length   dd program_end          ;程序总长度#0x00
  9.          
  10.          head_len         dd header_end           ;程序头部的长度#0x04

  11.          stack_seg        dd 0                    ;用于接收堆栈段选择子#0x08
  12.          stack_len        dd 1                    ;程序建议的堆栈大小#0x0c
  13.                                                   ;以4KB为单位
  14.                                                   
  15.          prgentry         dd start                ;程序入口#0x10
  16.          code_seg         dd section.code.start   ;代码段位置#0x14
  17.          code_len         dd code_end             ;代码段长度#0x18

  18.          data_seg         dd section.data.start   ;数据段位置#0x1c
  19.          data_len         dd data_end             ;数据段长度#0x20
  20.             
  21. ;-------------------------------------------------------------------------------
  22.          ;符号地址检索表
  23.          salt_items       dd (header_end-salt)/256 ;#0x24
  24.          
  25.          salt:                                     ;#0x28
  26.          PrintString      db  '@PrintString'
  27.                      times 256-($-PrintString) db 0
  28.                      
  29.          TerminateProgram db  '@TerminateProgram'
  30.                      times 256-($-TerminateProgram) db 0
  31.                      
  32.          ReadDiskData     db  '@ReadDiskData'
  33.                      times 256-($-ReadDiskData) db 0
  34.                  
  35. header_end:

  36. ;===============================================================================
  37. SECTION data vstart=0   
  38.                         
  39.          buffer times 1024 db  0         ;缓冲区

  40.          message_1         db  0x0d,0x0a,0x0d,0x0a
  41.                            db  '**********User program is runing**********'
  42.                            db  0x0d,0x0a,0
  43.          message_2         db  '  Disk data:',0x0d,0x0a,0

  44. data_end:

  45. ;===============================================================================
  46.       [bits 32]
  47. ;===============================================================================
  48. SECTION code vstart=0
  49. start:
  50.          mov eax,ds
  51.          mov fs,eax
  52.      
  53.          mov eax,[stack_seg]
  54.          mov ss,eax
  55.          mov esp,0
  56.      
  57.          mov eax,[data_seg]
  58.          mov ds,eax
  59.      
  60.          mov ebx,message_1
  61.          call far [fs:PrintString]
  62.      
  63.          mov eax,100                         ;逻辑扇区号100
  64.          mov ebx,buffer                      ;缓冲区偏移地址
  65.          call far [fs:ReadDiskData]          ;段间调用
  66.      
  67.          mov ebx,message_2
  68.          call far [fs:PrintString]
  69.      
  70.          mov ebx,buffer
  71.          call far [fs:PrintString]           ;too.
  72.      
  73.          jmp far [fs:TerminateProgram]       ;将控制权返回到系统
  74.       
  75. code_end:

  76. ;===============================================================================
  77. SECTION trail
  78. ;-------------------------------------------------------------------------------
  79. program_end:
复制代码


diskdata.txt文件~

diskdata.rar

401 Bytes, 下载次数: 0

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 13:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表