当前位置: 首页 > news >正文

atapi!IdeReadWrite函数分析中.txt


第一部分:

    if (deviceExtension->DeviceFlags[Srb->TargetId] & DFLAGS_LBA) {

        SelectIdeDevice(baseIoAddress1,
                        Srb->TargetId,
                        (IDE_LBA_MODE | ((startingSector & 0x0f000000) >> 24)));

        IdePortOutPortByte (
                           baseIoAddress1->BlockNumber,
                           (UCHAR) ((startingSector & 0x000000ff) >> 0));
        IdePortOutPortByte (
                           baseIoAddress1->CylinderLow,
                           (UCHAR) ((startingSector & 0x0000ff00) >> 8));

        IdePortOutPortByte (
                           baseIoAddress1->CylinderHigh,
                           (UCHAR) ((startingSector & 0x00ff0000) >> 16));


第二部分:
//
// Device selection constants used for programming the device/head register.
//
#define IDE_LBA_MODE        0xE0


cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f6
        mov     al,[esp+8]              ; (al) = Value        eax=800000e0
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

stdENDP _WRITE_PORT_UCHAR


0: kd> p
eax=800000e0 ebx=804f4d68 ecx=000000e0 edx=000001f6 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000282
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al

第三部分:

        IdePortOutPortByte (
                           baseIoAddress1->BlockNumber,
                           (UCHAR) ((startingSector & 0x000000ff) >> 0));


cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f3
        mov     al,[esp+8]              ; (al) = Value        eax=8000003f
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

stdENDP _WRITE_PORT_UCHAR

0: kd> p
eax=8000003f ebx=804f4d68 ecx=000000e0 edx=000001f3 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000282
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al


第四部分:

        IdePortOutPortByte (
                           baseIoAddress1->CylinderLow,
                           (UCHAR) ((startingSector & 0x0000ff00) >> 8));

cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f4
        mov     al,[esp+8]              ; (al) = Value        eax=00006000
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

stdENDP _WRITE_PORT_UCHAR

0: kd> p
eax=00006000 ebx=804f4d68 ecx=000000e0 edx=000001f4 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000206
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al

第五部分:

        IdePortOutPortByte (
                           baseIoAddress1->CylinderHigh,
                           (UCHAR) ((startingSector & 0x00ff0000) >> 16));

cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f5
        mov     al,[esp+8]              ; (al) = Value        eax=00000060
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

0: kd> p
eax=00000060 ebx=804f4d68 ecx=000000e0 edx=000001f5 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000206
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al

相关文章:

  • LeeCode 98. 验证二叉搜索树
  • LearnOpenGL-笔记-其十二
  • oscp练习PG Monster靶机复现
  • C# 如何获取当前成员函数的函数名
  • Kerberos面试内容整理-Kerberos 与 LDAP/Active Directory 的集成
  • C++哈希表:unordered系列容器详解
  • 2.5/Q2,Charls最新文章解读
  • 动态规划-376.摆动序列-力扣(LeetCode)
  • 使用HTTPS进行传输加密
  • WIN11+eclipse搭建java开发环境
  • Codesys FOR 循环之轴控
  • AIGC学习笔记(8)——AI大模型开发工程师
  • AI读懂天书:Manus AI跨语种手写识别解密
  • 【Python】解析 io.StringIO 与 io.BytesIO
  • Kafka 的 ISR 机制深度解析:保障数据可靠性的核心防线
  • Java 文件操作 和 IO(4)-- Java文件内容操作(2)-- 字符流操作
  • CloudCompare-源码分析-绘制与 3D 场景分离的“前景”元素
  • Remote Sensing投稿记录(投稿邮箱写错、申请大修延期...)风雨波折投稿路
  • 澄清 STM32 NVIC 中断优先级
  • simulink mask的使用技巧
  • 河南网站托管/百度产品大全入口
  • 网站建设制作fash/网站技术解决方案
  • 网站建设的步骤教学/南京 seo 价格
  • 政府网站集约建设自查报告/百度搜索广告推广
  • 提供网站建设服务的网站/网络推广项目计划书
  • 网站建设网址/南昌seo优化