预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共54页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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

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

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

第4章伪指令、汇编语言源程序结构及上机过程4.1汇编语言中的语句2、语句格式 指令语句的一般格式如下: [标号:]指令[;注释] 标号:标号是机器指令语句在内存中地址的符号表示,后面必须紧跟冒号“:” 注:如果一条指令作为程序转移的目标,前面应该加标号.例:JMPAGAIN 伪指令格式 具体的伪指令对应具体的格式。3、其它语言要素 指令或伪指令中的操作数可以是: 常量(数值、字符、符号常量),数值常量可以是二、八、十、十六进制,但需注意书写规则。 表达式 表达式有算术表达式、关系表达式、逻辑表达式,其对应的运算符见课本37页。4.2伪指令(1)数据定义伪指令例:SUMDB12,8 A1DW1234H STRDB‘AB’ 该定义在内存的结果示意如下: 0C说明: (1)这里的SUM,A1,STR其实质为符号地址,不同于高级语言的内存变量,也就是说不能按内存变量一样去访问对应的数据。 (2)定义的16位数在内存存放时,其形式为低8位在低地址,高8位在高地址。 (3)定义的字符数据按其ASCII码存放。(4)若操作数是“?”,表示此时只分配单元,不定义初值。 例:A2DB0,?,?,0 其存储单元分配如下图: (5)操作数用复制操作符DUP,表示操作数重复若干次. 例:BUF1DB2DUP(2,3,4)等价于 BUF1DB2,3,4,2,3,4 BUF2DB8DUP(?)等价于 BUF2DB?,?,?,?,?,?,?,?(2)段定义伪指令SEGMENT/ENDS(3)假定伪指令ASSUME例: DATASEGMENT A DB1,2,3 DATAENDS CODESEGMENT ASSUME DS:DATA,CS:CODE START: CODE ENDS ENDSTART(4)源程序结束伪指令(6)其它PTR 类型PTR表达式 给表达式指定一个类型。 例:WORDPTR5 将5指定为字节类型。 问:MOV[BX],5指令能通过汇编吗? 不能,改成MOV[BX],BYTEPTR5便可。4.3汇编语言源程序结构CODESEGMENT ASSUMECS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVAL,BUF1 ADDAL,BUF2 MOVSUM,AL MOVAH,4CH返回Dos INT21H CODEENDS ENDSTART说明: 并不是所有的程序都需要定义4个段(代码段、数据段、堆栈段、附加段)。一般来说,代码段的定义是必须的,其他段是否定义根据具体问题而定。4.4汇编语言的上机过程2、汇编语言的上机过程运行EXE文件(1)用EDIT建立ASM文件 EDIT是一个在DOS环境下使用的文本编辑程序,用ALT键可激活FILE(文件)菜单,文件菜单下主要有以下常用菜单: NEW OPEN SAVE SAVEAS EXIT(2)用MASM产生OBJ文件 使用格式:MASM文件名 例:MASMSSD(或SSD.ASM) 运行后,有3个问题需用户回答. ①提示要求输入目标文件名,直接按回车,采用系统规定的文件名. ②询问是否建立列表文件,不需要时直接按回车,若需要,输入一文件名后,再按回车. ③询问是否建立交叉索引文件,不需要时直接按回车,若需要,输入一文件名后,再按回车.说明: 在汇编过程中,如果发现程序有语法错误,则列出出错位置、错误代码及错误性质,最后分别列出警告错误(WarningErrors)和严重错误(ServeErrors)的个数N和M,若N和M不为0,说明源程序程序有错误,需要对源程序进行修改后再进行汇编,直至N和M都为0H止。(3)用LINK产生EXE文件 汇编程序已产生出二进制的目标文件(OBJ),但OBJ文件并不是可执行的文件,还必须把OBJ文件转换成可执行的EXE文件。 格式:LINK文件名 例:LINKSSD注:连接时有3个需要用户回答的问题,用户可据需要回答。 连接完成后,连接程序给出的无堆栈段的警告性错误并不影响程序的执行,如果还有其他错误提示,说明源程序可能有错,需要修改源程序后再进行汇编和连接。(4)运行程序 形成EXE文件后,就可在DOS提示符下运行了。 那么如何检查运行结果是否正确? 若结果不正确,如何调试程序,纠正程序中的错误,从而得到正确的结果? 这里要使用DEBUG程序。 (5)程序的调试:DEBUG 下面介绍几个最常用的DEBUG命令: ①先进入DEBUG并装入要调试的程序(例:SSD.EXE) DEBUGSSD.EXE ②用反汇编命令U来确定所要设定的断点地址. -U③从U命令的显示情况可确定要设置的断点的位置.在确定断点后,就可以用G命令使程序启动运行,同时设置断点. 例:-G=0001D;执行程序(从0到001D单元) 程序将停在