基址寄存器,什么叫基址寄存器什么叫位移量

基址寄存器的内容是由操作系统确定的吗

基址寄存器,什么叫基址寄存器什么叫位移量

文章插图
基址寄存器的内容是由操作系统确定的,变址寄存器的内容是由用户确定的 这句话是对的 因为用户没有权限改段寄存器中的内容,不然炒作系统就乱了
【基址寄存器,什么叫基址寄存器什么叫位移量】你所指的汇编是dos下的16位吧,在windows中dos窗口只是一个虚拟的情况,你所控制的寄存器都是虚拟的,除非是dos操作系统,可以控制.但是现在都是32位下保护地址模式吧,1楼不要误人子弟阿
建议搂主看看32位汇编的东东就很清楚了
记住不是win32哦 而是80386汇编哦 而80386和8086有很大区别,主要是工作机制,80386以上的cpu和8086其中加入了对段地址的保护,如果用户能控制的话加段保护有意义吗,其他很多区别这里就不多说了,还是自己看资料比较好
将基址寄存器的内容修改为1234H
基址寄存器,什么叫基址寄存器什么叫位移量

文章插图
那你不得利用OD来实copy现吗
OLLYDBG是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,己代替SoftICE成为当今最为流行的调试解密工具了 。同时还支持插件扩展功能,是目前最强大的调试工具 。
OllyDBG下载:www.ucbug.com/soft/48133.html
什么叫基址寄存器?什么叫位移量?
基址寄存器,什么叫基址寄存器什么叫位移量

文章插图
通用寄存器:8个,包括数据寄存器、地址指针寄存器、变址寄存器 。
数据寄存器4个:AX BX CX DX,它们又可作为8个8位的寄存器使用,即AH BH CH DH AL BL CL DL
AX称为累加器,I/O指令均使用该寄存器,访问外部硬件和接口 。
BX称为基址寄存器,在访问内存时用于存放基地址 。
地址指针寄存器2个:SP BP
SP称为堆栈指针寄存器,BP称为基址指针寄存器,在作数组和字符串运算时,用于存放内存的偏移地址 。
变址寄存器2个:SI DI
SI称为源变址寄存器,DI称为目的变址寄存器,用于数据块操作的内存寻址 。
汇编数上这些都有的
关于位移量:
初学汇编的人,对于数据在内存中的存储十分迷茫.
其实很简单,一个连一个地存储.
除非你特别指定要空出几个字符.否则都是一个空都不落地往下存.
于是,当你连续定义了字符a、字b、双字c,当你知道了a的偏移量,你可以用这个(偏移量+2)配合段地址找到字b的高位字节,亦可同时使用DWORD PTR调用从这个字节开始的四个字节所存储的内容组成的双字的值,十分随意 。
16位汇编,用于16位计算机,它们最多处理16位二进制,至于双字,不能直接处理;地址线有20条,即地址为20位二进制 。
32位汇编,用于32位计算机,它们最多处理32位二进制 。地址线有32条,即地址为32位二进制 。
地址的位数越大,所能表示的地址值就越大,所能容纳的内存容量就越大 。
若将内存作为一个整体,将程序放在它的不同位置,则每个变量都有一个相当长相当复杂的地址,不便于管理 。于是将内存分成若干个段,程序的第一个字节数据就存储于这个段之后第一个字节里,第100个字节数据就存储于这个段之后第100个字节里,这100就是这个字节数据的偏移量 。
如此理解 。
其实分段存储并非起于如上便于管理的原因,相信你所看的书里有详细的解释 。它一开始是为了解决地址位数(20位)和16位计算机处理的数据位数(最大16位)之间的矛盾,16位计算机无法直接生成20位的地址,于是就在内存与数据之间增加了段的概念 。段值为16位,在计算最终地址时,它将被乘以2的4次方,扩展到20位,就像1,2,3,4乘以100,变成100,200,300,400,便生成了段在内存中的起始地址 。段值与偏移量运算便得到各个数据在内在中的地址 。