汇编实验1

汇编实验1 用机器指令和汇编指令编程(1)

我再也不嫌弃c语言麻烦了噫呜呜噫orz

实验目的

  • 掌握使用debug工具编写和调试汇编命令的方法
  • 掌握第1-2章所学的关于CPU、寄存器、内存的基础知识
  • 掌握第1-2章涉及的几条指令mov, add, sub, jmp的用法

实验准备

  • 复习教材第1~2章内容,完成教材内相关检测点
  • 结合教材实验1 (P35)及公邮文件中心→实验下的 “实验1辅助文档.pdf”学习debug 工具用法。

实验内容

  • 练习教材 P35-45「预备知识:Debug 的使用」,学习 debug 启动、退出及常用指令用法
  • 在练习基础上,完成「2. 实验任务」

实验结论

使用debug调试工具

  • 32位win7及以下系统

win+R快捷键,输入cmd并回车,进入dos界面,输入debug并回车,进入debug调试环境,以短线为提示符

  • 64位win7及以上系统/Mac OS/Linux

使用虚拟dos工具

汇编命令

  • r命令:查看、改变CPU寄存器的内容

    -r	;输入后回车,查看所有寄存器的值
    
    -r ax	;以ax寄存器为例,输入后回车,查看/修改ax寄存器的值
    AX 0000	
    :	;显示ax的值,若想要修改,在冒号后输入修改后的值并回车;若不想修改,输入回车跳过
    
  • d命令:查看内存中的内容

    -d	;从系统当前的偏移地址开始,显示128个字节内容(显示8行,每行16个字节)
    
    -d 0100	;以偏移地址为0100H为例,从偏移地址开始,显示128个字节内容(显示8行,每行16个字节)
    
    -d 0100 0105	;以0100~0105为例,显示偏移地址从0100H到0105H的内存单元的内容(默认情况下指的是数据段) 
    
  • e命令:修改存储单元内容

    -e 0100	;以偏移地址为0100H为例,输入后回车,显示偏移地址0100H处的内容
    0B9E:0100  04.90	;04为该地址处原始值,在.后输入修改后的值90
    
    -e 0100 1 2 3 4 5	;将偏移地址为0100H单元开始的连续五个单元内容改为1 2 3 4 5 
    
  • a命令:输入符号指令

    -a	;从当前CS:IP开始,输入符号指令
    1000:0000 mov ax,1	;以CS:IP=1000:0000为例,写入指令
    
    -a 1000:0	;从1000:0开始的内存单元开始写入指令
    1000:0000 mov ax,1	
    
  • t命令:单步执行

    -t	;从CS:IP指向的指令开始单步执行程序
    
    -t=0100	;以偏移地址为0100为例,从指定的偏移地址处单步执行程序
    
  • u命令:将指定内存单元内容反汇编成汇编指令

    -u 1000:0	;从指定地址开始反汇编,默认连续反汇编32字节 
    
    -u 1000:0 8	;将指定内存地址单元的内容反汇编成机器指令(包括结尾地址)
    

任务1

  • 第一种方式:

    进入debug环境,使用a命令写入机器指令

​ 使用t命令单步执行(在此不全部列出,仅示范说明)

​ 使用d命令查看内存中的命令

  • 第二种方式:

    使用e命令改写内存中的内容

    使用t命令单步执行(在此不全部列出,仅示范说明)

    再使用u命令反汇编

可以看出两种方式效果相同

任务2

写入三条指令

单步执行,将关键指令add ax,ax执行8次,也就是跳转7次(略去一些单步执行)

ax内存入的100H即为2^8的十六进制形式

任务3

使用d命令查看内存FFF00H~FFFFFH中的内容

可以看到最后一行有日期内容

任务4

从内存地址B810:0000填入指定数据,回车

出现了!小可爱!!!!!

改变地址

发现在不同位置出现了相同的图案

改变内容

发现最后一个图案改变

总结

初步掌握了debug环境的配置以及命令的使用,发现汇编真是太可爱了233333

debug环境不区分大小写

debug环境默认16进制,不需要添加后缀H

posted @ 2018-10-28 23:01  Shaoeeee  阅读(216)  评论(4编辑  收藏  举报