df汇编语言程序设计学习教案

上传人:莉**** 文档编号:90495512 上传时间:2022-05-15 格式:PPTX 页数:77 大小:426.06KB
收藏 版权申诉 举报 下载
df汇编语言程序设计学习教案_第1页
第1页 / 共77页
df汇编语言程序设计学习教案_第2页
第2页 / 共77页
df汇编语言程序设计学习教案_第3页
第3页 / 共77页
资源描述:

《df汇编语言程序设计学习教案》由会员分享,可在线阅读,更多相关《df汇编语言程序设计学习教案(77页珍藏版)》请在装配图网上搜索。

1、会计学1df汇编语言汇编语言(hu bin y yn)程序设计程序设计第一页,共77页。2上机环境上机环境硬件硬件系统软件系统软件 应用软件应用软件 操作系统:操作系统:DOS系统系统编辑器编辑器: EDIT.exe编程序编程序: MASM.exe连接程序连接程序:LINK.exe调试程序:调试程序:DEBUG.exe用户开发的程序:用户开发的程序:ABC.exe等等CPU、存储器、存储器(ROM、RAM)、I/O接口、输入、输出设备接口、输入、输出设备第1页/共77页第二页,共77页。3第一节第一节 汇编语言上机过程汇编语言上机过程D:EDIT ABC.asmD:MASM ABC; 有语法错

2、,回有语法错,回EDIT下改该程序下改该程序D:LINK ABC; 有错,回在有错,回在EDIT下改程序下改程序D:ABC 运行结果运行结果(ji gu)错,回错,回EDIT下改程序下改程序 或在或在DEBUG下调试,找原因下调试,找原因。D:DEBUG ABC.exe编辑源程序编辑源程序 EDIT ABC.ASM汇编源程序汇编源程序 MASMABC.ASM形成目标程序形成目标程序 ABC.OBJ连接目标程序连接目标程序 LINK ABC.OBJ有连接错误信息有连接错误信息? ?形成可执行程序形成可执行程序 ABC.EXE装入可执行程序到内存装入可执行程序到内存, ,并执行并执行D:subAB

3、C下一程序下一程序用用DEBUG 调试可执行程序调试可执行程序D:sub DEBUG ABC.EXE找到原因找到原因YNYNNYN有汇编错误信息有汇编错误信息? ?Y运行结果正确运行结果正确? ?用用DEBUG调试程序查错调试程序查错 ? ?第2页/共77页第三页,共77页。4第二节第二节 汇编语言程序结构汇编语言程序结构一、程序结构一、程序结构二、语句二、语句(yj)结构结构第3页/共77页第四页,共77页。5一、程序结构一、程序结构 程序由数条语句构成,每条语句占一行。程序由数条语句构成,每条语句占一行。 指令性语句指令性语句(指令语句指令语句) 指示性语句指示性语句(伪指令语句伪指令语句

4、) 分段结构分段结构 程序按段编写程序按段编写, 与与8088内存分段编址相对应。内存分段编址相对应。 每段由伪操作每段由伪操作(cozu)SEGMENT开始、由开始、由ENDS结束。结束。 程序最后为程序最后为END结束语句,后跟一启动地址。结束语句,后跟一启动地址。 启动地址指示程序开始执行的第一条语句。启动地址指示程序开始执行的第一条语句。 程序中设有返回程序中设有返回DOS的功能。的功能。 使程序执行完后返回使程序执行完后返回DOS系统的命令接受状态。系统的命令接受状态。 程序中用到内存操作程序中用到内存操作(cozu)数时,数时, 应按操作应按操作(cozu)数的寻址方式数的寻址方式

5、,给相应的段寄存器赋值给相应的段寄存器赋值;汇编语言程序结构例一汇编语言程序结构例一 movs.asm;实现数据传送功能实现数据传送功能aa SEGMENT ;数据段数据段1str1 DB Hello! aa ENDSbb SEGMENT ;数据段数据段2str2 DB 6 dup (?) bb ENDScc SEGMENT ;代码段代码段 ASSUME CS:cc, DS:aa, ES:bb start: CLD MOV AX , aa MOV DS , AX LEA SI , str1 MOV AX , SEG str2 MOV ES , AX MOV DI ,OFFSET str2 MO

6、V CX , 6 REP MOVSB MOV AH , 4CH INT 21H ;返回返回(fnhu)DOScc ENDS END start ;指示程序结束指示程序结束第4页/共77页第五页,共77页。6程序可由多个段构成,至少有一个代码段程序可由多个段构成,至少有一个代码段;汇编语言程序结构例二(子程结构)汇编语言程序结构例二(子程结构) scans.asm ;用二进制显示中断向量表中(用二进制显示中断向量表中(0:00:3FFH)数据)数据D0H的个数的个数key EQU 0D0H ;用符号表示常量用符号表示常量(关键字关键字)code SEGMENT ;代码段开始代码段开始 ASSUM

7、E CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H MOV CX , 0400H MOV BX , 0 MOV AL , key next: CMP SI , AL JNZ point INC BX point: INC SI LOOP next CALL display ; 调用显示子程调用显示子程 MOV AH, 4CH ; 返回返回DOS INT 21H;用二进制显示用二进制显示BX内容子程内容子程display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BL AND DL

8、, 01H ADD DL , 30H MOV AH , 2H INT 21H LOOP rotate RET ;子程返回子程返回display ENDP code ENDS ;代码段结束代码段结束 END begin ;指示程序结束指示程序结束和和 ;程序入口程序入口第5页/共77页第六页,共77页。7二、语句二、语句(yj)结构结构 名名字字 : 助助记记符符 操操作作数数, ;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项data SEGMENT ;数据段数据段var DB ? data ENDScode SEGMENT ;代码段代码段 ASSUME CS:code

9、,DS:datastart: MOV AX, data MOV DS , AX MOV var, CL MOV AH , 4CH INT 21H ;返回返回DOScode ENDS END start例:例:第6页/共77页第七页,共77页。8名名字字 : 助助记记符符 操操作作数数, ;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项1. 名字项名字项 据语句据语句(yj)功能的不同,功能的不同, 名字项可用来表示段名、名字项可用来表示段名、变量名、变量名、 标号、过程名以及常量名标号、过程名以及常量名等。等。data SEGMENT ;数据数据(shj)段段var D

10、B ? data ENDScode SEGMENT ;代码段代码段 ASSUME CS:code,DS:datastart: MOV AX, data MOV DS , AX MOV var, CL MOV AH , 4CH INT 21H ;返回返回DOScode ENDS END start第7页/共77页第八页,共77页。9l 名字项用一个符号表示。名字项用一个符号表示。 对符号的规定对符号的规定: 由字符由字符AZ ,az ,09及符号及符号、$、下划线、下划线_ 等组成,等组成, 最长最长31个字符,超出部分忽略。个字符,超出部分忽略。 不能用数字打头,以免与十六进制数相混。不能用数

11、字打头,以免与十六进制数相混。 不使用汇编程序中的保留字。不使用汇编程序中的保留字。 (如指令的助记符等如指令的助记符等) 对定义的符号不区分大小写。对定义的符号不区分大小写。名名字字 : 助助记记符符 操操作作数数, ;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项第8页/共77页第九页,共77页。10名名字字 : 助助记记符符 操操作作数数, ;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项2. 助记符项助记符项 助记符可以助记符可以(ky)是指令、伪操作中的助记符。是指令、伪操作中的助记符。对于对于(duy)指令,汇编程序将其翻译成机器语言

12、指令。指令,汇编程序将其翻译成机器语言指令。 MOV AX, 100 B8 00 01对于伪操作,汇编程序据其要求对于伪操作,汇编程序据其要求(yoqi)的功能进行处理。的功能进行处理。 data SEGMENT data与一段值对应与一段值对应 string DB Tsinghua string与一内存地址对应与一内存地址对应第9页/共77页第十页,共77页。113操作数项操作数项 操作数给出参与操作的数或数所在的地方。操作数给出参与操作的数或数所在的地方。 操作数多于一个时,用逗号操作数多于一个时,用逗号(duho)分开。分开。 操作数可以是常数、寄存器、存储器操作数、操作数可以是常数、寄

13、存器、存储器操作数、 标号名、过程名或表达式等。标号名、过程名或表达式等。名名字字 : 助助记记符符 操操作作数数, ;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项第10页/共77页第十一页,共77页。12常数常数给出具体的数据。可以是数字常量或字符常量。给出具体的数据。可以是数字常量或字符常量。 数字默认十进制,也可加数字默认十进制,也可加D表示十进制数。表示十进制数。如如 1234D, 1234 数字后加数字后加B表示二进制数。表示二进制数。 如如 1010B 数字后加数字后加H表示十六进制数。表示十六进制数。 如如 1234H 字符常量,用单引号表示。字符常量,

14、用单引号表示。 如如 1234 汇编时,用字符对应的汇编时,用字符对应的ASCII表示。表示。如如 31H, 32H, 33H, 34H例例 data1 DB 12, 34, 56 ;十进制;十进制 data2 DB 12H, 34H, 56H ;十六进制;十六进制 MOV AL, G ;字符;字符 string DB 1234 ;字符串;字符串第11页/共77页第十二页,共77页。13l A、B、C、D、E、F开头的十六进制数前面加开头的十六进制数前面加0, 与与H结尾的标识符区别。结尾的标识符区别。如如 寄存器名寄存器名AH、BH、CH、 DH 变量名变量名 abcdH 等等例例 mov

15、AL, 0AH mov AL, AH mov BX, 0abcdH第12页/共77页第十三页,共77页。144注释项注释项由分号引出,用来说明语句或程序的功能。由分号引出,用来说明语句或程序的功能。 汇编程序对分号后的内容汇编程序对分号后的内容(nirng)不做处理。不做处理。作用:作用: 注释程序,增强程序可读性。注释程序,增强程序可读性。 可放在语句最前,暂时注释某语句,调试程序用。可放在语句最前,暂时注释某语句,调试程序用。例例 、 ; MOV AH, 2 ;显示提示信息显示提示信息 ; MOV DL, A ; INT 21H 、名名字字 : 助助记记符符 操操作作数数, ;注注释释名名

16、字字项项 助助记记符符项项 操操作作数数项项 注注释释项项第13页/共77页第十四页,共77页。15第三节第三节 指示性语句指示性语句 / 第四节第四节 汇编语言程序举例汇编语言程序举例一、程序开始一、程序开始(kish)和结束和结束 二、段定义二、段定义三、变量定义三、变量定义四、四、ASSUME语句语句 汇编语言程序举例一汇编语言程序举例一 了解了解DOS的返回,装入功能的返回,装入功能 五、表达式及表达式中的操作符五、表达式及表达式中的操作符 汇编语言程序例二汇编语言程序例二 六、过程定义六、过程定义 (第五节程序设计介绍第五节程序设计介绍)七、等值定义七、等值定义 (第五节程序设计介绍

17、第五节程序设计介绍) 汇编语言程序例三汇编语言程序例三 (第五节程序设计介绍第五节程序设计介绍)第14页/共77页第十五页,共77页。16指示性语句与指令性语句:指示性语句与指令性语句:指令性语句是用指令系统中的指令构成的语句。指令性语句是用指令系统中的指令构成的语句。 例例 MOV AX, BX指示性语句是指示汇编程序指示性语句是指示汇编程序(hu bin chn x)进行汇编的操作。进行汇编的操作。 例例 MOV AX, 4 + 8 中的中的+ code SEGMENT 中的中的SEGMENT MOV BX, OFFSET string 中的中的OFFSET第15页/共77页第十六页,共7

18、7页。17l指示性语句与指令性语句区别指示性语句与指令性语句区别l一个程序经汇编一个程序经汇编(hubin),连接和装入内存后,在执行程序之,连接和装入内存后,在执行程序之前:前:l 指示性语句的功能已经完成,故又称伪操作。指示性语句的功能已经完成,故又称伪操作。 l 而指令性语句的功能尚未完成,需控制而指令性语句的功能尚未完成,需控制CPU去执行,才能去执行,才能完成。完成。第16页/共77页第十七页,共77页。18aa SEGMENT ;数据段数据段1 str1 DB Hello! aa ENDSbb SEGMENT ;数据段数据段2 str2 DB 6 dup (?) bb ENDScc

19、 SEGMENT ;代码段代码段 ASSUME CS:ccASSUME DS:aa, ES:bb start: CLD MOV AX , aa MOV DS , AX LEA SI , str1 MOV AX , bb MOV ES , AX LEA DI , str2 MOV CX , 6 REP MOVSB MOV AH , 4CH INT 21H cc ENDS END start D:masmDEBUG hello2.exe-U :查看代码段查看代码段12A0:0000 FC CLD12A0:0001 B89E12 MOV AX , 129E12A0:0004 8ED8 MOV DS

20、, AX12A0:0006 8D360000 LEA SI , 000012A0:000A B89F12 MOV AX , 129F12A0:000D 8EC0 MOV ES , AX12A0:000F 8D3E0000 LEA DI , 000012A0:0013 B90600 MOV CX , 000612A0:0016 F3 REPZ12A0:0017 A4 MOVSB12A0:0018 B44C MOV AH,4C12A0:001A CD21 INT 21、-D 129E:0 L10 ;查看数据段查看数据段1的内容的内容129E:0000 48 65 6C 6C 6F 21 00 00

21、-00 00 00 00 00 00 00 00 Hello!.-D 129F:0 L10 ;查看数据段查看数据段2的内容的内容129F:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .- -数据传送源程序数据传送源程序hello2.asm 程序经汇编、连接后,装入内存的情况如下:程序经汇编、连接后,装入内存的情况如下:第17页/共77页第十八页,共77页。19常用伪操作介绍常用伪操作介绍一、程序开始和结束一、程序开始和结束二、段定义二、段定义(dngy)(dngy)三、变量定义三、变量定义(dngy)(dngy)四、四、ASSUME

22、ASSUME语句语句五、表达式中的操作符五、表达式中的操作符六、过程定义六、过程定义(dngy)(dngy)七、等值定义七、等值定义(dngy)(dngy)第18页/共77页第十九页,共77页。20一、模块定义和程序结束伪操作一、模块定义和程序结束伪操作1 . NAME 和和 TITLE 伪操作伪操作 格式格式(g shi) NAME 模块名模块名 格式格式(g shi) TITLE 模块名模块名 在源程序开始可用在源程序开始可用 NAME 或或 TITLE 为模块命名为模块命名, 模块名的作用是指示给连接程序进行连接用。模块名的作用是指示给连接程序进行连接用。 源程序中可无模块定义,此时源文

23、件名作为模块名。源程序中可无模块定义,此时源文件名作为模块名。 第19页/共77页第二十页,共77页。212. END伪操作伪操作 格式格式 END 启动启动(qdng)地址地址 作用是指示源程序到此结束。作用是指示源程序到此结束。汇编程序对汇编程序对 END 之后的语句不进行处理。之后的语句不进行处理。程序中所有有效语句应放在程序中所有有效语句应放在 END 语句之前。语句之前。 源程序中必须有源程序中必须有 END 结束语句。结束语句。 汇编程序对无汇编程序对无 END 语句的源程序不进行处理语句的源程序不进行处理, 只给出无只给出无 END 语句错误信息。语句错误信息。第20页/共77页

24、第二十一页,共77页。22假设假设 TEST.asm 是一个无是一个无 END 语句语句(yj)的汇编语言源程序。的汇编语言源程序。其汇编结果如下:其汇编结果如下:D: MASM TEST; Microsoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.End of file encountered on input file End of file encountered on input file 49968 + 421181 Bytes symb

25、ol space free 0 Warning Errors 0 Severe ErrorsD:由于没有由于没有END语句语句(yj),汇编程序根本没对源程序进行汇编,汇编程序根本没对源程序进行汇编,此时显示警告性错误总数为此时显示警告性错误总数为 0,严重性错误总数为,严重性错误总数为 0,用户不要被此值的误导。用户不要被此值的误导。第21页/共77页第二十二页,共77页。23启动地址启动地址(dzh)可是一个标号或过程名可是一个标号或过程名, 指示程序的入口。指示程序的入口。程序装入内存后,系统跳转到入口处程序装入内存后,系统跳转到入口处, 开始执行程序。开始执行程序。aa SEGMENT

26、 ;数据段数据段1 str1 DB Hello! aa ENDSbb SEGMENT ;数据段数据段2 str2 DB 6 dup (?) bb ENDScc SEGMENT ;代码段代码段 ASSUME CS:cc ASSUME DS:aa, ES:bb start: CLD MOV AX , aa MOV DS , AX LEA SI , str1 MOV AX , SEG str2 MOV ES , AX MOV DI , OFFSET str2 MOV CX , 6 REP MOVSB MOV AH , 4CH INT 21H cc ENDS END start D:masmDEBUG

27、 hello.exe- -U :查看代码段查看代码段129F:0000 FC CLD129F:0001 B89D12 MOV AX , 129D129F:0004 8ED8 MOV DS , AX129F:0006 8D360000 LEA SI , 0000129F:000A B89E12 MOV AX , 129E129F:000D 8EC0 MOV ES , AX129F:000F BF0000 MOV DI , 0000129F:0012 B90600 MOV CX , 0006129F:0015 F3 REPZ129F:0016 A4 MOVSB129F:0017 B44C MOV

28、AH , 4C129F:0019 CD21 INT 21、- -D 129d:0 l10 ;查看数据段查看数据段1的内容的内容129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!.- -D 129e:0 l10 ;查看数据段查看数据段2的内容的内容129E:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .- -第22页/共77页第二十三页,共77页。24二、段定义伪操作二、段定义伪操作 格式格式 段名段名 SEGMENT 、 、 段名段名 ENDS 段定义由伪

29、操作段定义由伪操作SEGMENT开始、开始、ENDS结束。结束。其中:其中: SEGMENT 和和ENDS 必须必须(bx)成对出现,成对出现, 且语句前必须且语句前必须(bx)有段名,段名必须有段名,段名必须(bx)相同。相同。 SEGMENT和和ENDS语句之间可以有指令和其他伪操作语句之间可以有指令和其他伪操作, 表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理 程序中可以定义多个段。程序中可以定义多个段。 程序经汇编、连接及装入内存后,段名为一具体的段值。程序经汇编、连接及装入内存后,段名为一具体的段值。第23页/共7

30、7页第二十四页,共77页。25aa SEGMENT ;数据段数据段1 str1 DB Hello! aa ENDSbb SEGMENT ;数据段数据段2 str2 DB 6 dup (?) bb ENDScc SEGMENT ;代码段代码段 ASSUME CS:ccASSUME DS:aa, ES:bb start: CLD MOV AX , aa MOV DS , AX LEA SI , str1 MOV AX , bb MOV ES , AX LEA DI , str2 MOV CX , 6 REP MOVSB MOV AH , 4CH INT 21H cc ENDS END start

31、D:masmDEBUG hello2.exe-U :查看代码段查看代码段12A0:0000 FC CLD12A0:0001 B89E12 MOV AX , 129E12A0:0004 8ED8 MOV DS , AX12A0:0006 8D360000 LEA SI , 000012A0:000A B89F12 MOV AX , 129F12A0:000D 8EC0 MOV ES , AX12A0:000F 8D3E0000 LEA DI , 000012A0:0013 B90600 MOV CX , 000612A0:0016 F3 REPZ12A0:0017 A4 MOVSB12A0:00

32、18 B44C MOV AH,4C12A0:001A CD21 INT 21、-D 129E:0 L10 ;查看数据段查看数据段1的内容的内容129E:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!.-D 129F:0 L10 ;查看数据段查看数据段2的内容的内容129F:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .- -数据传送源程序:数据传送源程序: 程序经汇编、连接后,装入内存的情况如下:程序经汇编、连接后,装入内存的情况如下:第24页/共77页第二十五

33、页,共77页。26三、变量定义伪操作三、变量定义伪操作 格式格式 变量名变量名 类型助记符类型助记符 操作数操作数 ,操作数操作数 , . 用来定义程序中所用的内存操作数。用来定义程序中所用的内存操作数。 其中其中 变量名指示内存操作数的地址(符号地址)变量名指示内存操作数的地址(符号地址) 类型助记符指示内存操作数的类型类型助记符指示内存操作数的类型(字节、字、双字等字节、字、双字等) 操作数指示内存操作数的内容操作数指示内存操作数的内容 汇编程序汇编程序(hu bin chn x)将定义的操作数,按其类型分配内存单元数将定义的操作数,按其类型分配内存单元数, 顺序存入变量名指向的内存单元中

34、。顺序存入变量名指向的内存单元中。 常用的类型助记符有:常用的类型助记符有:DB 指示其后的操作数为字节类型指示其后的操作数为字节类型DW 指示其后的操作数为字类型指示其后的操作数为字类型DD 指示其后的操作数为双字类型指示其后的操作数为双字类型第25页/共77页第二十六页,共77页。27例例1: 定义定义(dngy)赋初值赋初值的变量的变量 data SEGMENT xx DB 1, -1, 0fcH yy DW 1, -1, 0fcH zz DD 1,- 1, 0fcH data ENDSxxyyzz01FFFC0100FFFFFC0001000000FFFFFFFFFC000000 1-

35、 -1FC 1- -1FC 1- -1FC第26页/共77页第二十七页,共77页。28例例2: 定义定义(dngy)字符串变量字符串变量( 只能用只能用DB定义定义(dngy) ) data SEGMENT str1 DB TsingHua str2 DB INPUT: , 0dH , 0aH ,$ data ENDS注意注意:3个及其以上的字符,个及其以上的字符, 只能用只能用DB定义定义str1 DW abcdstr2 DD abcdstr1str25473696e67487561494e5055543a0d0a24TsingHuaINPUT:0dH0aH$第27页/共77页第二十八页,共

36、77页。29操作数可以是用常量、表达式和操作数可以是用常量、表达式和 ? 表示。表示。 常量和表达式表示内存操作数的初始值常量和表达式表示内存操作数的初始值, 其值应在其定义的类型范围内,否则汇编出错。其值应在其定义的类型范围内,否则汇编出错。例例 aa DB 270 bb DW 80000 用用 ? 表示不置初始值的内存操作数。表示不置初始值的内存操作数。 例例 cc DB ? 可用可用 DUP 复制操作符定义相同的操作数,其格式为复制操作符定义相同的操作数,其格式为 重复重复(chngf)次数次数 DUP( 操作数操作数) 例例 ee DB 3 DUP ( 4 ) 等价于等价于 ee DB

37、 4, 4, 4第28页/共77页第二十九页,共77页。30data SEGMENTxx DB 1, -1, 0FCHyy DW 1,- 1, 0FCHzz DD 1, -1, 0FCHstr DB TsingHuabuf DB 4, ?,4 DUP (?) DB dataenddata ENDScode SEGMENT ASSUME CS:code ASSUME DS:datastart: MOV AX , data MOV DS , AX LEA BX , xx LEA SI , yy LEA DI , zz MOV AH , 4CH INT 21Hcode ENDS END start

38、D:MASMDEBUG varible.exe- -U12A1:0000 B89E12 MOV AX , 129E12A1:0003 8ED8 MOV DS , AX12A1:0005 8D1E0000 LEA BX , 000012A1:0009 8D360300 LEA SI , 000312A1:000D 8D3E0900 LEA DI , 000912A1:0011 8D1E1500 LEA BX , 001512A1:0015 8D361D00 LEA SI , 001D12A1:0019 B44C MOV AH ,4C12A1:001B CD21 INT 2112A1:001D F

39、F36243E PUSH 3E24-D 129E : 0 L30129E:0000 01 FF FC 01 00 FF FF FC-00 01 00 00 00 FF FF FF .129E:0010 FF FC 00 00 00 54 73 69-6E 67 48 75 61 04 00 00 .TsingHua.129E:0020 00 00 00 64 61 74 61 65-6E 64 00 00 00 00 00 00 .dataend.129E:0030 B8 9E 12 8E D8 8D 1E 00-00 8D 36 03 00 8D 3E 09 .6.- -xxyyzzstrb

40、ufd a t a e n d段段名名data 变变量量xx 变变量量yy 变变量量zz 变变量量str 变变量量buf例例4: 在在DEBUG下查看变量下查看变量(binling)存放情况。存放情况。第29页/共77页第三十页,共77页。31四、四、ASSUME伪操作伪操作 格式格式 ASSUME 段寄存器:段名段寄存器:段名 , 段寄存器段寄存器:段名段名, 其中其中 段寄存器为段寄存器为CS、DS、ES、SS中的一个中的一个 段名为用伪操作段名为用伪操作SEGMENT定义过的段名定义过的段名例例 ASSUME CS: cc , DS:aa ASSUME 伪操作的作用伪操作的作用(zuyn

41、g) 指示汇编程序指令中用到的标号、过程及变量所在的段指示汇编程序指令中用到的标号、过程及变量所在的段。 其中其中 对标号、过程必须用对标号、过程必须用 CS 段寄存器指示段寄存器指示 对变量可用对变量可用 CS、DS、ES、SS 段寄存器指示段寄存器指示第30页/共77页第三十一页,共77页。32 若未用若未用ASSUME语句指示指令中用到的标号、语句指示指令中用到的标号、 过程和变量所在的段过程和变量所在的段, 汇编程序将给出错误信息。汇编程序将给出错误信息。 ASSUME语句只起指示作用,并无实际的操作。语句只起指示作用,并无实际的操作。在程序中引用定义的变量做内存操作数时,在程序中引用

42、定义的变量做内存操作数时,需按寻址方式需按寻址方式(fngsh)用传送指令(如用传送指令(如MOV)给相应的段寄存器赋值。)给相应的段寄存器赋值。第31页/共77页第三十二页,共77页。33例例 用程序实现用程序实现 1234H + 5678Hvalueresult341278560000 data SEGMENT value DW 1234H, 5678H result DW ? data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;给给DS赋值赋值 MOV DS, AX MOV AX, value ;取数取数

43、 ADD AX, value+2 ;两数相加两数相加 MOV result, AX ;保存结果保存结果(ji gu) MOV AH, 4CH ;返回返回DOS INT 21H code ENDS END start第32页/共77页第三十三页,共77页。34注释掉注释掉ASSUME语句,其汇编结果:语句,其汇编结果: data SEGMENT value DW 1234H, 5678H result DW ? data ENDS code SEGMENT; A S S U M E C S : c o d e , DS:data start: MOV AX, data MOV DS, AX MO

44、V AX, value ADD AX, value+2 MOV result, AX MOV AH, 4CH INT 21H code ENDS END startD:MASMMASM assume;Microsoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.assume.ASM(8): Missing or unreachable CSassume.ASM(10): Cannot address with segment registerassum

45、e.ASM(11): Cannot address with segment registerassume.ASM(12): Cannot address with segment register 49872 + 421341 Bytes symbol space free 0 Warning Errors 4 Severe ErrorsD:MASM第33页/共77页第三十四页,共77页。35程序中有程序中有ASSUME语句,经汇编,连接和装入内存后的情况:语句,经汇编,连接和装入内存后的情况:data SEGMENT value DW 1234H, 5678H result DW ? da

46、ta ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;给给DS赋赋值值 MOV DS, AX MOV AX, value ;取数取数 ADD AX, value+2 ;两数相两数相加加 MOV result, AX ;保存结保存结果果 MOV AH, 4CH ;返回返回DOS INT 21H code ENDSD:MASMDEBUG assume.exe- -R ;查看程序执行前各寄存器查看程序执行前各寄存器AX=0000 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000

47、 DI=0000DS=1295 ES=1295 SS=12A5 CS=12A6 IP=0000 NV UP EI PL NZ NA PO NC12A6:0000 B8A512 MOV AX,12A5- -U ;查看在内存的程序查看在内存的程序12A6:0000 B8A512 MOV AX, 12A512A6:0003 8ED8 MOV DS, AX12A6:0005 A10000 MOV AX, 0000 12A6:0008 03060200 ADD AX, 0002 12A6:000C A30400 MOV 0004 , AX12A6:000F B44C MOV AH, 4C12A6:001

48、1 CD21 INT 21、-注意注意(zh y)(zh y): 程序装入内存后,执行程序前,程序装入内存后,执行程序前,当前的当前的DSDS值并非程序定义的值并非程序定义的datadata段值,段值, 1295 1295 不等于不等于 12A5 12A5第34页/共77页第三十五页,共77页。36思考:思考: 如果如果(rgu)上例中没有上例中没有 MOV DS , AX 程序执行的结果会怎样?程序执行的结果会怎样?D:MASMDEBUG assume.exe-R ;查看程序执行前各寄存器查看程序执行前各寄存器AX=0000 BX=0000 CX=0023 DX=0000 SP=0000 B

49、P=0000 SI=0000 DI=0000DS=1295 ES=1295 SS=12A5 CS=12A6 IP=0000 NV UP EI PL NZ NA PO NC12A6:0000 B8A512 MOV AX,12A5-U ;查看在内存查看在内存(ni cn)的程序的程序12A6:0000 B8A512 MOV AX, 12A512A6:0003 A10000 MOV AX, 0000 12A6:0006 03060200 ADD AX, 0002 12A6:000A A30400 MOV 0004 , AX12A6:000D B44C MOV AH, 4C12A6:000F CD21

50、 INT 21、data SEGMENT value DW 1234H, 5678H result DW ? data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;给给DS赋值赋值 ; MOV DS, AX MOV AX, value ;取数取数 ADD AX, value+2 ;两数相加两数相加 MOV result, AX ;保存结果保存结果(ji gu) MOV AH, 4CH ;返回返回DOS INT 21H code ENDS第35页/共77页第三十六页,共77页。37结论:结论:1. ASSUME语句

51、只起指示作用语句只起指示作用, 没有赋值作用没有赋值作用2. 程序中用到内存操作数时,程序中用到内存操作数时, 应按操作数的寻址方式应按操作数的寻址方式(fngsh), 给相应的段寄存给相应的段寄存器赋值。器赋值。第36页/共77页第三十七页,共77页。38第三节第三节 指示性语句指示性语句 / 第四节第四节 汇编语言程序举例汇编语言程序举例一、程序开始和结束一、程序开始和结束 二、段定义二、段定义三、变量三、变量(binling)定义定义四、四、ASSUME语句语句 汇编语言程序举例一汇编语言程序举例一 了解了解DOS的返回,装入功能的返回,装入功能 五、表达式及表达式中的操作符五、表达式及

52、表达式中的操作符 汇编语言程序例二汇编语言程序例二 六、过程定义六、过程定义 (第五节程序设计介绍第五节程序设计介绍)七、等值定义七、等值定义 (第五节程序设计介绍第五节程序设计介绍) 汇编语言程序例三汇编语言程序例三 (第五节程序设计介绍第五节程序设计介绍)第37页/共77页第三十八页,共77页。39汇编语言程序汇编语言程序(chngx)举例一举例一第38页/共77页第三十九页,共77页。40例例 将将BL寄存器的内容按二进制形式显示出来寄存器的内容按二进制形式显示出来10100110(BL) MOV CX , 8 ;显示字符个数为显示字符个数为8next: SHL BL , 1 ;将显示位

53、移至将显示位移至CF中中 JC one ;CF=1? MOV DL , 30H ;CF=0, 将将0的的ASCII放在放在DL中中 JMP exitone: MOV DL , 31H ;CF=1, 将将1的的ASCII放在放在DL中中exit: MOV AH , 2 INT 21H ;调用调用DOS功能显示功能显示 DEC CX ;循环次数减循环次数减1 JNZ next ;判断是否结束判断是否结束 、31 30 31 30 30 31 31 30第39页/共77页第四十页,共77页。41code SEGMENT ASSUME CS: codestart: . . . .code ENDS E

54、ND start MOV CX , 8 ;显示字符个数为显示字符个数为8next: SHL BL , 1 ;将显示位移将显示位移(wiy)至至CF中中 JC one ;CF=1? MOV DL , 30H ;CF=0, 将将0的的ASCII放在放在DL中中 JMP exitone: MOV DL , 31H ;CF=1, 将将1的的ASCII放在放在DL中中exit: MOV AH , 2 INT 21H ;调用调用DOS功能显示功能显示 DEC CX ;循环次数减循环次数减1 JNZ next ;判断是否结束判断是否结束第40页/共77页第四十一页,共77页。42D:MASM SBL; 汇编

55、成汇编成ShowBL.objMicrosoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. 48912 + 447243 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsD:LINK SBL; 连接成连接成ShowBL.exe Microsoft (R) Overlay Linker Version 3.61Copyright (C) Microsoft Corp 1983-1987. A

56、ll rights reserved.LINK : warning L4021: no stack segmentD:SBL 装载装载(zhungzi)并执行并执行ShowBL.exe请猜想执行请猜想执行(zhxng)的结果?的结果?第41页/共77页第四十二页,共77页。43D:DEBUG SBL.exe ;用DEBUG装入程序(chngx)-U 0B5E:0000 B90800 MOV CX,00080B5E:0003 D0E3 SHL BL,10B5E:0005 7205 JB 000C0B5E:0007 B230 MOV DL,300B5E:0009 EB03 JMP 000E0B5E

57、:000B 90 NOP0B5E:000C B231 MOV DL,310B5E:000E B402 MOV AH,020B5E:0010 CD21 INT 210B5E:0012 49 DEC CX0B5E:0013 75EE JNZ 00030B5E:0015 09E8 OR AX,BP0B5E:0017 96 XCHG SI,AX0B5E:0018 00F8 ADD AL,BH0B5E:001A B262 MOV DL,620B5E:001C FFFF ? DI 0B5E:001D EB0A JMP 0029-hello.exe用户程序用户程序与用户程序相连的与用户程序相连的内存内容被看

58、作内存内容被看作程序时程序时死机死机第42页/共77页第四十三页,共77页。44复习复习DOS系统的启动过程系统的启动过程执行用户程序后,执行用户程序后,若要返回若要返回 DOS状态,状态,即在屏幕即在屏幕(pngm)上出现上出现 DOS提示符,提示符,等待输入新的命令,等待输入新的命令,应在用户程序的最后安排应在用户程序的最后安排完成此功能的程序段。完成此功能的程序段。F FF FF FF F: :0 00 00 00 0H H1243?ROM系系统统检检测测程程序序IO.SYS模模块块COMMAND.COMMSDOS.SYS模模块块用用户户程程序序空空 间间引引导导程程序序1KB 中中断断

59、向向量量表表RAM内内 存存ROM BIOSDOSIO.SYSCOMMAND.COMMSDOS.SYS引引导导程程序序磁磁 盘盘EDIT.EXEMASM.EXELINK.EXEDEBUG.exe应应用用程程序序其其他他系系统统程程序序h he el ll lo o. .a as sm mh he el ll lo o. .o ob bj jh he el ll lo o. .e ex xe e通常采用通常采用(ciyng)调用调用 DOS 系统功能完成。系统功能完成。第43页/共77页第四十四页,共77页。45调用调用DOS系统的系统的4CH 功能功能, 返回返回DOS方法:方法: 在要返回在

60、要返回DOS 处,安排处,安排(npi)指令:指令: MOV AH, 4CH INT 21H 执行完执行完4CH的功能调用,即返回的功能调用,即返回DOS 。例例 code SEGMENT ASSUME CS: codestart: 、 ;程序程序(chngx)主体部分主体部分 、 、 MOV AH, 4CH ;返回返回DOS INT 21Hcode ENDS END start第44页/共77页第四十五页,共77页。46code SEGMENT ASSUME CS: codestart: . . . . MOV AH, 4CH ;返回返回(fnhu)DOS INT 21H code ENDS

61、 END start MOV CX , 8 ;显示字符个数为显示字符个数为8next: SHL BL , 1 ;将显示位移至将显示位移至CF中中 JC one ;CF=1? MOV DL , 30H ;CF=0, 将将0的的ASCII放在放在DL中中 JMP exitone: MOV DL , 31H ;CF=1, 将将1的的ASCII放在放在DL中中exit: MOV AH , 2 INT 21H ;调用调用DOS功能功能(gngnng)显示显示 DEC CX ;循环次数减循环次数减1 JNZ next ;判断是否结束判断是否结束MOV BL, 53H ;设置一个设置一个(y )测试测试53

62、h第45页/共77页第四十六页,共77页。47D:MASM ShowBL; 汇编汇编(hubin)成成ShowBL.objMicrosoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. 48912 + 447243 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsD:LINK ShowBL; 连接成连接成ShowBL.exe Microsoft (R) Overlay Linker Ver

63、sion 3.61Copyright (C) Microsoft Corp 1983-1987. All rights reserved.LINK : warning L4021: no stack segmentD:ShowBL 装载并执行装载并执行ShowBL.exe01010011D:masm第46页/共77页第四十七页,共77页。48D:DEBUG ShowBL.exe ;用DEBUG装入程序(chngx)-U 0B5E:0000 B90800 MOV CX,00080B5E:0003 D0E3 SHL BL,10B5E:0005 7205 JB 000C0B5E:0007 B230

64、MOV DL,300B5E:0009 EB03 JMP 000E0B5E:000B 90 NOP0B5E:000C B231 MOV DL,310B5E:000E B402 MOV AH,020B5E:0010 CD21 INT 210B5E:0012 49 DEC CX0B5E:0013 75EE JNZ 00030B5F:0015 B44C MOV AH,4C0B5F:0017 CD21 INT 21-第47页/共77页第四十八页,共77页。49code SEGMENT ASSUME CS: codestart: ;程序主体部分程序主体部分 . . . MOV AH, 4CH ;返回返回D

65、OS INT 21Hcode ENDS END start一个完整汇编程序的基本框架一个完整汇编程序的基本框架:第48页/共77页第四十九页,共77页。50DOS的装入功能的装入功能 (又称又称EXEC系统功能系统功能) 可执行可执行(zhxng)文件文件.exe,应装入内存方能执行,应装入内存方能执行(zhxng)。 由由DOS的装入功能完成。的装入功能完成。 在在DOS的提示符后输入可执行的提示符后输入可执行(zhxng)文件的文件名,文件的文件名, 按回车键,按回车键,DOS系统即调用装入功能系统即调用装入功能 , 将可执行将可执行(zhxng)程序装入内存。程序装入内存。第49页/共7

66、7页第五十页,共77页。51内内 存存256KB ROM0000:0000H0040:0000H A000:0000H C800:0000H FE00:0000HFE00:1FFFH H640KB RAM 基基本本内内存存显显示示器器显显示示缓缓存存区区ROM BIOS系系统统检检测测程程序序IO.SYS 模模块块COMMAND.COM常常驻驻模模块块MSDOS.SYS 模模块块用用户户程程序序空空间间COMMAND.COM暂暂驻驻模模块块DOS 工工作作区区BIOS 工工作作区区1KB 中中断断向向量量表表128KB RAM 保保留留区区DOS其其他他系系统统程程序序磁磁 盘盘应应用用程程序序IO.SYSCOMMAND.COMMSDOS.SYS引引导导程程序序EDIT.EXEMASM.EXELINK.EXEDEBUG.exehello.asmhello.objhello.exescans.asmscans.objscans.exe第50页/共77页第五十一页,共77页。52完成以下操作:完成以下操作: 确定内存可用部分,确定内存可用部分, 以便存放要执行的以便存放要执行的 .exe

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!