本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
学习教材:《汇编语言(第4版)》王爽著 此笔记是书中内容+自我总结,方便查阅和复习 请支持原著
一、环境搭建
系统
VMware虚拟机安装Windows XP professional with SP2
MSDN镜像网 使用xunlei等下载ED2K链接
软件
Masm for Windows 集成实验环境 V5.0
二、编写汇编程序
写汇编程序时,第一步写的文件是源程序文件,后缀为.asm;第二步对源程序编译,得到目标文件.obj;第三步将目标文件与源程序链接,生成.exe可执行文件
源程序它包括汇编指令和伪指令:
;这是注释,分号开头
assume cs:codesg ;初始化,CS指向codesg代码段
codesg segment ;定义名叫codesg的代码段
;以下是汇编指令
mov ax,0123h
mov bx,0456h
add ax,bx
add ax,ax
mov ax,4c00h ;这两条指令实现程序的返回
int 21h
codesg ends ;段结束
end ;程序结束
编写结束点击上方的运行,一键自动生成目标文件并完成连接,最后得到可执行文件
建议不要将源程序保存在桌面或是名称过长的英文路径下,可能导致某些错误
这里得到的可执行文件要用CMD运行,拖入即可
三、使用debug跟踪程序的运行
使用CMD的debug xxx.exe将程序加载到debug中进行分析
-r指令:查看初始化寄存器情况
r指令用于查看加载到内存后各个寄存器的情况
- CX显示程序机器码长度为15字节
- DS显示exe文件被加载到的地址为0B2F:0000,系统会寻找一段起始为DS:0000的空内存加载exe文件
- CS:IP指向第一条汇编代码的地址0B3F:0000,DS和CS:IP之间为exe文件的程序段前缀(PSP),固定长度256字节(100H)
-u指令:查看机器码
u指令查看程序的机器码
机器码的地址从0B3F:0000~0B3F:000E,印证了CS:IP确实指向了第一条指令
-t指令:单步执行
t指令用于单步执行指令
当运行到最后一条指令
int 21时,使用p指令结束
-q指令:退出debug
使用q指令退出debug返回cmd