zoukankan      html  css  js  c++  java
  • 汇编语言-环境搭建

    虚拟机安装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

  • 相关阅读:
    大数据、数据挖掘在交通领域的应用
    浅谈 kubernetes service 那些事(上篇)
    Docker中搭建zookeeper集群
    【kudu pk parquet】runtime filter实践
    【大数据之数据仓库】选型流水记
    【大数据之数据仓库】安装部署GreenPlum集群
    【大数据之数据仓库】GreenPlum优化器对比测试
    【大数据之数据仓库】GreenPlum PK DeepGreen(TPCH)
    【大数据之数据仓库】HAWQ versus GreenPlum
    用 PS 调整服务器时间
  • 原文地址:https://www.cnblogs.com/aeolian/p/12805531.html
Copyright © 2011-2022 走看看