80x86汇编语言程序设计实验指导书
- 格式:doc
- 大小:1.34 MB
- 文档页数:92
第1 汇编语言程序的运行方式汇编编语言是面向机器的低级语言,它的每条指令都是机器指令的助记符,其上机运行的方式常有两种:一是在借助程序调试工具DEBUG,编写小的汇编语言程序,直接在DEBUG环境下运行之。
二是借助文本编辑器编写汇编语言源程序,然后借助汇编器汇编生成目标代码,再连接生成可执行文件,在命令行(或命令提示符)下运行之。
1.1在DEBUG下运行汇编程序在MS-DOS、WINDOWS 98、WINDOWS 2000和WINDOWS XP中都提供有程序调试工具DEBUG,其文件名是DEBUG.EXE,可以在命令提示符“>”下运行之。
在进入DEBUG的提示符“-”之后,用户可以通过DEBUG的汇编命令输入汇编语言源程序,并将其汇编成机器语言程序加载存储到指定的地址空间,然后便可运行、调试输入的程序。
使用DEBUG运行汇编语言程序简单方便,但只能编写仅含一个代码段的小型程序,这对学习汇编语言的指令,了解、熟悉指令的功能带来极大的方便。
例1.1在DEBUG下运行如下程序:mov dl,33h ;字符“3”的ASCII码送dlmov ah,2 ;使用INT 21H的2号功能int 21h ;进入功能调用,输出“3”int 20h ;BIOS中断,结束当前程序,返回程序系统该程序运行结果是在显示器上输出一个字符“3”。
如果要输出其它字符,可以改变程序中送输入dl中的ASCII码。
下面我们给出在WINDOWS XP下运行该程序的步骤:图1 命令指符窗口⑴进入DEBUG运行附件下的命令提示符,如图1所示。
在提示符下输入DEBUG,即:C:\>debug<Enter>屏幕显示符“-”。
注:“<Enter>”表示按回车键。
⑵输入程序并汇编在DEBUG的指示符下用汇编命令a输入并汇编程序:-a 1000B25:0100 mov dl,33<Enter>0B25:0102 mov ah,2<Enter>0B25:0104 int 21<Enter>0B25:0106 int 20<Enter>0B25:0108<Enter>⑶运行程序用命令g运行输入的程序:-g=1003Program terminated normally说明:程序输入汇编完成后,可以生成一个在命令指示下直接运行的文件,然后在命令提示符下运行。
前言《汇编语言程序设》在计算机科学中是一门综合性的专业基础课,是计算机专业的核心课程。
它不仅是一般程序设计的基础,而且也是设计和实现编译程序、操作系统及其它系统程序和大型应用程序的重要基础。
它为后续专业课程的学习打下了理论基础和实践基础。
由于汇编语言程序设中有大量的指令,因此汇编语言程序设实验课在教学中占有重要的地位。
通过实验可以使学生更好的巩固和掌握所学的内容,进一步增强动手能力和解决实际问题的能力。
为了提高实验的效率,任课教师提前一周布置实验任务,并且进行一定的分析和讲解,要求学生进行准备工作。
准备工作包括查找资料,设计算法,写出预习报告,其中预习报告包括题目的解题思想,概要设计,实现算法的源代码清单等。
每次实验前,学生应向实验指导教师上交实验预习报告,预习报告经指导教师认可后方能进行实验。
实验完毕写出实验报告,用A4纸打印成册(源程序存盘),由学习委员统一收齐交指导教师审阅评定。
实验成绩考核:实验成绩占《数据结构》总评成绩的20%,其中实验效果占10分,出勤率和实验报告各占5分。
有以下情形之一者,实验成绩为不及格:1.迟到,早退,无故缺勤总共3次及以上者;2.未按时完成实验达4次及以上者;3.缺交实验报告3次及以上者。
实验一简单程序编制和上机过程一.实验目的1.掌握计算机常用代码的软件转换技术。
2.熟悉DEBUG软件的使用。
3.掌握简单程序的编程方法。
二.实验内容代码转换是计算机和I/O设备进行信息交换的重要技术之一。
各种I/O设备所提供和接收的数据编码不尽相同。
为了处理这些信息,计算机必须将各种不同编码形式的信息转换成别种适当的数据形式。
例如,键盘输入的数据均为ASC Ⅱ码形式存储在内存中,通常要求将其转换成相应的数据形式。
一般实现代码转换有两种方法:1.软件法利用CPU的算术逻辑运算功能,通过运算或查表实现各种数据代码间的转换。
该方法经济但速度慢。
2.硬件法利用专用代码转换集成电路进行转换。
80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第二次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 加深对常用DOS功能调用指令的理解;(3) 进一步熟悉TD的使用。
二、实验内容1、《80X86汇编语言程序设计》教材中 P45的 2.3题。
要求:(1) 分别记录执行到“MOV CX,10”和“INT 21H”之前的(BX), (BP),(SI),(DI)各是多少。
(2) 分别记录程序执行初期与退出之前数据段开始40个字节的内容,指出运行结果是否与设想的一致。
2、《80X86汇编语言程序设计》教材中 P45的 2.4题。
要求:(1) 实现的功能不变。
(2) 内存单元中数据的访问采用变址寻址方式。
(3) 记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。
3、编写程序利用DOS 10号功能调用输入一个字符串,统计字符串中字符0、1、…、9出现的次数并显示出来(假设每个字符最多出现9次,若大于9次则显示为x)。
三、实验步骤及结果1、输入源程序,如下:.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDA TA SEGMENT USE16BUF1 DB 0,1,2,3,4,5,6,7,8,9BUF2 DB 10 DUP(0)BUF3 DB 10 DUP(0)BUF4 DB 10 DUP(0)DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TA,SS:STACKSTART: MOV AX,DA TAMOV DS,AXMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2MOV BX,OFFSET BUF3MOV BP,OFFSET BUF4MOV CX,10LOPA: MOV AL,[SI]MOV [DI],ALINC ALMOV [BX],ALADD AL,3MOV DS:[BP],ALINC SIINC DIINC BPINC BXDEC CXJNZ LOPAMOV AH,4CHINT 21HCODE ENDSEND START(1)进行单步调试。
计算机组成原理与汇编元程序设计实验报告实验五 80x86汇编语言程序设计1.按要求编写一个汇编语言程序,实现下面的功能:1)在计算机屏幕上输出自己的学号和姓名拼音;2)在计算机屏幕上输出99乘法表。
1*1=1 1*2=2 1*3=3……1*8=8 1*9=92*1=2 2*2=4 2*3=6……2*8=16 2*9=183*1=3 3*2=6 3*3=7……3*8=24 3*9=27………………8*1=8 8*2=16 8*3=24 ……8*8=64 8*9=729*1=9 9*2=18 9*3=27 ……9*8=72 9*9=813)从键盘输入任意两个一位10进制数据,按99乘法表的格式输出这两个数据的乘法运算表达式;2. 编写设计一个2,10,16进制的码制转换程序,程序输入某进制的数据,转换为其他两种进制数据输出,要求:1) 程序可以输入<65536的任意进制的数据;2) 保证输入的数据为正确的进制数据,如果输入不正确,给出错误提示,然后要求重新输入;(比如要输入10进制数据,输入的必须是0-9,如果输入其他,则错误)3)程序执行输入输出的时请先给出一定的提示,比如“please input 4 bit decimal number:”“output decimal data:”等;要求:1. 提供算法与程序框图;2. 提供源程序,在源程序空白位置,对重要的源程序进行必要的注释;3. 将源程序以你学号后6位为文件名进行保存,并进行编译、链接生成exe文件,执行生成的exe文件,并验证程序的各个功能;提供截图,在截图空白位置,进行简单的说明;计算机组成原理与汇编元程序设计实验报告云南大学软件学院实验报告指导教师 (签名):1.乘法程序程序功能:利用int 21的9号功能输出保存在data段中的学号和姓名字符;利用两层循环控制输出9*9乘法表;接收被乘数和乘数,计算结果并输出表达式。
程序框图:源程序:运行结果:2.进制转换程序功能:输入二,十,十六进制任意一种数据,通过计算转化为另外两种类型的数据并输出,数据范围最大不超过65535程序框图:源代码:运行结果:输入二进制输入十进制输入十六进制。
8086汇编语言程序设计实验指导书计算机科学与技术学院计算机科学与技术系二〇一一年九月目录第一部分实验方法 ............................................................................. - 1 -1.1 实验目的与要求 ...................................................................... - 1 -1.2 实验方法 .................................................................................. - 2 - 第二部分实验内容 ............................................................................. - 7 - 实验1 简单汇编语言程序设计 .................................................. - 7 - 实验2 分支循环及程序设计 ...................................................... - 8 - 实验3 子程序程序设计 .............................................................. - 9 - 实验4 综合程序设计 ................................................................ - 10 - 附录.................................................................................................. - 11 - 附录1 常用DOS命令 ................................................................ - 11 - 附录2 DEBUG主要命令............................................................. - 13 - 附录3 汇编程序出错信息 .......................................................... - 16 - 附录4 常用字符ASCII码值...................................................... - 20 - 附录5 8088/8086指令系统 ...................................................... - 21 - 附录6 IBM PC/A T中断功能表................................................ - 25 - 附录7 常用DOS功能调用(INT 21H).................................. - 27 - 附录8 BIOS功能调用 ................................................................. - 30 -第一部分实验方法1.1 实验目的与要求一、实验目的学习汇编语言程序设计的基本方法和技能,进一步加深对8086汇编语言程序设计的理解,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,为后继课程——接口技术打下坚实的程序设计基础。
计算机组成原理与汇编语言实验四80x86汇编语言程序开发实验计算机组成原理与汇编元程序设计实验报告实验四80x86汇编语言程序开发实验1.汇编语言程序上机过程,实验步骤:(1)用用文字编辑工具(EDITPLUS)将源程序输入,保存文件其扩展名为.ASM;(2)用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过;(3)用LINK将.OBJ文件连接成可执行的.EXE文件;(4)在DOS状态下运行LINK产生的.EXE文件;2.编写一个汇编程序,实现下面的功能:(1)在数据段中定义10个标题msg0到msg9,标题的内容任意;(2)采用1号DOS功能子程序,输入0到9中任意1个数值,然后显示对应的msg0到msg9中的某一个标题;(3)如果输入数值10,则显示输出全部10个标题;(4)程序循环执行,直到输入ESC键,程序结束;(5)根据1的步骤,编译链接生产exe文件,并测试程序的功能;源程序代码(截图)data segmentmsg0 db 'xxx',0dh,0ah,'$'msg1 db '学号',0dh,0ah, '$'msg2 db 'q',0dh,0ah, '$'msg3 db 'w',0dh,0ah, '$'msg4 db 'e',0dh,0ah,'$'msg5 db 'r',0dh,0ah,'$'msg6 db 't',0dh,0ah,'$'msg7 db 'y',0dh,0ah,'$'msg8 db 'u',0dh,0ah,'$'msg9 db 'i',0dh,0ah,'$'msg10 db' xxxq w e r t y u i',0dh,0ah,'$'data endscode segmentAssume cs:code,ds:datastart:mov ax,datamov ds,axagain:mov ah,01int 21hcmp al,'0'jz zerocmp al,'1'jz onecmp al,'2'jz twocmp al,'3'计算机组成原理与汇编元程序设计实验报告cmp al,'4' jz fourcmp al,'5'jz fivecmp al,'6'jz sixcmp al,'7'jz sevencmp al,'8'jz eightcmp al,'9'jz ninecmp al, 'a'jz allcmp al,1bhjz exitzero:mov dx,offset msg0 jmp outputone:mov dx,offset msg1 jmp outputtwo:mov dx,offset msg2 jmp output three:mov dx,offset msg3 jmp outputfour:mov dx,offset msg4 jmp outputfive:mov dx,offset msg5 jmp outputsix:mov dx,offset msg6 jmp output seven:mov dx,offset msg7 jmp output eight:mov dx,offset msg8jmp outputnine:mov dx,offset msg9计算机组成原理与汇编元程序设计实验报告all: mov dx,offset msg10jmp outputoutput:mov ah,09int 21hjmp againexit: mov ah,4chint 21hcode endsend start程序功能测试(截图)分析(手写)实验总结(手写):。
(完整版)(整理)《80x86汇编语言程序设计》教案及答案.《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:2007年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (12)3.180X86的寻址方式 (12)3.2程序占有的空间和执行时间 (14)3.380X86的指令系统 (14)第 4 章汇编语言程序格式 (31)4.1汇编程序功能 (31)4.2伪操作 (31)4.3汇编语言程序格式 (35)4.4汇编语言程序的上机过程 (38)第 5 章循环与分支程序设计 (40)5.1循环程序设计 (40)5.2分支程序设计 (41)5.3如何在实模式下发挥80386及其后继机型的优势 (41)第 6 章子程序结构 (43)6.1子程序的设计方法 (43)6.2子程序的嵌套 (44)6.3子程序举例 (44)第7 章高级汇编语言技术 (46)7.1宏汇编 (46)7.2重复汇编 (47)7.3条件汇编 (48)第8 章输入/输出程序设计 (49)8.1I/O设备的数据传送方式 (49)8.2程序直接控制I/O方式 (50)8.3中断传送方式 (50)第9 章BIOS和DOS中断 (53)9.1键盘I/O (53)9.2显示器I/O (55)9.3打印机I/O (56)9.4串行通信口I/O (57)第10 章图形与发声系统的程序设计 (58)10.1显示方式 (58)10.2视频显示存储器 (58)10.3EGA/VGA图形程序设计 (59)10.4通用发声程序 (60)10.5乐曲程序 (61)第11 章磁盘文件存取技术 (62)11.1磁盘的记录方式 (62)11.2文件代号式磁盘存取 (63)11.3字符设备的文件代号式I/O (64)11.4BIOS磁盘存取功能 (65)附录:《IBM—PC汇编语言程序设计》习题参考答案 (66) 第一章.习题 (66)第二章.习题 (67)第三章.习题 (68)第四章.习题 (81)第五章.习题 (86)第六章.习题 (104)第七章.习题 (117)第八章.习题 (124)第九章.习题 (129)第十章.习题 (132)第十一章.习题 (143)第 1 章基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第三次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 掌握基本的程序设计方法;(3) 进一步熟悉TD的使用。
二、实验内容1、《80X86汇编语言程序设计》教材中 P96的 3.11 题。
(1)请事先指出程序运行结束后,显示器显示的内容。
(2)若将NUM的定义改成如下形式:NUM DB 35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUM DB 59显示的结果是什么?(4)若将NUM的定义改成如下形式:NUM DB 75显示的结果是什么?(5)修改该程序,使之能够以16进制形式显示NUM单元中的内容。
2、设在一个缓冲区BUF1中存放了一个串“123GOOD”, 将其以相反顺序拷贝到另一个缓冲区BUF2中。
(用TD观察程序执行前后的数据区,并记录下来)3、输入一个十进制数字串(假定是无符号的),以四位十六进制的形式输出该串对应的值。
例如:Input: 123↙Output: 007BH要求:(1) 画出程序流程图,给出寄存器、存储单元的分配方法;(2) 给出完整的程序清单,有必要的注释。
三、实验步骤及结果1、(1)、程序运行完之后,得到的结果为:(NUM)=39H。
(2)、程序运行完之后,得到的结果为:(NUM)=23H。
(3)、程序运行完之后,得到的结果为:(NUM)=3;H。
(4)、程序运行完之后,得到的结果为:(NUM)=4;H。
(5)、修改后的程序段如下:C1 SEGMENT USE16 ASSUME DS:A1, SS:B1, CS:C1 BEGIN: MOV AX,A1MOV DS,AXLEA DI,BUF0MOV AL,NUMSHR AL,4CMP AL,0AHJAE L1OR AL,30HMOV [DI],ALL2: INC DIMOV AL,NUMAND AL,0FHCMP AL,0AHJAE L3OR AL,30HMOV [DI],ALL4: INC DIMOV BYTE PTR [DI],'H'INC DIMOV BYTE PTR [DI],'$'LEA DX,BUFMOV AH,9INT 21HMOV AH,4CHINT 21HL1: MOV BYTE PTR [DI],'0'INC DISUB AL,0AHADD AL,'A'MOV [DI],ALJMP L2L3: SUB AL,0AHADD AL,'A'MOV [DI],ALJMP L4C1 ENDSEND BEGIN运行后的结果如下:①、当NUM为35时:②、当NUM为59时:③、当NUM为75时:④、当NUM为0ACH时:2、编写的程序如下:.386DATA SEGMENT USE16BUF1 DB '123GOOD$'BUF2 DB 0DATA ENDSSTACK SEGMENT USE16 STACK STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV DI,OFFSET BUF1MOV BX,OFFSET BUF2MOV CL,[BX]LOPA: MOV DL,[DI]CMP DL,'$'JE L1INC DIJMP LOPAL1: CMP DI,0JE EXITDEC DIMOV DL,[DI]MOV CL,DLMOV [BX],CLINC BXJMP L1EXIT: MOV CL,'$'MOV [BX],CLLEA DX,BUF2MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START运行后的结果如下:运行程序前数据区显示为:运行程序后数据区显示为:3、①、画出流程图如下:开始输入一个数字串将输入的数字串转化为10进制数存储。
80X86汇编语言程序设计实验指导书中南民族大学计算机科学学院2006年9月目录实验一实验的基本要求与方法 (1)实验二顺序程序设计 (13)实验三分支程序设计 (18)实验四循环程序设计 (24)实验五子程序设计 (31)实验六串操作指令的使用 (36)实验七位运算指令的使用 (41)实验八宏汇编技术 (45)附录A MASM 6.X (53)附录B Windbg的使用 (54)附录C I/O宏说明 (57)附录D 汇编指令总汇 (73)附录E 流程图规范 (90)实验一实验的基本要求与方法1.1 实验目的与要求1.1.1 实验目的实验是掌握汇编语言程序设计的步骤,学习使80X86汇编语言程序设计的基本方法和技能,熟练掌握用汇编语言设计、编码、调试和运行程序的方法,养成良好的程序设计习惯,为后续课程和将来相关的项目开发打下坚实的基础。
1.熟练操作宏汇编的开发环境,熟悉汇编语言的编译工具(MASM6.11)及调试器(Windbg)的使用。
2.掌握汇编语言的寻址方式和常用指令。
3.掌握汇编语言基本的程序设计方法和调试手段。
4.掌握子程序和宏指令的设计和调试手段。
1.1.2 实验要求1.上机前应做好充分的准备。
对选定的实验题要先进行设计包括程序框图、数据结构以及算法;上机之前先编好程序代码,并进行认真地静态检查,减少错误的发生,同时还有预先估计程序运行的结果或结果范围,做到心中有数。
2.上机时要遵守实验室的规章制度,爱护实验设备。
要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在程序的调试过程中,有意识的学习及掌握Windbg程序的各种功能,以便掌握程序的调试方法和技巧。
不互相抄袭,应自己动手按自己的算法编制程序,调试通过。
3.下机后要对实验结果进行整理,分析程序调试过程中所出现的各种情况,对未通过的程序更好认真分析原因,总结经验教训。
4.每个程序完成后应写出实验报告,实验报告的要求如下:(1)本次实验的目的及要求,实验内容。
(2)设计说明:用来说明程序的功能和结构,它包括:程序名、功能、原理及算法说明、数据结构及主要符号名说明等。
(3)程序框图: 根据设计思想给出规范的程序流程图,流程图规范参看附录E。
(4)调试说明:总结经验提高编程及调试能力。
它包括:调试情况,如上机时遇到的问题及解决的办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会等。
(5)使用说明:程序提供给用户使用时必须作出的说明。
如:程序的使方法,调用方式,操作步骤等;要求输入信息的类型及格式;出错信息的含义及程序的使用范围等。
(6)程序清单。
1.2 实验方法例1.1 求两数之和。
试编写一程序,输出提示信息,从键盘输入两个数number1和number2,求它们的之和并显示结果。
1.进入windows下的DOS命令行环境鼠标点击Windows系统的“开始”――>“运行”,输入“cmd”回车后(如图1.1),进入windows下的DOS命令行环境(图1.2)。
图1.1图1.2 DOS命令行环境这里设定所需软件都安装在C盘的masm目录下。
使用DOS的CD命令进入masm 目录(图1.3)。
输入:cd c:\masm(回车)图1.3 进入汇编程序目录2.调用文本编辑程序EDIT建立汇编源文件(后缀名为.asm)在当前目录,输入:edit example.asm后就可进入编辑环境(图1.4)。
图1.4 EDIT编辑环境也可以用其他编辑程序如记事本等来建立源程序(建议不要用office word)。
建议以example.asm为文件名的源文件如图1.5。
;********************************************************************* ; Example assembly language program -- adds two numbers; Author: R. Detmer; Date: revised 7/97;--------------------------------------------------------------------- .386.MODEL FLAT;--------------------------------------------------------------------- ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD;--------------------------------------------------------------------- INCLUDE io.h ; header file for input/output;---------------------------------------------------------------------cr EQU 0dh ; carriage return characterLf EQU 0ah ; line feed;--------------------------------------------------------------------- .STACK 4096 ; reserve 4096-byte stack;--------------------------------------------------------------------- .DATA ; reserve storage for datanumber1 DWORD ?number2 DWORD ?prompt1 BYTE "Enter first number: ", 0prompt2 BYTE "Enter second number: ", 0string BYTE 40 DUP (?)label1 BYTE cr, Lf, "The sum is "sum BYTE 11 DUP (?)BYTE cr, Lf, 0;--------------------------------------------------------------------- .CODE ; start of main program code_start:output prompt1 ; prompt for first numberinput string, 40 ; read ASCII charactersatod string ; convert to integermov number1, eax ; store in memoryoutput prompt2 ; repeat for second numberinput string, 40atod stringmov number2, eaxmov eax, number1 ; first number to EAXadd eax, number2 ; add second numberdtoa sum, eax ; convert to ASCII charactersoutput label1 ; output label and sumINVOKE ExitProcess, 0 ; exit with return code 0PUBLIC _start ; make entry point public;--------------------------------------------------------------------- END ; end of source code;********************************************************************* 图1.5 例1.1的源文件example.asm3.用汇编程序ml对源文件汇编产生目标文件(后缀名为.obj)输入: ml /c /coff /Zi example.asm显示如图1.6,则表示汇编成功,同时生成了目标文件(example.obj)。
如果汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
图1.64.用连接程序link产生可执行文件(后缀名为.exe)输入: link /debug /subsystem:console /entry:start/out:example.exe example.obj io.obj kernel32.lib显示如图1.7,则表示连接成功,同时生成了可执行文件(example.exe)图1.75.执行程序可直接在当前目录下执行如下:输入:example显示结果如图1.8。
图1.8 example.exe运行结果6.查看列表文件(后缀名为.lst)在进行汇编时候,如果在输入参数中加上“/Fl”,则可生成和列表文件(example.lst)。
输入: ml /c /coff /Zi /Fl example.asm用编辑软件打开example.lst(图1.9)。
Microsoft (R) Macro Assembler Version 6.11 08/03/05 15:19:43example.asm Page 1 - 1; Example assembly language program -- adds two numbers; Author: R. Detmer; Date: revised 7/97.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORDINCLUDE io.h ; header file for input/outputC ; IO.H -- header file for I/O macrosC ; 32-bit version for flat memory modelC ; R. Detmer last revised 8/2000C .NOLIST ; turn off listingC .LIST ; begin listingC= 0000000D cr EQU 0dh ; carriage return character = 0000000A Lf EQU 0ah ; line feed.STACK 4096 ; reserve 4096-byte stack00000000 .DATA ; reserve storage for data00000000 00000000 number1 DWORD ?00000004 00000000 number2 DWORD ?00000008 45 6E 74 65 72 prompt1 BYTE "Enter first number: ", 020 66 69 72 7374 20 6E 75 6D62 65 72 3A 2020 000000001E 45 6E 74 65 72 prompt2 BYTE "Enter second number: ", 020 73 65 63 6F6E 64 20 6E 756D 62 65 72 3A20 20 0000000035 00000028 [ string BYTE 40 DUP (?)00]0000005D 0D 0A 54 68 65 label1 BYTE cr, Lf, "The sum is "20 73 75 6D 2069 73 200000006A 0000000B [ sum BYTE 11 DUP (?)00]00000075 0D 0A 00 BYTE cr, Lf, 000000000 .CODE ; start of main program code 00000000 _start:output prompt1 ; prompt for first numberinput string, 40 ; read ASCII charactersatod string ; convert to integer 0000002E A3 00000000 R mov number1, eax ; store in memoryoutput prompt2 ; repeat for second numberinput string, 40atod string00000061 A3 00000004 R mov number2, eax00000066 A1 00000000 R mov eax, number1 ; first number to EAX0000006B 03 05 00000004 R add eax, number2 ; add second numberdtoa sum, eax ; convert to ASCII charactersoutput label1 ; output label and sumINVOKE ExitProcess, 0 ; exit with return code 000000097 PUBLIC _start ; make entry point publicEND ; end of source codeMicrosoft (R) Macro Assembler Version 6.11 08/03/05 15:19:43example.asm Symbols 2 - 1Macros:N a m e Typeatod . . . . . . . . . . . . . . Procatoi . . . . . . . . . . . . . . Procdtoa . . . . . . . . . . . . . . Procinput . . . . . . . . . . . . . Procitoa . . . . . . . . . . . . . . Procoutput . . . . . . . . . . . . . ProcSegments and Groups:N a m e Size Length Align Combine ClassFLAT . . . . . . . . . . . . . . GROUPSTACK . . . . . . . . . . . . . 32 Bit 00001000 DWord Stack 'STACK'_DATA . . . . . . . . . . . . . 32 Bit 00000078 DWord Public 'DATA'_TEXT . . . . . . . . . . . . . 32 Bit 00000097 DWord Public 'CODE' Procedures, parameters and locals:N a m e Type Value Attr$$$$$$00001 . . . . . . . . . . P Near 00000001 _TEXT Length= 00000096 Private ExitProcess . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALLSymbols:N a m e Type Value Attr@CodeSize . . . . . . . . . . . Number 00000000h@DataSize . . . . . . . . . . . Number 00000000h@Interface . . . . . . . . . . . Number 00000000h@Model . . . . . . . . . . . . . Number 00000007h@code . . . . . . . . . . . . . Text _TEXT@data . . . . . . . . . . . . . Text FLAT@fardata? . . . . . . . . . . . Text FLAT@fardata . . . . . . . . . . . . Text FLAT@stack . . . . . . . . . . . . . Text FLATLf . . . . . . . . . . . . . . . Number 0000000Ah_start . . . . . . . . . . . . . L Near 00000000 _TEXT Publicatodproc . . . . . . . . . . . . L Near 00000000 FLAT Externalatoiproc . . . . . . . . . . . . L Near 00000000 FLAT Externalcr . . . . . . . . . . . . . . . Number 0000000Dhdtoaproc . . . . . . . . . . . . L Near 00000000 FLAT Externalinproc . . . . . . . . . . . . . L Near 00000000 FLAT Externalitoaproc . . . . . . . . . . . . L Near 00000000 FLAT Externallabel1 . . . . . . . . . . . . . Byte 0000005D _DATAnumber1 . . . . . . . . . . . . DWord 00000000 _DATAnumber2 . . . . . . . . . . . . DWord 00000004 _DATAoutproc . . . . . . . . . . . . L Near 00000000 FLAT Externalprompt1 . . . . . . . . . . . . Byte 00000008 _DATAprompt2 . . . . . . . . . . . . Byte 0000001E _DATAstring . . . . . . . . . . . . . Byte 00000035 _DATAsum . . . . . . . . . . . . . . Byte 0000006A _DATA0 Warnings0 Errors图1.9 列表文件example.lst7.使用调试软件windbg调试程序1)打开Windbg程序输入:windbg或直接在window界面下打开C盘上的文件夹masm,双击 windbg.exe程序的图标,也可以运行windbg,并看到如图1.10的窗口。