- 1、本文档共71页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言程序设计Assembly Language Programming 本章结构 本章结构 1. 汇编语言程序结构 汇编语言源程序由一个或多个逻辑段组成。 一个程序中可以有几个同一类型的逻辑段。 必须至少有一个代码段。 源程序的结束标志——“END”语句 [注]源程序分段的目的在于程序结构清晰、便于内存分配,寻址方便,一个源程序需要设置几个段应根据具体问题来定。 逻辑段 一个逻辑段由若干条汇编语言语句组成 逻辑段的类型 程序段(代码段)——主要由指令语句组成,完成源程序的功能。 数据段——定义数据及符号的伪指令组成。 附加段——定义数据及符号的伪指令组成。 堆栈段——定义堆栈伪指令组成。 语 句 语句类型: 指令——使CPU产生动作、并在程序执行时才处理的语句,就是第3章学习的处理器指令 伪指令(Directive)——不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等 宏指令语句——可执行语句 2. 伪指令 伪指令语句——非执行语句,用来指示编译器进行编译的语句,没有机器代码对应。 伪指令与具体的处理器类型无关,但与汇编程序的版本有关 伪指令分类 变量定义语句 符号定义语句 LABEL伪指令 段定义语句 段类型说明语句 程序结束伪指令 过程定义语句 起始地址和对准语句 $-地址计数器 (1)数据定义语句 格式: [变量] DB/DW/DD/ DF / DQ / DT 操作数1,…,操作数n 功能: 定义变量; 在内存中分配一组存储单元; 并对单元进行初始化。 分类 DB:用来定义字节,其后每个操作数占用一个字节。 DW:用来定义字,其后每个操作数占用一个字。 DD:用来定义双字,其后每个操作数占用两个字。 DQ:用来定义四个字,其后每个操作数占用四个字。 DT:用来定义十个字节,其后每个操作数占用十个字节。 操作数 常数或一组常数或数值表达式; 例如:DATA DB 2, 100*2-5, 0, -1 一组字符串 如: STRING DB ‘This is a string’ 操作数 变量名 ADDR1 DW BLOCK ;BLOCK偏址放在ADDR1单元 ADDR2 DD BLOCK ;BLOCK的偏址和段址依次存放在ADDR2四字节单元中。 一组“?” 只分配空间,不进行初始化 例如:BLOCK DW ?,? ;分配两个字节,但为随机值 操作数 重复DUP语句 格式:重复数 n DUP(重复内容) 功能:将DUP后的内容重复定义n次。 例如:BLOCK DB 3 DUP (0,1,-1) 如同:BLOCK DB 0,1,-1, 0,1,-1, 0,1,-1 [注]DUP语句中可以包含DUP语句。 NOTICE 汇编语言强类型! 变量有类型! BUFFER DW 1234H MOV AL, BUFFER MOV AL,BYTE PTR BUFFER MOV AX, BUFFER (2)符号定义语句EQU 格式:符号名 EQU 表达式 符号名——符号常数 表达式——数值表达式或者字符串 功能: 出现符号的地方进行替换;不分配空间;相当于C语言的Define宏。 例如: XX EQU 1*10-2 DATA EQU [1000H] MOV AX,XX*2; 16?AX (2)符号定义语句= = 符号名 = 数值表达式 例如: ZERO = 0 “EQU”不能对同一个符号进行二次定义,但符号定义为指令“=”可以。 (3) LABEL 格式: 符号名 LABEL 类型 类型:BYTE, WORD,DWORD, …,NEAR,FAR 功能:从当前位置的地址强制转化为“类型”来定义“符号”,并不分配内存空间, 但定义变量或者标号。 例子: databyte label byte dataword dw 1,2,3 ;databyte和dataword地址一样,但是类型不同。 labelfar lable far labelnear: mov al, bl ;labelfar与labelnear地址一样,但是类型不同。 ;Labelfar用于段间转移 (4) 段定义伪操作-完整段定义 段名 segment [对齐] [组合] [‘类别’] ... ;语句序列 段名 ends 完整段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束 段名对外表现为立即数,为该段的段地址 STACK定义堆栈段:自动给SS和SP赋值 段
文档评论(0)