汇编语言学习

时间:2023-01-12 03:30:19

零散记录:

  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的输出长度控制,因为为只读内存区域。

がんばって