欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

汇编语言学习

程序员文章站 2022-03-14 18:34:44
零散记录: 8086CPU寄存器都为16位的,可存放两个字节;AX、BX、CX、DX这4个寄存器是通常用来存放一般性的数据,被称为通用寄存器。 AX: 以8086CPU而言,这四个寄存器都可分为两个可独立使用的8位寄存器使用,以-H和-L表示左右八位; 指令mov,add: 左操作数 = 左操作数与 ......

零散记录:

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

がんばって