qs微机原理第04章.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:91 大小:391KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

qs微机原理第04章.pdf

qs微机原理第04章.pdf

预览

免费试读已结束,剩余 81 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第四章汇编语言程序设计BUPT主要内容„汇编语言程序的结构„汇编语言语句类型和组成„汇编语言程序设计8学时4.1机器指令/汇编语言/高级语言BUPT1、机器指令:计算机能识别的代码,机器指令是由二进制数组成的。例如:PUSHAX机器指令为:010100002、汇编语言:汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的。3、高级语言:面向过程(如C,FORTRAN)或对象(如C++,Java)的语言,不依赖于机器,因而有很好的通用性和可移植性.4.1机器指令/汇编语言/高级语言BUPT汇编语言与高级语言的比较特征汇编语言高级语言目标程序运行时间短长程序运行时占用的存储空间小大直接访问硬件的能力强弱程序可读性和可维护性差强程序开发的复杂程序高低程序的可移植性差强对硬件环境和软件的兼容性差强4.1机器指令/汇编语言/高级语言BUPT汇编语言程序的开发过程文件名.ASM文件名.OBJ文件名.EXE汇编语言汇编目标连接执行/调试源程序程序程序编辑程序汇编程序连接程序EDIT.EXEMASM.EXELINK.EXEML文件名.ASM汇编语言程序的开发过程BUPT1.源程序的编辑:源程序文件要以ASM为扩展名.源程序文件的形成(编辑)可以通过任何一个文本编辑器实现:如DOS中的全屏幕文本编辑器EDIT.2.源程序的汇编汇编是将源程序翻译成由机器代码组成的目标模块文件的过程.MASM6.x提供的汇编程序是ML.EXE:ML/chello.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(hello.obj);否则MASM将给出相应的错误信息,这时应根据错误信息,重新编辑修改源程序后,再进行汇编.汇编语言程序的开发过程BUPT3.目标模块的连接连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINKhello.obj如果没有严重错误,LINK将生成一个可执行文件(hello.exe).ML汇编程序可自动调用LINK连接程序,实现汇编和连接的依次进行MLhello.asm汇编程序ML.EXE可带其他参数,常用ML/Fl/Sahello.asm该命令除产生模块文件hello.obj和可执行文件hello.exe外,还将生成列表文件hello.lst.列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和发现错误很有用。汇编语言程序的开发过程BUPT4.可执行程序的运行与调试经汇编、连接生成的可执行程序在操作系统(DOS)下只要输入文件名就可以运行:hello.exe操作系统装载该文件进入主存,并开始运行。在DOS下运行程序时,COMMAND.COMDS,ES把.EXE文件装入内存。装入时在数据段内PSP用户程序区偏移地址0处构造一个100H字节的程序段前缀PSP,然后是代码段/数据段/堆栈段内容。装入后,自动设置DS和ES寄存器指向程序段前缀,CS、IP、SS、SP寄存器设置为由连接程序传过来的值(所以必须在程序中给DS、ES赋值)。汇编语言程序的开发过程BUPT„程序结束返回DOS的方法:程序一开始先把PSP的段地址(由DS指向)压栈,把偏移地址0压栈。程序结束时RET指令使得:栈顶0000H->IP,PSP的段地址->CS,将要执行的指令是PSP里的内容,PSP里的前两个字节是指令INT20H,是DOS中断调用,实现的功能就是“返回DOS”。如果出现运行错误,STARTPROCFAR可以从源程序开始排错,PUSHDSMOVAX,0也可以利用调试程序PUSHAX帮助发现错误.:采用DEBUG.EXE调试程序:RETDEBUGhello.exeSTARTENDP4.2汇编语言源程序的结构BUPTMY_DATASEGMENT;定义数据段„汇编语言的源程序SUMDB?;为符号SUM保留一个字节是分段的,由几个MY_DATAENDS;数据段结束段形成一个源程序,每一段有一个段名,MY_CODESEGMENT;定义代码段以SEGMENT为段ASSUMECS:MY_CODE,DS:MY_DATA;规定CS,DS的内容开始,以ENDS结PORT_VALEQU3;端口的符号名束;GO:MOVAX,MY_DATA;DS初始化为MY_DATAMOVDS,AX„源程序最后以END作结束;MOVSUM,0;SUM单元为0CYCLE:CMPSUM,100;SUM与10