汇编语言-环境搭建

虚拟机安装MS-DOS环境

安装Vmware,并下载MS-DOS镜像。(AMD要启用SVM)

安装MS-DOS镜像

一路Next,重装完毕后会报错

这是BIOS启动设置的问题,按CTRL+ALT+INSERT重启虚拟机,在vm出现logo时按F2(把握好时间,多试几次),进入BIOS设置,向右键(→)切换到Boot栏,向下键(↓)选择到CD-ROM Drive(变白即为选中),然后按SHIFT和加号(+),将其移动到最顶端。向右键(→)切换到Exit栏,选中“Exit Saving Changes”,按两次回车,保存设置并重启。

继续一路Next,然后这一步不选择“Install Add-Ons”(在选项上按空格即可取消选择),“Next”

这一步选择“Enable both UMB and EMS”

选择“Load both”

选择“Use default”

选择“Continue”

然后会提示你是否重启,在重启之前,将连接改为使用物理驱动器,然后重启,不然会一直重装。

重启成功

masm和link编译文件

DOS本身并没有自带这两个软件,需要我们将masm这个文件夹放到DOS里面。先关闭DOS,然后右键进入设置,选择“硬盘”,在右面的“硬盘实用工具中”,点击“映射”。去掉“以只读模式打开文件”的选择,点击确定。

这时会自动打开该磁盘(如果没打开在我的电脑中可以找到该磁盘),把masm文件夹复制进去。

返回虚拟机,点击“断开连接”,确定。

使用dir命令可以看到

环境搭建完成。

WIN10下DOSBox安装

环境

下载DOSBOX和debug.exe

微软的masm5.0汇编编译器,文件名为masm.exe

微软的Overlay Linker3.60 连接器,文件名为link.exe

安装DOSBOX,并在F盘下新建目录TASM,把debug.exe、masm.exe、link.exe放入其中。

配置DOSBox

把DOSBOX安装之后打开安装文件夹,找到DOSBox 0.74 Options.bat,然后双击运行,找到conf文件最后最后一行,改成如下形式:

[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.
MOUNT C F:TASM
C:
debug

运行

运行DOSBox,输入-r查看。

Debug使用

Debug功能

Debug是DOS、Windows 都提供的实模式(8086 方式)程序的调试工具。使用它,可以查看CPU 各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。

  • 用Debug 的R 命令查看、改变CPU 寄存器的内容;
  • 用Debug 的D 命令查看内存中的内容;
  • 用Debug 的E 命令改写内存中的内容;
  • 用Debug 的U 命令将内存中的机器指令翻译成汇编指令;
  • 用Debug 的T 命令执行一条机器指令;
  • 用Debug 的A 命令以汇编指令的格式在内存中写入一条机器指令。

Debug 的命令比较多,共有20 多个,但这6 个命令是和汇编学习密切相关的。

进入Debug

进入dos,运行debug程序,输入r查看所有寄存器的内容

R命令修改寄存器中的值

输入“r ax" 后按Enter 键,将出现“:”作为输入提示,在后面输入要写入的数据后按Enter 键,即完成了对AX中内容的修改。

修改cs/ip中的值

D命令查看内存中的内容

方式一:d 段地址:偏移地址。Debug将列出从指定内存单元开始的128 个内存单元的内容。例如:d 1000:0

方式二:d 段地址:起始偏移地址  结尾偏移地址。DEBUG从起始位置开始一直显示到结束位置。例如:d 1000:0 9。

方式三:d 段地址:起始偏移地址 L长度,长度以L参数为标识。DEBUG从起始位置开始显示指定长度的内容。例如:d 1000:0 L9。

E命令改写内存

e 段地址:偏移地址 数据 数据 数据……

 输入e 1000:10, 按Enter 键。

e 段地址:偏移地址,逐个修改

Debug 显示起始地址1000:0010, 和第一单元(即1000:0010 单元)的原始内容,然后光标停在“.”的后面提示输入想要写入的数据,此时可以有两个选择: 其一为输入数据, 然后按空格键,即用输入的数据改写当前的内存单元; 其二为不输入数据,直接按空格键,则不对当前内存单元进行改写。
当前单元处理完成后(不论是改写或没有改写,只要按了空格键,就表示处理完成), Debug 将接着显示下一个内存单元的原始内容,并提示进行修改,读者可以用同样的方法处理。所有希望改写的内存单元改写完毕后,按Enter 键, E 命令操作结束。

用E命令写入字符

用E命令从内存1000:0 开始写入数值1、字符“a"、数值2、字符"b"、数值3、字符“C"'。字符“a"、“b"、"C"的ASCII码十六进制值:61H、62H、63H。

用E命令将机器码写入内存

机器码也是数据,可以用E命令将机器码写入内存。

U命令将内存单元中的内容翻译为汇编指令

T命令执行CS:IP指向的指令

首先6个存储单元的机器码写入内存1000:0000,并查看机器码对应的汇编指令。

修改cs和ip中存储的段地址和偏移量,并查看CS、IP寄存器中的地址。以及AX、CX寄存器中的值。

T指令运行CS:IP指向的指令数据,执行完后IP偏移量会自动移动到下一个。

A命令以汇编指令的形式在内存中写入机器指令

debug指令总结

    • 查看、修改CPU 中寄存器的内容: R 命令
    • 查看内存中的内容: D 命令
    • 修改内存中的内容: E 命令(可以写入数据、指令,在内存中,它们实际上没有区别)
    • 将内存中的内容解释为机器指令和对应的汇编指令: U 命令
    • 执行CS:IP 指向的内存单元处的指令: T 命令
    • 以汇编指令的形式向内存中写入指令: A 命令

参考链接:

https://www.cnblogs.com/bestsheng/p/5659932.html

原文地址:https://www.cnblogs.com/aeolian/p/12805531.html