汇编语言

1.挂载相关的信息

mount c /Users/panyumingzhi/masm

(注意这里可以使用alt+空格+enter全屏)

2.转到c:

c:

3.定义数据:

<1>db 一个字节

<2>dw 一个字表示两个字节

<3>dd 两个字,表示4个字节

<4>dup 表示数据重复的指令
db N dup(xx) ; dup表示定义的数据,N表示重复的个数
dw N dup(xx) ; dup表示定义的数据,N表示重复的个数
dd N dup(xx) ; dup表示定义的数据,N表示重复的个数

4.Debug指令:

a:汇编

u:显示写的程序的内容,反汇编

t:单步执行

g:按地址执行

q:退出

R

显示或改变一个或多个 CPU 寄存器的内容。

r [register-name]

符号 含义
register-name 指定要显示其内容的寄存器名。

说明:

只查看标志的状态,键入命令rf;

要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,键入r;

D

显示一定范围内存地址的内容。
d [range]

符号 含义
range 指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。有关有效的 range 值 的信息,请单击“相关主题”列表中的“Debug 说明”。如果不指定 range,Debug 程序将 从以前 d 命令中所指定的地址范围的末尾开始显示 128 个字节的内容。

说明:

当使用 d 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值都用十六 进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。 每个显示行显示 16 字节的内容第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。

E:

将数据输入到内存中指定的地址。
可以按十六进制或 ASCII 格式键入数据。以前存储在指定位置的任何数据全部丢失。

1
e address [list]
符号 含义
list 指定要输入到内存的连续字节中的数据。
address 指定输入数据的第一个内存位置。

没有指定可选的 list 参数的值情况下指定 address 的值:

Debug 将显示地址和内容,在下一行重复地址,并等待您的输入。此时,可以执行:

(1)替换字节值。为此,请在当前值后键入新值。如果键入的值不是有效的十六进制值,或该 值包含两个以上的数字,则 Debug 不会回显无效或额外的字符。 进入下一个字节。为此,请按 SPACEBAR(空格键)。要更改该字节中的值,请在当前值后键 入新值。如果按 SPACEBAR(空格键)时,移动超过了 8 位界限,Debug 程序将显示新的一 行并在行首显示新地址。
(2)返回到前一个字节。为此,请按 HYPHEN 键 (-)。可以反复按 HYPHEN 键 (-) 向后移动超过多个字节。在按 HYPHEN 时,Debug 开始新行并显示当前地址和字节值。
停止执行 e 命令。为此,请按 ENTER 键。在任何字节位置都可以按 ENTER。

使用 list 参数:

如果指定 list 参数的值,随后的 e 命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。

List 值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包 括在单或双引号中。

F:

使用指定的值填充指定内存区域中的地址。
可以指定十六进制或 ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢失。

1
f range list
符号 含义
range 表示填充内存的的起始位置和终止位置,或起始地址和长度。
list 表示指定的要输入的数据,可由十六进制数引号包围起来的字符串组成。

说明:

(1)如果 range 包含的字节数> list 中的数值,Debug 将在 list 中反复指派值,直到 range 中的所有字节全部填充。

(2)如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停止 f 命令。
(3)如果 list 包含的数值多于 range 中的字节数,Debug 将忽略 list 中额外的值。

5.汇编操作符

INC和DEC

INC:加1指令

inc a相当于 add a,1 ;i++
优点:速度比sub指令快,占用空间小
这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位.

DEC:减1指令

dec a 相当于sub a,1

优点 速度比sub指令快,占用空间小
这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位.

6.标志位

条件码(状态)标志

用来记录程序中运行结果的状态信息。

符号 含义 值为1 值为0
OF(Overflow) 溢出标志(指字节(字)运算结果超过了所能表数的范围) 溢出(ov) 未溢出(nv)
SF(Sign) 符号标志(与运算结果的最高位相同) 结果为负(ng) 结果为正(pl)
ZF(Zero) 零标志 运算结果为零(zr) 运算结果不为零(nz)
CF(Carry) 进位标志 最高有效位产生进位或借位(cy) 最高有效位未产生进位或借位(nc)
AF(Auxiliary Carry) 辅助进位标志(执行十进制运算指令时,记录运算结果中低半字节(最低4位)向高半字节(即D3向D4)的进位情况。 ) D3向D4有进位或借位(ac) D3向D4没有进位或借位(na)
PF(Parity) 奇偶标志(运算结果的低8位中,1的个数) 偶数 奇数

控制标志

控制标志控制处理器的操作,要通过专门的指令才能使控制标志发生变化

符号 含义 值为1 值为0
DF(Direction) 方向标志(用于控制串操作,指示串操作时操作数地址的增减方向) 串操作后使变址寄存器SI、DI自动减量(dn) 串操作后,使SI、DI自动增量(up)
IF(Interrupt) 中断标志(只对外部可屏蔽中断请求(INTR)起作用) 允许CPU响应INTR(ei) 禁止响应INTR(di)
TF(Trap) 陷阱标志(用于程序调试) CPU处于单步运行方式 CPU处于正常工作方式

7.寄存器

AX BX CX DX是CPU内部的通用寄存器中的数据寄存器,数据寄存器一般用于存放参与运算的数据或运算的结果,每一个数据寄存器都是16位的(即16个二进制位),但又可以将高,低8位分别作为两个独立的8位寄存器使用.它们的高8位记作AH,BH,CH,DH,低8位记作AL,BL,CL,DL.这种灵活的使用方法给编程带来极大的方便,既可以处理16位数据,也能处理8位数据.