8086段偏移的计算
来源:互联网 发布:杀毒软件哪个好 知乎 编辑:程序博客网 时间:2024/06/02 05:45
前言
8086一共20根地址线,用16bit的段地址 + 4bit偏移来寻址物理地址.
同一个物理地址可以用多个逻辑地址(不同的段地址+偏移)表示
测试程序
// testcase1.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdlib.h>#include <stdio.h>#include <assert.h>// 根据段和偏移算物理地址long Get8086PhAddr(/*IN*/ int iSegment, /*IN*/ int iOffset);// 根据物理地址和偏移得到段地址int Get8086Segment(/*IN*/ long lPhAddr, /*IN*/ int iOffset);// 根据物理地址和段地址得到偏移int Get8086Offset(/*IN*/ long lPhAddr, /*IN*/ int iSegment);int main(int argc, char* argv[]){ long lTmp = 0; long lPhAddr = 0; int iSegment = 0; int iOffset = 0; // -d 123:456 lPhAddr = Get8086PhAddr(0x123, 0x456); printf("0x%X = 123:456\n", lPhAddr); // -d ? : 186 iSegment = Get8086Segment(lPhAddr, 0x186); lTmp = Get8086PhAddr(iSegment, 0x186); assert(lPhAddr == lTmp); printf("0x%X = %X:186\n", lTmp, iSegment); // -d 105:? iOffset = Get8086Offset(lPhAddr, 0x105); lTmp = Get8086PhAddr(0x105, iOffset); assert(lPhAddr == lTmp); printf("0x%X = 105:%X\n", lTmp, iOffset); /* run result 0x1686 = 123:456 0x1686 = 150:186 0x1686 = 105:636 请按任意键继续. . . 用debug验证, 以下方式内存结果相同, 说明一个物理地址可以用多个逻辑地址表示 -d 123:456 -d 150:186 -d 105:636 -d 0:1686 */ system("pause"); return 0;}long Get8086PhAddr(/*IN*/ int iSegment, /*IN*/ int iOffset) { return ((long)iSegment << 4) + iOffset;}int Get8086Segment(/*IN*/ long lPhAddr, /*IN*/ int iOffset) { return ((lPhAddr - iOffset) >> 4);}int Get8086Offset(/*IN*/ long lPhAddr, /*IN*/ int iSegment) { return lPhAddr - ((long)iSegment << 4);}
验证
0 0
- 8086段偏移的计算
- 8086段寄存器偏移
- 8086段寄存器偏移
- 结构体偏移的计算
- 8086汇编语言 取得一个标号的段地址CS与偏移地址IP
- 单片机机器码以及偏移地址的计算
- 结构体成员偏移量的计算
- 计算偏移的方法直接用;
- iOS计算textField的光标偏移量
- 基于重心偏移的视差计算
- 结构体的偏移量计算
- 基于重心偏移的视差计算
- GB2312、GBK字库偏移地址的计算
- 8088段和偏移
- 段界限是指的段内最大偏移值,第1个字节偏移为0,最后一个则偏移为长度-1了。
- 计算号段的方法
- 段地址和偏移地址
- 时间偏移计算
- Qt事件系统
- 设计模式之七大原则之 依赖倒置原则
- 数据结构学习--快速排序算法
- R.java was modified manually! Reverting to generated version!(R文件丢失异常原因汇总)
- 向上转型与向下转型
- 8086段偏移的计算
- Volley框架
- pushd popd dirs
- 使用JDK开发WebService
- win7与virtualbox安装的ubuntu系统资源相互访问
- ADB not responding. If you'd like to retry, then please manually kill "adb.e处理 Android studio2.1
- 用jquery制作导航定位特效
- java动态规划 实现输出最大公共子序列的长度以及输出最大子字符串
- hive 开机重启 mysql