如果您无法下载资料,请参考说明:
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单元)
程序将停在