汇编语言学习
零散记录:
8086CPU寄存器都为16位的,可存放两个字节;AX、BX、CX、DX这4个寄存器是通常用来存放一般性的数据,被称为通用寄存器。
AX:
以8086CPU而言,这四个寄存器都可分为两个可独立使用的8位寄存器使用,以-H和-L表示左右八位;
指令mov,add: 左操作数 = 左操作数与右操作数运算结果。
8086CPU中给出物理地址方法: 两个16位地址合成一个20位物理地址:
段地址×16+偏移地址 = 物理地址;
'段地址×16' 可视为基础地址;内存也以此分段的方式管理内存;段寄存器:CS 和 IP,二者指示了CPU当前要读取的指令的地址,CS为代码段寄存器,IP为指令指针寄存器;若CS中为M,IP中为N, 8086CPU将从内存M×16+N单元开始读取一条指令并执行。
CS和IP不能通过mov改变,可用 'jmp'命令,形如“jmp 段地址:偏移地址”,这是修改了两者的内容,若仅想修改IP的内容,可用“jmp 某一合法寄存器”,如 jmp ax 或 jmp bx。
最后要注意CPU的工作过程:
①从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲区;
②IP指向下一条指令;
③执行命令。(转到①重复步骤)。
DOS中Debug的使用:
/*关于win10中debug用不了
1.一个方法是可以通过开机时为出现开机界面时按 f8 进入模式选择命令行模式...
2.图形界面中:
假如有debug最好,没有的话win+R输入command;再不行的话看下去;
我的windows10家庭版没有了debug程序也无法运行command,只能自己想办法了,比如说度娘;emmm,分享一下。
下载一个DOSBox,再直接打开搜狗搜索下载一个debug.exe;
安装DOSBox,最好选择安装C盘(系统盘)外的盘,避免出问题,之后打开安装的文件夹的DOSBox 0.74 Options.bat文件,拉到最底部,添加如下代码:
也可以将代码在DOSBox中输入,但这样做避免每次打开都要输一次。
命令中D为作为虚拟盘的真实磁盘,:\DOSBOX_SELF为自定义的文件夹,之后加入没有自带的debug.exe,将下载的debug.exe放入该文件夹,打开DOSBox输入debug即可使用。
正常使用:
*/
-R:查看、改变CPU寄存器内容;
查看CS和IP值,比如:
其中CS为073F,IP为0102;就是说CPU当前要读取CS:IP即0x74F2处的指令,而且在debug中还显示出了该内存单元中存放的机器码,为呃。。0000,后面则为翻译的汇编指令。
用r指令改变寄存器中的值,如:
-D:命令查看内容,形如 d 1000:0,为"-d 段地址 : 偏移地址"形式,会显示接下来的128个单元的内容, 右边为ascii码值;
可以试试 d 1000:9,同样输出128单元内容;再比如 d 1000:9 9可控制输出;
-E:改写内存中的内容,一种是形如 e 1000:0 回车,会有下一行每个字节值,'.'后面直接输入修改值,空格不修改或继续下一个,回车结束;第二种形如 e 1000:0 "fdfd" "dfds" 12 121;用-R可查看;但写入的是机器码如:b8 01 00 (mov ax,0001)、b90200(mov cx,0002)、01c8(add ax,cx),-d命令无法显示代码,可以用-u命令查看(形如u 1000:0)
-T命令可用来执行我们写入的指令,但必须先让CS:IP指向欲执行的指令单元,每次一条指令:
各寄存器数值随指令发生变化;
-A命令以汇编指令形式在内存中写入机器指令:形式:-a 1000:0(1000:0为输入指令的预设地址)
输入完毕回车结束,-d命令查看机器码。
各指令可以说明指令和数据在机器中本质上是一样的。
查看寄存器信息、修改修改寄存器:-R;
查看内存单元内容:-D;
修改内存单元内容:-E;
解释内存内容为机器码及对应汇编指令:-U;
执行CS:IP指向的内存单元处:-T;
写入汇编指令至内存中:-A。
在PC及主板的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元,其中内容无法修改,也不能用d的输出长度控制,因为为只读内存区域。
がんばって
上一篇: c#中的泛型委托详解
下一篇: mysql之代码执行结构