使用dosbox进行汇编

1.下载安装dosbox和debug.exe

路径C:\Users\Admin\AppData\Local\DOSBox下,修改 dosbox.conf配安装完dosbox,在路径C:\Users\Admin\AppData\Local\DOSBox下,修改 dosbox.conf配置:
mount c: d:\asm
c:
debug.exe:是DOS、Windows下提供的模拟8086cpu的程序调试工具。

2.debug命令:
R:查看/修改寄存器
D:查看内存单元
E:修改内存单元
A:输入汇编指令(a回车:输入指令。不输入指令再次回车:退出)
T/P:单步执行汇编指令
G:连续执行汇编指令(否则容易卡死,返回系统指令:int 21H,依然卡死..)
U:反汇编(机器指令->汇编指令)
Q:退出debug

3.几个关键寄存器
针对8060CUP ,
CS:IP :寄存器CS:IP指向的内存单元中的内容看做指令,CS为段地址,IP为偏移地址
修改CS:IP
jmp 1000:0 :把CS:IP修改为1000:0,即cpu从1000:0开始执行
SS:SP:任意时刻,SS:SP指向栈顶元素,汇编指令push和pop时,cup将从SS和SP寄存器中获取栈顶地址。每次T命令执行完修改栈寄存器后,下一条指令也会直接自动执行。
DS:用来存放要访问的数据的段地址

4.一些指令

R ax -> 100        :修改ax寄存器为100H
D 1000:0           :查看10000H内存处的内容,1000(段地址)+0(偏移地址),都为16进制,段地址左移1位(这里说的是16进制左移)再加上偏移地址。
E 1000:0 1 'a'     :依次在10000H 10001H中存入数字1和字符'a'
1000:0000          :该行显示10000H~1000FH共16个内存地址
1000:0010          :该行显示10010H~1001FH共16个内存地址

5.一个例子:
机器码中b8 01 00 –> mov ax,1

E 1000:0 b8 01 00    :从10000H开始写入数据 b8 01 00
U 1000:0             :反汇编查看内存10000H里面对应的汇编指令
a                    :输入汇编指令
再输入jmp 1000:0     :修改CS:IP指令
T                    :执行10000H内存指令

–> 结果ax=1