汇编语言debug的使用
汇编语言debug的使用
介绍
Debug是DOS系统中的著名的调试程序,使用Debug程序,可以查看CPU各种寄存器中的内容、内存的情况,并且在机器指令级跟踪程序的运行。
启动debug
直接在命令行中运行debug.exe程序即可
# debug
Debug的常用命令
r命令
查看CPU寄存器的内容
改变CPU寄存器的内容
# r 寄存器名
d命令
查看内存中的内容
命令1:d
查看预设代码段和ip偏移地址的数据
命令2:d 段地址:偏移地址
查看指定内存地址的数据
命令3:d 段地址:偏移地址 数据长度
查看指定位置,指定长度的内存数据
e命令
改变内存中的内容用
命令:e 段地址:偏移地址 数据1 数据2
u命令
将内存中的机器指令翻译成汇编指令
a命令
以汇编指令的格式写入数据
t命令
执行cs:ip处的指令,t命名是一条一条的执行。
q命名
退出debug模式
编译和解释的区别是什么
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条地解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行得快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
一、低级语言与高级语言
最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果。后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。
无论是机器指令还是汇编指令都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。
但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。
高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。
高级语言独立于机器的特性是靠编译器为不同机器生成不同的目标代码(或机器指令)来实现的。那具体地说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既可以编译成直接可执行的目标代码,也可以编译成一种中间表示,然后拿到不同的机器和系统上去执行,这种情况通常又需要支撑环境,比如解释器或虚拟机的支持,Java程序编译成bytecode,再由不同平台上的虚拟机执行就是很好的例子。
所以,说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。
二、编译与解释
编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。
解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条地解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行得快的.
编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如:LX.ASM;汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下:MASM LX.ASM;连接:用连接程序(LINK.EXE)对目标程序进行连接,形成可执行文件(.EXE),格式如下:LINK LX.OBJ;执行:如果结果在屏幕在显示,则直接执行可执行文件。调试:用调试程序(DEBUG.EXE)对可执行文件进行调试,格式如下:DEBUG LX.EXE1.在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型语言和解释型语言。
2. 由编译型语言编写的源程序需要经过编译、汇编和链接才能输出目标代码,然后机器执行目标代码,得出运行结果,目标代码由机器指令组成,一般不能独立运行,因为源程序中可能使用了某些汇编程序不能解释引用的库函数,而库函数代码又不在源程序中,此时还需要链接程序完成外部引用和目标模块调用的链接任务,最后输出可执行代码。C、C++、Fortran、Pascal、Ada都是编译实现的。
3. 解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于执行的中间代码,这种中间代码与目标机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,软件解释器通常会导致执行效率较低。用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。对于解释型Basic语言,需要一个专门的解释器解释执行 Basic程序,每条语言只有在执行才被翻译。这种解释型语言每执行一次就翻译一次,因而效率低下。
4. Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。
(Java虚拟机对字节码的执行相当于模拟一个cpu,而ruby1.8–在虚拟机还未出现前–是通过解释成语法树执行。)
以上就是编译和解释的区别是什么的详细内容,更多请关注其它相关文章!
相关问答
debugexe 是什么程序?DEBUG.EXE是DOS提供的可用于调试可执行程序的一个工具软件,也是可用于汇编语言程序设计的一种调试工具。调试程序DEBUG.EXE是版本有关的,不同版本的操作系统...
电脑怎么打开 exe 文件-ZOL问答2、复制文件“debug.exe”到系统目录下。3、系统目录一般为:C:\WINNT\System3264位系统为C:\Windows\SysWOW644、最后点击开始菜单-->运行--&...
要调试foo . exe 用什么命令进入 Debug 状态?D:\debug\是我debug.exe所在的文件夹路径C:不唯一,你想把D:\debug\映射到哪个盘都可以,只要后续转换该盘为当前盘就可以D:\debug\是我debug.exe所在的文件....
怎么在Win10环境下使用 Debug 进行汇编调试-ZOL问答目前在win10系统中是没有debug.exe的,所以我们需要下载一个debug.exe用来使用,32位的也可以。1.首先将下载好的debug.exe放在一个文件夹下,我是放在了D:\debug.....
如何在win10环境下运行 debug ?1、下载并安装“DosBox”;2、双击打开“DOSbox.exe”;3、打开后输入:mountcc:\4、输入:c:\进入C盘;5、接着输入:debug,然后我们可以使用“R”命令....
bios密码清除步骤?清除步骤如下:1、清理BIOS密码还分很多种情况,如果可以进操作系统,可以尝试使用命令清除。开始→运行→输入:CMD点击确定(或按回车键),打开命令提示符窗...
笔记本清除bios方法?1.清理BIOS密码还分很多种情况,如果可以进操作系统,可以尝试使用命令清除。开始→运行→输入:CMD点击确定(或按回车键),打开命令提示符窗口。2.如果是64位...
vs如何把窗体保存为 exe 文件?窗体exe格式,是在该解决方案的文件夹中,里面有个bin文件夹--debug(测试用的)、release(发布用的),里面都有一个exe程序,拷出来就行---你做的窗体程序图标是...
run和 debug 有什么区别?run和debug的区别在于:Run是一个编译的。EXE文件,调试是运行GDB进行调试(通常先设置断点,调试启动,然后逐行传递代码)。CB和vs也构建项目,唯一的区别是vs...
如何修改fortran编译生成的 debug 文件夹的位置[回答]选择菜单栏中Build-Settings选项,选择左边树形结构中Debug格式或Release格式,单击右边General选项卡,删掉intermediatefiles和Outputfiles中的...