用Vcomputer机器指令与汇编指令分别编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Vcomputer机器指令与汇编指令分别编程相关的知识,希望对你有一定的参考价值。
用Vcomputer机器指令与汇编指令分别编程求大神帮忙
参考技术A 汇编语言(Assembly Language)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址妈。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。
汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。
■对于不同型号的计算机,有着不同的结构的汇编语言
汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。
汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。
汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。
■html属于汇编吗?
不属于汇编语言。它是Hypertext Markup Language的缩写,用来编写网页的语言.通常一个网页的网址最后面有.html或者.htm都是用这种语言编写的.
另外,它一般用来编写静态网页,现在最流行的动态语言有ASP,.NET和php等等.
实验一 用机器指令和汇编指令编程
一、实验目的
1、熟悉基本debug命令:a、r、d、e、u、t
2、掌握汇编指令与机器指令的对应关系
3、掌握利用debug命令查看修改内存、寄存器的方法
二、实验要求
(1)仔细阅读实验教程中DEBUG的使用部分;
(2)使用DEBUG中的A命令输入一段程序段;
(3)用DEBUG中的R命令观察寄存器中数据的存放情况,改变寄存器的值;
(4)用DEBUG中的D命令查看数据在内存中的表示方法;
(5)用DEBUG中的E命令修改内存中的数据;
(6)用DEBUG中的T命令执行一条语句;
三、实验步骤和实验内容
(1)使用debug的-a命令,将下面程序段写入内存,再使用-t命令逐条执行,根据指令执行后的实际情况填空。
图 1-1 用-a命令输入全部程序指令
图 1-2 用-t命令执行每段指令
(2)重新执行上面的程序。在执行前4条语句后,使用-e 0FFFF:0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8,再执行后面的语句,每条语句的执行结果会有什么变化?为什么?
在使用-e命令后,使用-d 0ffff:0 f查看从ffff:0开始的16个单元内容,如图1-3。
e命令的功能是用来连续修改内存中的数据的,但是这条语句执行后,并没有变化,这是为什么呢?
这是因为在系统内存中,对不明确的地址单元信息不能随便修改,因为修改的如果是系统程序就会导致系统崩溃,所以系统中会有某些保护机制,保护数据不被修改。所以这里修改0ffff的值并没有成功,想必就是这个原因。那么这里我尝试修改了1000:0到1000:f的内容,就修改成功,如图1-4。
图 1-3 修改并查看ffff:0~ffff:f的内容
图1-4 修改并查看1000:0~1000:f的内容
四、实验结果
(1)使用debug,将下面程序段写入内存,逐条执行,根据指令执行后的实际情况填空。
mov ax,ffffh
mov ds,ax
mov ax,2200h
mov ss,ax
mov sp,0100
mov ax,[0] ;(ax=) C0EAH
add ax,[2] ;(ax=) C0FCH
mov bx,[4] ;(bx=) 30F0H
add bx,[6] ;(bx=) 6021H
push ax ;(sp=) 00FEH ;修改的内存单元的地址是 2200:0100 ;内容是 C0ECH
push bx ;(sp=) 00FCH ;修改的内存单元的地址是 2200:00FEH ;内容是 6021H
pop ax ;(sp=) 00FEH ;(ax)= 6021H
pop bx ;(sp=) 0100H ;(ax)= C0FCH
push [4] ;(sp=) 00FEH ;修改的内存单元的地址是 2200:0100H ;内容是 30F0H(数据段DS:0004=30F0)
pop [6] ;(sp=) 0100H ;修改的内存单元的地址是 2200:00FEH ;内容是 2F31H(数据段DS:0004=2F31)
(2)重新执行上面的程序。在执行前4条语句后,使用-e 0FFFF:0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8,再执行后面的语句,每条语句的执行结果会有什么变化?为什么?
在使用-e命令后,使用-d 0ffff:0 f查看从ffff:0开始的16个单元内容。
这是因为在系统内存中,对不明确的地址单元信息不能随便修改,因为修改的如果是系统程序就会导致系统崩溃,所以系统中会有某些保护机制,保护数据不被修改。所以这里修改0ffff的值并没有成功,想必就是这个原因。那么这里我尝试修改了1000:0到1000:f的内容,就修改成功。(在【《汇编语言》(第3版)清华大学出版社 王爽 著 】的P123提示了0:200~0:2ff是相对安全的)
五、实验心得
①给数据段ds、堆栈段ss添加地址时,需要先把数据mov到ax中,在用mov移动到数据段和堆栈段中。
②-a与-t命令并用,-a输入一段程序,-t执行下一条指令
③-r命令查看或修改单个寄存器的值
格式:r / r ax
④-d与-e命令并用,-d查看一段地址的内容,-e修改一段地址的内容
格式:d 1000:0 f 查看10000到1000f的地址内容
e 1000:0 0 1 2 3 4 5 6 7 8 9依次修改1000:0开始的10个内容单元
这次实验比较简单,帮助我理解和熟悉了debug的命令下,每条指令执行了什么,改变了什么。
最后附上实验报告供大家参考,顺便鄙视一下CSDN的下载内容需要积分这类方式,开源就开源嘛,搞什么稀奇?
https://files.cnblogs.com/files/jdemarryme/%E6%B1%87%E7%BC%96%E5%AE%9E%E9%AA%8C%E4%B8%80.pdf
以上是关于用Vcomputer机器指令与汇编指令分别编程的主要内容,如果未能解决你的问题,请参考以下文章