《汇编语言》笔记
以下是我读王爽老师的《汇编语言》所归纳的重要知识点,如果有纰漏欢迎指正。
一、DEBUG和MASM的使用
DEBUG
DEBUG命令 | 用法 | 作用 | 举例 |
---|---|---|---|
R | -r 寄存器 | 查看、改变CPU寄存器的内容 | -r ax |
-r | 查看所有CPU寄存器的内容 | -r | |
D | -d CS:IP 字节数 | 查看内存中的内容(DEBUG默认列出128位字节) | -d 1000:0 9 |
U | -u CS:IP 字节数 | 查看内存中的内容并翻译成汇编语言(DEBUG默认列出32位字节) | -u 1000:0 5 |
G | -g CS:IP | 执行CS:IP处的一条机器指令并执行-r | -g 0016 |
E | -e CS:IP 改写的内容 | 改写CS:IP后的内容(也可以通过提问来改写)——输入数字或字符 | -e 1000:0 0 1 'a' 2 'b' 3 'c' |
A | -a CS:IP | 以汇编指令的格式在内存中写入一条机器指令(回车以结束) | -a MOV AX,BX |
T | -t | 执行一条机器指令并执行-r(CS:IP自动跳转至下一条指令) | -t |
MASM
(1)编译
①运行MASM.EXE
②输入源码文件(.asm)相对路径或绝对路径
③输入输出文件(.obj)路径和文件名,按Enter为默认路径
④输入生成的列表文件的路径和文件名,按Enter为不生成
⑤输入生成的交叉引用文件的路径和文件名,按Enter为不生成
图示为编译成功
(2)链接
①运行LINK.EXE
②输入连接目标(.obj)相对路径或绝对路径
③输入输出文件(.exe)路径和文件名,按Enter为默认路径
④输入生成的列表文件的路径和文件名,按Enter为不生成
⑤输入生成的交叉引用文件的路径和文件名,按Enter为不生成
(3)其他的一些内容
①生成失败的一些原因
A.代码是否有误
B.指定文件是否存在
②快速编译并连接
A.masm (路径+)文件名;
B.link (路径+)文件名;
二、一些基本知识
(1)字由低位至高位;汇编不区分大小写;可以用单引号加字符表示其ASCII码(例如 'a'为61H)
(2)每一个16位寄存器都可以分为两个八位寄存器
例如:AX可以分为AH和AL
(3)计算机执行的指令由短地址(CS)和 偏移地址(IP)组成
执行的指令位于CS×16+IP
段寄存器还有CS,DS,ES,SS
注意:CS和IP中的值不支持用MOV更改!
(4)计算机读写的数据可以用DS寄存器和[idata]组成
读取的数据位于DS×16+[idata]
注意:A.务必判断DS所指向的段空间是否存放重要代码,建议使用0:200~0:2ff这一段空间
B.在实际写代码时,若idata为数值,则需写为DS:[idata],否则MASM将会解释为数值idata
C.若IDATA为BP寄存器,则DS为SS寄存器
D.可以使用DI和SI两个八位寄存器作为二级偏移地址
(5)计算机为每个程序提供了一个栈,其中,SS:SP始终指向栈顶元素
即栈顶元素为SS×16+SP
注意:当心栈越界!
(6)循环的次数由CX寄存器决定
(7)EXE的加载过程
(8)在屏幕上显示过程
内存中的0b800h对应屏幕上的像素点0,0
图为在屏幕中间显示'!'
也可以用int10中断