![汇编语言程序结构剖析_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/b712f9cc-af1d-4fd6-af6d-a521a645beae/b712f9cc-af1d-4fd6-af6d-a521a645beae1.gif)
![汇编语言程序结构剖析_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/b712f9cc-af1d-4fd6-af6d-a521a645beae/b712f9cc-af1d-4fd6-af6d-a521a645beae2.gif)
![汇编语言程序结构剖析_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/b712f9cc-af1d-4fd6-af6d-a521a645beae/b712f9cc-af1d-4fd6-af6d-a521a645beae3.gif)
![汇编语言程序结构剖析_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/b712f9cc-af1d-4fd6-af6d-a521a645beae/b712f9cc-af1d-4fd6-af6d-a521a645beae4.gif)
![汇编语言程序结构剖析_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/b712f9cc-af1d-4fd6-af6d-a521a645beae/b712f9cc-af1d-4fd6-af6d-a521a645beae5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序设计刘辉 王勇 徐建平 编著清华大学出版社清华大学出版社参考资料参考资料1.IBM-PC 1.IBM-PC 汇编语言程序设计汇编语言程序设计 ( (第第2 2版)版)沈美明沈美明 温冬婵温冬婵 清华大学出版社清华大学出版社2.2.汇编语言汇编语言 王爽王爽 编著编著 清华大学出版社清华大学出版社计算机语言的发展计算机语言的发展 机器语言机器语言FORTRANFORTRANBASICBASICCOBOLCOBOLPASCALPASCALC/C+C/C+JAVAJAVA.汇编语言汇编语言高级语言高级语言计算机语言的发展经历了机器语言、汇编语言到高级语言的发展过程。机器语言使用0,1书写
2、的二进制代码,难于书写和纠错;汇编语言使用接近于人类的语言对计算机的硬件直接发号施令,让内部的各个部件直接进行各种运算;而高级语言程序的书写更简单,但是各个函数之间的参数传递比较复杂,逻辑结构性强。汇编语言的特点汇编语言的特点 面向机器的低级语言,通常是为特定的计算面向机器的低级语言,通常是为特定的计算 机或计算机系列机或计算机系列专门设计的。专门设计的。 保持了机器语言的优点,具有直接和简捷保持了机器语言的优点,具有直接和简捷 的特点。的特点。 可有效地访问、控制计算机的各种硬件设备可有效地访问、控制计算机的各种硬件设备, , 如磁盘、存储器、如磁盘、存储器、CPUCPU、I/OI/O端口等
3、。端口等。 目标代码简短,占用内存少,执行速度快,目标代码简短,占用内存少,执行速度快, 是高效的程序设计语言。是高效的程序设计语言。 经常与高级语言配合使用,应用十分广泛经常与高级语言配合使用,应用十分广泛。1.1 汇编语言程序的结构形式汇编语言程序的结构形式1.2 汇编语言的各种伪指令汇编语言的各种伪指令1.3 masm的上机操作步骤的上机操作步骤第第1章章 汇编语言程序基本知识汇编语言程序基本知识1.1 汇编语言程序的结构形式汇编语言程序的结构形式#include stdafx.h #include stdio.h int main(int argc, char* argv) /程序从程
4、序从 主函数开始主函数开始 int a,b,c; /定义变量定义变量 a=1; b=2; /直接给变量赋值直接给变量赋值 c=a+b; /计算累加结果计算累加结果 printf(“c=%dn”,c); /输出结果输出结果 return 0; 编译后的目标文编译后的目标文件达到件达到3.59KBdata data segment segment ; ;定义数据段定义数据段 a a db db ? ;? ;定义变量定义变量 b b db ?db ? c c db ?db ? string string db c=$db c=$data endsdata endscode segment code
5、segment ;定义代码段main main proc proc far far ;主程序从此开始 assume assume cs:code, ds:data, es:datacs:code, ds:data, es:datastartstart: : push dspush ds sub sub ax,axax,ax汇编后的目汇编后的目标文件只有标文件只有208208字节字节 push ax push ax mov ax,data mov ax,data mov ds,ax mov ds,ax ; ;数据段的地址装入专用寄存器数据段的地址装入专用寄存器 mov es,ax mov es,
6、ax mov a,1 ; mov a,1 ;给变量赋值给变量赋值 mov b,2 mov b,2 mov al,a mov al,a add al,b add al,b ;a+ba+b mov c,al ; mov c,al ;运算结果存入运算结果存入c c变量中变量中 lea dx,string lea dx,string mov ah,09 mov ah,09 int 21h ; int 21h ;输出字符串输出字符串add c,30h add c,30h ; ;整数转化为字符,因为汇编输出都是字符整数转化为字符,因为汇编输出都是字符mov dl,cmov dl,cmov ah,2mov
7、ah,2int 21h int 21h ; ;输出输出dldl中字符中字符 , ,这是这是2121号中断的功能调用号中断的功能调用mov dl,0ahmov dl,0ahint 21h ;int 21h ;换行换行mov dl,0dhmov dl,0dhint 21h int 21h ;回车;回车retretmain endpmain endpcode endscode ends end start end start汇编语言与高级语言的比较 高级语言书写简单,不需知道硬件的详细操作过程,易于掌握 汇编语言需要程序员定义变量的存放位置,直接对硬件进行编程,需要对硬件进行详细的设计,所以有一定的
8、难度。汇编语言的应用汇编语言的应用系统程序、效率代码、系统程序、效率代码、I/OI/O驱动程序驱动程序70%70%以上的系统软件是用汇编语言编写的。以上的系统软件是用汇编语言编写的。 某些快速处理、位处理、访问硬件设备等某些快速处理、位处理、访问硬件设备等 高效程序是用汇编语言编写的。高效程序是用汇编语言编写的。 高级绘图程序、视频游戏程序一般是用汇高级绘图程序、视频游戏程序一般是用汇 编语言编写的。编语言编写的。例例2. 2. 在屏幕上显示字符串在屏幕上显示字符串”This is an ”This is an assembly language program!”assembly langu
9、age program!”题目分析:a. 字符串应存放在一个存储单元中,也即一个变量中,这要在数据区中加以定义b. 在代码段中,首先把程序中用到的各个段与相应的寄存器名对应起来,这要用到assume伪操作c. 调用dos中断显示字符串,中断执行前先做显示的准备操作:数据段的地址存入ds寄存器;从数据区的存储单元中取出要显示的字符串的存放地址存入dx寄存器;执行中断操作,显示DS:DX中的内容汇编程序如下:;ex102.asm display a string data segment data segment ;定义数据段 str db This is an assembly str db T
10、his is an assembly language program!,$,13,10 language program!,$,13,10 ;在str存储单元中的字符串内容data endsdata endscode segment code segment ;定义代码段main proc far main proc far ;主程序从此开始 assume cs:code,ds:data assume cs:code,ds:data ;指派程序中实际定义的各个段与对应的寄存器的联系start: start: ; ;语句标号语句标号 push ds push ds ;保护原有的数据段内容到堆栈
11、段中 sub ax,ax sub ax,ax ;存储一个0值,表示新程序的数据开始存放 push ax push ax mov ax,data mov ax,data ;先把数据段的地址临时存入ax寄存器中 mov ds,ax mov ds,ax ;再把地址存入数据段寄存器中 lea dx,str lea dx,str ;取出要显示的字符串的偏移地址存入dx寄存器 mov ah,09h mov ah,09h int 21h int 21h ;调用dos中断,显示DS:DX中的内容exit: ;exit: ;主要功能执行完毕,返回主要功能执行完毕,返回dosdos界面界面 mov ax,4c00
12、h mov ax,4c00h int 21h int 21hmain endp main endp ;主程序到此结束 code ends code ends ;代码段到此结束 end start end start ;汇编程序到此结束,与前面的start相对应例例3. 求两个数中的最大值求两个数中的最大值题目分析:题目分析:a. 现在数据区中定义两个变量并赋值现在数据区中定义两个变量并赋值b.在程序中比较这两个变量的大小,在程序中比较这两个变量的大小,把较大的值存放在存储单元把较大的值存放在存储单元max中中程序如下:程序如下:; ;简短模式书写的程序简短模式书写的程序.MODEL TINY
13、.MODEL TINY ;定义程序模型.DATA .DATA ;定义数据段 X DB -8 X DB -8 ;定义变量名称及具体数值 Y DB 10 Y DB 10 MAX DB ? MAX DB ? ;只分配存储空间,没有值.CODE.CODESTARTUP:STARTUP: MOV AX,DATA MOV AX,DATA ;预定义符data可以取出数据段的段名 MOV DS,AX MOV DS,AX MOV AL,X MOV AL,X ;把X的值预存入AX寄存器的低8位AL中 MOV CL,Y MOV CL,Y ;把Y的值预存入CX寄存器的低8位CL中 CMP AL,CL CMP AL,C
14、L ;比较AL和CL寄存器的数值大小 JGE BIG JGE BIG ;如果AL=CL,则跳转到BIG标号处;否则,即ALCL,顺序执行下述语句 MOV MAX,CL MOV MAX,CL ;把较大值CL存入MAX单元中 JMP EXIT JMP EXIT BIG: BIG: MOV MAX,AL MOV MAX,AL ;把较大值AL存入MAX单元中 EXIT: EXIT: MOV AX,4C00H MOV AX,4C00H ;返回dos界面 INT 21H INT 21HEND STARTUPEND STARTUP通过上述一些例子,可以大致了解汇通过上述一些例子,可以大致了解汇编语言程序的构
15、成,了解程序的书写编语言程序的构成,了解程序的书写形式,及常用的几个语句,后面分章形式,及常用的几个语句,后面分章节详细介绍汇编程序的结构构成及各节详细介绍汇编程序的结构构成及各种指令格式种指令格式1.2 汇编语言的各种伪指令汇编语言的各种伪指令 1.2.1 数据定义伪指令数据定义伪指令 数据定义伪指令的用途是定义一个变量的类型,给变量赋初值,或仅仅给变量分配存储单元 数据定义伪指令有DB、DW、DD、DF、DQ、DT 例1.4 数据定义伪操作的使用 DATA DB 1,2H EXPR DW 1,2 STR DB WELCOM! S1 DW AB S2 DD AB OFFAB DW S1存储单
16、元名称存储单元名称内存中的数据内存中的数据内存的地址内存的地址DATA010100H020101HEXPR010102H000103H020104H000105HSTR57 W0106H45 E0107H4c L0108H43 C0109H4F O010AH4D M010BH21 !010CHS1S142 42 B B010DH010DH41 A010EHS242 B010FH41 A0110H0 0111H00112HOFFAB0D0113H010114HFILLERFILLERDB ?DB ?给字节变量给字节变量FILLER分配存储单元,但不分配存储单元,但不赋予特定的值赋予特定的值BUF
17、FERDB 10 DUP(?)给变量BUFFER分配10个字节的存储空间,但不赋任何初值ZERODW 30 DUP(0)给变量ZERO分配一个数据区,共30个字(即60字节),每个字的内容均为零MASKDB 5 DUP(OK!)定义一个数据区,其中有5个重复的字符串OK!ARRAYDB 100 DUP(3 DUP(8),6)将变量ARRAY定义为一个数据区,其中包含重复100次的内容:8,8,8,6,共占400个字节1.2.2 符号定义伪指令符号定义伪指令 常用的符号定义伪指令有EQU、(等号)和LABLE。 EQU伪指令将表达式的值赋予一个名字,以后可用这个名字来代替上述表达式CRCR EQ
18、U EQU 0DH 0DH ;常数;常数A EQU ASCII_TABLE ;变量STR EQU 64*1024 ;数值表达式ADR EQU ES:BP+DI+5 ;地址表达式CBD EQU AAM;指令助记符1.2.3 段定义伪指令段定义伪指令 段定义伪指令的用途是在汇编语言源程序中定义逻辑段。常用的段定义伪指令有SEGMENT/ENDS和ASSUME等 。 1SEGMENT/ENDS 格式: 段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS 2. ASSUME 格式:ASSUME 段寄存器名:段名,段寄存器名:段名, 例1.6 代码段的定义举例。 CODE SEGMENTAS
19、SUME CS:CODE,DS:DATA1,SS:STACKMOV AX,DATA1MOV DS,AX ;给DS赋值MOV AX,STACKMOV SS,AX ;给SS赋值 CODE ENDS 1.2.4 地址计数器与对准伪操作地址计数器与对准伪操作 1. 地址计数器地址计数器$ arr dw 1,2,$+4,3,4,$+6 则汇编后的存储单元如下图1.1所示:arrarr0101007400740000750200760000777c007800007903007a00007b04007c00007d82007e00007f2. ORG 伪操作伪操作 ORG 伪操作用来设置当前地址计数器的值
20、,例如下述数据段的定义: 例1.7 ORG伪操作的使用举例。 DATA SEGMENT ORG 100H VAL DW 345BH ;存储单元VAL在DATA段中的偏移地址从100H开始 DATA ENDS3. EVEN伪操作伪操作 EVEN伪操作使下一个变量或指令开始于偶数地址。 例1.8 EVEN伪操作的使用举例。 DATA SEGMENT EVEN VAL DW 345BH ;存储单元VAL在DATA段中的偏移地址从偶数地址开始 DATA ENDS1.2.5 操作数伪操作操作数伪操作 1. 算术操作符算术操作符 算数操作符有+ 、-、 *、 / 和 MOD。MOD是指整除运算后取余数 例
21、如:MOV dx,block +( 6 - 1)*2 2. 逻辑与移位操作符逻辑与移位操作符 逻辑操作符有AND、OR、XOR、NOT,移位操作符有SHL和 SHR,详见第3章。 3. 关系操作符关系操作符 关系操作符EQ(相等),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于)。运算结果是逻辑值真或假。真用0FFFFH表示,假用0表示。 4. 数值回送操作符数值回送操作符 这些操作符把一些特征值或存储器地址的一部分作为结果回送。 1)TYPE:返回变量的字节数,如果变量为DB格式定义的,则返回1;若以DW定义,则返回2;DD为4,DQ为8,DT为10。 2)L
22、ENGTH :对于数据段中定义变量时使用DUP的情况,汇编程序回送分配给该变量的单元数,对于其它情况则回送1。 例1.9 定义 s1 dw 100 dup(?) 指令mov cx,length s1, 汇编后成为mov cx,100 3)SIZE : 回送分配给变量的字节数,它等于LENGTH和TYPE 的乘积 例1.10 定义s1 dw 100 dup(?) 指令 mov cx,size s1 ,则汇编后成为mov cx, 200 4)OFFSET:回送变量或标号的偏移地址 例1.11 指令 mov bx,offset s1,汇编程序将变量s1在数据段中的偏移地址回送给指令,该指令将这个偏移
23、地址装入BX寄存器。这条指令与指令LEA BX, s1 是等价的。 5)SEG :回送变量或标号的段地址 例1.12 指令 MOV BX , SEG DATA ,把名字为DATA的段地址装入BX寄存器5. 属性操作符属性操作符 1)PTR 格式为 type PTR expre ,用于建立一个符号地址,给已分配的存储地址赋予另一个属性,是该地址具有另一种属性 例1.13 在数据段中定义 a db 1 在代码段中有如下指令 MOV AX, WORD PTR a 则汇编程序把变量a 中的数据以word的形式装入AX寄存器。 2)段跨越前缀:)段跨越前缀: 段跨越前缀用来指定段名称,在计算地址时使用指定的段地址和偏移地址而不是使用默认的段地址。 例如指令“MOV AX,ES: BX + SI ”,把附加段中偏移地址为BX + SI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代学生餐厅的照明与色彩搭配艺术
- 深度解读网络舆情的来源与影响研究报告解读分享
- 现代金融行业中的移动支付技术与教育普及
- 快手国庆节的活动方案
- 国庆假期活动方案
- 国庆节酒店涨价活动方案
- 2、3、4的乘法口诀(说课稿)-2024-2025学年二年级上册数学人教版
- Unit1 There is a horse in this photo(说课稿)-2024-2025学年外研版(三起)四年级上册001
- 17《他们那时候多有趣啊》(说课稿)-2023-2024学年统编版语文六年级下册
- 13 我能行(说课稿)-统编版(五四制)道德与法治二年级下册
- 2025年广州中医药大学顺德医院(佛山市顺德区中医院)招考聘用高频重点提升(共500题)附带答案详解
- 2025年华侨港澳台学生联招考试英语试卷试题(含答案详解)
- 2025-2030年中国美容院行业营销创新战略制定与实施研究报告
- 2024-2025学年北京石景山区九年级初三(上)期末语文试卷(含答案)
- 第一章 整式的乘除 单元测试(含答案) 2024-2025学年北师大版数学七年级下册
- 2024人教版英语七年级下册《Unit 3 Keep Fit How do we keep fit》大单元整体教学设计2022课标
- 药品流通监管培训
- JD37-009-2024 山东省存量更新片区城市设计编制技术导则
- 中国高血压防治指南(2024年修订版)
- 北京市海淀区重点中学2025届高考数学押题试卷含解析
- 2024EPC施工总包合同范本
评论
0/150
提交评论