汇编笔记1

学习笔记-汇编语言(王爽)
Article Directory
  1. 1. 第二章 寄存器

大概一年前学了一点,后来就搁置了,这个寒假捡回来给他冲完

第二章 寄存器

一个寄存器分为高位和低位,如AX寄存器分为AH和AL

当寄存器中存放的数据超出位数限制大小时,寄存器只会保留没有超出的那部分,如

mov ax 8226H

add ax 8226H

这其中ax计算的值理应为1044CH,但是限于AX寄存器是16位大小,寄存器中最终的值为044CH,进位1并不是真的丢弃(书中暂未提,后续再记)

在进行数据传送和运算时,要注意指令的两个操作对象位数应当是一致的

如 mov ax bh 就是错误的指令

物理地址(对于8086CPU)
*物理地址=段地址16+偏移地址**

  1. 起始地址=段地址*16(必然是16的倍数)
  2. 16位地址的寻址能力为64KB,因此一个段的长度最大为64KB
  3. 可以用不同的段地址和偏移地址形成同一个物理地址

例子:
1

相当于通过地址加法器将两个16位地址合成为一个20位的物理地址

段寄存器:CS,DS,SS,ES

CS和IP
CS为代码段寄存器,IP为指令指针寄存器
8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行
一个最简单的修改CS:IP的指令jmp

  1. jmp 段地址:偏移地址

  2. jmp 某一合法寄存器

jmp ax
指令执行前: ax=1000H,CS=2000H,IP=0003H
指令执行后: ax=1000H,CS=2000H,IP=1000H

记一些debug实验的内容吧。

R命令:查看、修改CPU寄存器的内容
例: 分别执行了查看各寄存器、修改CS寄存器、修改IP寄存器
2

D :查看内存中的内容

E :修改内存中的内容(前提是该内存可修改)
关于此有一个实验题是要求在fff00~fffff中找到pc主板机上ROM中写有的一个生产日期并试图修改它。 以下是我的实验过程👇
3

我成功找到并试图修改其内容,但修改后再查看发现其并没有改变,再回头看提示,才想明白该内存段是属于rom的地址空间,而rom为只读内存,无法修改。

U :将内存中的内容解释为机器指令和对应的汇编指令

4

T :执行CS:IP指向的内存单元处的指令(t一次执行一次,ip自动跳转下一个指令)

5

A :以汇编指令的形式向内存中写入指令

6

Comments