《2022年2022年汇编语言上机过程 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言上机过程 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 汇编语言上机过程一、用汇编语言编写的源程序,使之运行必须经过以下几个步骤:1. 用编辑程序建立一个扩展名为ASM 的汇编语言源程序文件。2. 调汇编程序 (MASM) ,对源程序汇编,生成机器码目标文件,扩展名为OBJ。3. 连接( LINK )目标文件,生成可执行文件,扩展名为EXE。4. 运行可执行文件。5. 如果程序运行有错,可调用DEBUG 程序对 EXE 文件进行调试。二、编辑汇编语言源程序可用各种编辑软件来建立汇编语言源程序,例如记事本。先保存为TXT 文件,然后改为 ASM 文件,方法是在windows 界面:工具文件夹选项查看将“隐藏已知文件的扩展名”选项去掉。然后将扩展名
2、TXT直接改为 ASM,汇编程序文件名称由用户自定(只能用英文字母、数字下划线)。三、编译汇编语言源程序用 MASM 程序汇编源程序,生成浮动目标程序(即扩展名为 OBJ 的文件),这里产生的是浮动的目标模块,是不可执行程序。“开始”菜单 -运行 -键入“ cmd”-确定,打开DOS 命令行窗口。汇编前,在DOS 状态下用下列命令可以打开源程序,例如打开z1.asm的方法是:type z1.asm CR则屏幕上显示出z1.asm的源程序。汇编 z1.asm文件过程的屏幕操作与显示如下:masm z1.asmCR屏幕显示以下各行(一次一行),提示用户所应键入的信息:OBJECT FILENAME
3、 Z1 OBJ CRSOURCE LISTING NUL LST : CRCROSS REFERENCE NUL CRF :CR产生目标文件 (OBJ)是汇编的主要目的,通常用户可以直接回车,表示采用默认文件名。 (LST) 文件为列表文件,提供全部汇编后的信息。若用户不需要这些信息,可直接回车。 (CRF)文件为交义引用文件,要建立交叉引用文件,则键入文件名。MASM 将为用户建立扩展名为(CRF)的交叉引用文件,这里所得到的交叉引用文件,必须调用CREF 程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
4、 - - - - - 第 1 页,共 7 页 - - - - - - - - - 2 序处理,以建立一个按字母顺序排列的能被显示或打印的源程序中的符号(包括变量)表。利用它用户可以很快查到符号的相对地址及类型,这对调试较大的程序是很有用的。所以用户的盘中还应拷贝CREF.EXE 文件。若用户不需要这些信息,可直接回车。到此为止, 汇编过程已完成。MASM 对源程序进行汇编时,若发现源程序中有语法错误则列出有错误的语句,错误的代码和错误的类型,最后列出错误的总数。此时就可以分析错误,调用编辑程序修改错误,直到汇编无错误。四、连接装配汇编程序LINK EXE 文件用来将 (OBJ)文件连接成可执行
5、文件,扩展名为( EXE)。连接过程如下:在DOS 下,键入LINK z1 CR先显示版本号,然后依此提问以下几个问题:RUN FILE Z1EXE :CRLIST FILE NUL MAP :CRLIBRARIES LIB :CR第一个提示询问要产的可执行文件(EXE)的文件名,一般按回车表示默认括号内规定的文件名。第二个提示询问是否建立内存分配图文件(MAP ) ,直接回车表示不要建立。最后询问是否用库文件(LIB ) ,若不用库文件,直接回车。然后连接程序开始进行连接,若连接过程有错,则显示错误信息。有错误就要修改源文件,重新汇编、连接直至无错。若用户程序直接使用系统堆栈,则不要理会“N
6、O STACK SEGMENT ”的警告提示。五、汇编语言程序的运行汇编语言源程序经过汇编、连接以后生成的EXE 文件,可在DOS 下直接键入文件名运行。例如: z1 CR。则 z1EXE 文件会装入内存并从程序中起始的地址运行。程序如正确无误,执行完后控制将能正常返回DOS 操作系统。若运行结果在存储单元里,或发现程序运行错误,或想跟踪程序的执行,那么就需要用DEBUG 程序。六、汇编程序的调试DEBUG 是专为汇编语言设计的一个调试程序,它通过单步、 设置断点等方式为汇编语言程序的调试提供了非常有效的调试手段。在 DOS 的提示下,键入命令:名师资料总结 - - -精品资料欢迎下载 - -
7、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 3 DEBUG z1.exe CRDOS 把 DEBUG.COM 调入内存后把被调试的z1 程序也调入内存。装入内存的地址从偏移 0 开始,装入后显示DEBUG 的提示符“” 。 在提示符“”下可执行DEBUG 的各种命令。七、常用的 DEBUG 命令介绍如下。1.显示内存单元内容的命令D 格式 1: DCR表示从代码段cs:0000H 开始的 80H 个单元的内存。格式 2:D ds: 地址 CR表示从数据段指定地址开始的80
8、H 个单元的内存。格式 3: D始地址末地址 CR此命令显示指定范围的内存。例如下面是D 命令显示内容的其中一行,显示说明:0B2E:0200 E8 DA E1 46 E8 AC DF 74-0D E8 45 00 AC E8 41 00 .F.t.E.A. 左边 “0B2E:0200” 是头一个存储单元的逻辑地址,对应内容就是“E8”,后面依次是后续存储单元的内容(十六进制形式),共 16 个数据。中间的短划线“ -” 用于分隔第8 和第 9 个数据,便于定位(位于16 个数据中间) 。右边是对于存储单元内容的显示形式,就是说,如果它是一个可以显示的字符对应的ASCII 码(例如第4 个数据
9、为46) ,则显示该字符(就是字符 “F”) ,如果不是可以显示的字符,则显示为点“. ”。标志寄存器每个符号意义如下:1. 溢出 OV(overflow , OF1) ,无溢出 NV(no overflow ,OF0)2. 减量 DN(direction down ,DF1) ,增量 UP(direction up,DF0)3. 允许中断EI(enable interrupt,IF 1) ,禁止中断 DI (disable interrupt,IF 0)4. 负数 NG(negative,SF1) ,正数 PL(plus,SF0)5. 零 ZR(zero,ZF 1) ,非零 NZ (no z
10、ero,ZF0)6. 辅助进位AC(auxiliary carry , AF1) , 无辅助进位NA (no auxiliary carry ,AF 0)7. 偶校验 PE(even parity,PF1) ,奇校验 PO(odd parity ,PF0)8. 进位 CY(carry ,CF1) ,无进位 NC(no carry,CF 0)2.修改存储单元内容命令E 格式 1: E地址内容 CR名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - -
11、 - - - 4 用命令给定的内容去代替原来内存单元的内容。如:E DS:100 AABB CC DD CR是将 0AAH 、0BBH 、0CCH 及 0DDH 依次送 DS:100H 开始的 4 个单元中。格式E地址 CR意为一个一个单元地修改内存单元的内容。如:E CS:108CR只显示出CS 段内 108H 内存的内容,等待修改。修改后按空格键显示下个单元的内容,利用空格键可以修改连续的单元内容,回车键结束该命令。3.检查寄存器内容的命令R 格式 l:RCR显示 CPU 内部所有寄存器的内容和标志位状态。格式 2: R寄存器名 检查指定寄存器的内容。如键入R IP CRIP 0356 :
12、显示 IP 的内容为0356 4.运行命令 G 格式 1: GCR从当前 CS:IP 开始一直执行下去,直到INT 3 指令为止。跳出debug。格式 2: G=0000CR从 0000 处执行程序。5.跟踪命令(单步运行)T 格式 1: T=地址 CR单条跟踪命令,即执行时逐条跟踪,从指定地址起执行一条指令后停下来,显示所有寄存器的内容及标志位的值,最后显示将要执行的指令。如未指定地址则从当前的CS:IP 开始执行。格式 2: T 地址 N CR多条跟踪,从指定地址开始执行N 条指令后停下来。例如:T=0003 3 CR表示从指定地址0003 开始执行 3 条指令后停下来。6.步进跟踪命令P
13、 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 5 与 T 命令类似,该命令可执行一个循环、一个重复的字符串、一个软件中断或一程序调用,即遇到CALL 或 INT 等指令时,不会进入相应的子程序内逐条执行。7.反汇编命令U 若在内存某区域中,已经有了某个程序的目标代码,为能了解此程序的内存,就可以用U 命令进行反汇编。格式 l:UCR从 cs:0000H 的反汇编32 个字节机器码。 然后继续按U 则显示下一个32 个字节机器
14、码。依次类推。格式 2: U起始地址CR从指定地址开始,反汇编 32 个字节。 然后继续按U 则显示下一个32 个字节机器码。 依次类推。格式 3: U起始地址 结束地址 对指定范围内的存储单元进行反汇编。8.退出 DEBUG , 返回DOS QCRDEBUG 命令中,还有其他的命令,读者可参阅有关资料。八、常见出错信息1、 Register already defined 汇编内部出现逻辑错误2、Unknown symbol type 在符号语句的类型中,有些不能识别的东西3、Symbol is multi-defined 重复定义一个符号4、Symbol not defined 符号没有定
15、义5、Syntax error 语句的语法与任何可识别的语法不匹配6、Symbol is reserved word 使用一个汇编程序的保留字(例:定义add 为一变量 ) 7、Not proper align/combine type SEGMENT参数不正确8、One operand must be const 这是加法指令的非法使用9、Operands must be same or 1 abs 这是减法指令的非法使用10、Already have base register 试图重复基地址11、 Illegal size for item 引用的项的长度是非法的,(如:双字移位)12、
16、Illegal register value 指定的寄存器值不能放入“reg”字段13、Must be AX or AL 某些指令只能用AX 或 AL 14、Improper use of segment reg 段寄存器使用不合法(如:mov ds,0)15、Division by 0 or overflow 给出一个用0 作除数的表达式16、 Value is out of range 数值大于需要使用的17、CS register illeal usage 试图非法使用CS 寄存器18、DUP is too large for linker DUP嵌套太长, 以至于从连接程序不能得到所要
17、的记录名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 6 实验 1:熟悉汇编程序上机过程和环境,调试第一个程序Hello ASM ,学会使用masm, link和 debug 实验 2: 调试例题3.1,并用 debug 查看结果; 修改例题3.1 为求这十个数的和并放在DATA3处,查看结果。例题 3.1 DATAS SEGMENT DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH DATA2 DB 0C1
18、H, 36H, 9EH, 0D5H, 20H DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DA TAS START: MOV AX,DA TAS MOV DS,AX MOV CX, 5 MOV SI, 0 CLC LOOPER: MOV AL, DA TA2SI ADC DA TA1SI, AL INC SI DEC CX JNZ LOOPER MOV AH,4CH INT 21H CODES ENDS END START 修改程序为求和:DATAS SEGMENT DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH DATA2 D
19、B 0C1H, 36H, 9EH, 0D5H, 20H DATA3 DB 00H,00H DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DA TAS START: MOV AX,DA TAS MOV DS,AX MOV CX, 10 MOV SI, 0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 7 CLC LOOPER: MOV AL, DA TA1SI ADD DA TA3, AL JNC NEXT INC DA TA31 NEXT: INC SI DEC CX JNZ LOOPER MOV AH,4CH INT 21H CODES ENDS END START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -
限制150内