04第四章汇编语言程序设计

上传人:e****s 文档编号:251859985 上传时间:2024-11-10 格式:PPT 页数:46 大小:327.50KB
返回 下载 相关 举报
04第四章汇编语言程序设计_第1页
第1页 / 共46页
04第四章汇编语言程序设计_第2页
第2页 / 共46页
04第四章汇编语言程序设计_第3页
第3页 / 共46页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 汇编语言程序设计,汇编语言Assemble Language:一种面向CPU的程序设计语言,为特定的处理器或处理器系列而专门设计,是一种低级程序设计语言。,机器语言:CPU能够直接识别和执行的语言。,汇编语言程序翻译成机器语言程序的过程称为汇编。,完成汇编任务的程序叫做汇编程序Assembler.,汇编语言程序的优点:,可充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少程序规模。,常用来编写实时控制程序、实时通信程序、某些系统软件。,缺点:,编程效率低,与自然表达方式相差大;,程序移植性差,在一种结构的机器上开发的程序很难移植到另一种不同结构的机器上去。,1、8086汇编语言程序结构举例,DATA SEGMENT,;,定义一个段,名字为DATA,SUM DB 14H;,定义字节单元,TAB DW 100 DUP(0);,定义100个字单元,DATA ENDS;,段定义结束,STCK SEGMENT,STACK,DW 500 DUP(?),STCK ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,SS:STCK,4-1 8086系列汇编语言程序结构,START:MOV AX,DATA;DATA段地址传送AX,MOV DS,AX;赋给数据段存放器,MOV AX,STCK;STACK段地址传送AX,MOV SS,AX;赋给堆栈段存放器,CYCLE:MOV AL,01H,ADD SUM,AL,CMP SUM,100,JNZ CYCLE,MOV AL,SUM,CODE ENDS,END START,2、8086汇编语言源程序的格式,一个汇编源程序由多个段构成。,其一般格式为,NAME1,SEGMENT,语句,NAME1,ENDS,NAME2,SEGMENT,语句,NAME2,ENDS,END,标号,由多个段组成;,每个段有一个名字;,以符号,SEGMENT,作为段定义的开始,以,ENDS,作为段的结束;,整个源程序以语句,END,标号,结束;,4-2 语句的构成,4-2-1 语句的种类与格式,1、语句分为两类:,指令语句,和,指示性语句,。,指令语句,:在汇编时生成目标代码,对应机器的某种操作。如,MOV AX,,,DATA,指示性语句,:也叫,伪指令语句,,汇编时不生成目标代码,只是用来指示、引导汇编程序在汇编过程中完成一些操作。如,SUM DB 34H,2、语句的格式,指令语句的格式为:,标号:指令;注释,例如 CYCLE:ADD SUM,AL;两数相加,伪指令语句的格式:,名字 定义符 参数1,参数2,;注释,例如 DATA SEGMENT;段定义,SUM DB 34H;定义字节,3、几点说明,指令语句的标号后用“:分隔,指示性语句的名字之后为空格分隔。,指令语句的标号代表该指令的存放地址,即符号地址。在汇编时,将符号地址替换为实际地址。,指令语句的标号可任选或省略;而伪指令的名字可能是强制的、任选的或禁止的,不同语句有不同规定。,标号或名字可由最多31个字母、数字及字符?_$等组成,不能以数字开头。,注释局部用“;分隔,对语句功能加以说明,以提高程序可读性。注释可有可无。,8086系列汇编程序定义了5种指示性语句,一符号定义语句,1、等值语句EQU,格式:名字 EQU 符号或表达式,如 A EQU 2,COUNT EQU CX,功能:用名字代替右边的符号或表达式。目的是提高程序的可读性。在汇编时,汇编程序自动用被等值量代入。,4-3 指示性语句Directive Statements,2、解除语句PURGE,格式:PURGE 名字1,名字2,,如 PURGE A,SIZE,COUNT,功能:对EQU定义的语句,用该语句解除定义。,二数据定义语句DB/DW/DD,名字 DB/DW/DD 表达式1,表达式2,,功能:为数据项分配存储单元,用一个符号名代表这个存储单元偏移地址,并为这个数据项提供一个初值;,DB 定义字节;DW 定义字;,DD 定义双字32位;,如,MYDATA SEGMENT,ARRAY DB 10,7,3,5,sim DB A,B,BUF DW?,1234H,MYDATA ENDS,10,2,3,4,指定的MYDATA段中,SIM,BUF,SIM+1,存储器,ARRAY,A,B,34H,ARRAY+1,ARRAY+2,ARRAY+3,BUF+2,12H,?,?,符号名可任选或省略;,表达式可以是,:1),常数,;,2),?,,表示不确定初值;,3),字符串,,用,表示,其数值为字符的,ASCII,码值;,4),重复子句,重复次数为,DUP,;,如,AREA,DW,100,DUP,(?),;,重复定义,100,个字单元,TABLE,DB,100,DUP,(5,DUP,(4),7),;,4,4,4,4,4,7;,重复,100,次字节定义,TABLE1,DB,100,DUP,(2,?,5 DUP(4),7),;,Tab,dd,100,dup,(200,dup,(300,dup,(0),例:定义字节型一维数组变量X、Y、Z,元素为10个;再定义二维数组W和简单变量S。令,X=31H,32H,33H 3AH、,Y=9FH,8EH,7DH 06H、,Z=X+Y;,二维数组,变量,编写程序实现上述功能。,Data segment,X db 10 dup(?),Y db 10 dup(?),Z db 10 dup(00h),W db 2 dup(10 dup(?),S dw 00h,Data ends,Code segment,assume cs:code,ds:data,st:mov ax,data,mov ds,ax,lea si,X,lea di,Y,mov al,31h,mov ah,0,mov cx,10,mov bl,9fh,rept:mov si,al,add S,ax,mov di,bl,mov di+20,al,mov di+30,bl,add al,bl,mov 10di,al,mov al,si,inc al,inc si,inc di,sub bl,11h,dec cx,jnz rept,Code ends,End st,三段定义语句,1段定义,一个段由命令SEGMENT开始,由命令ENDS结束,它们必须成对出现;段必须有名字强制的。,格式,NAME SEGMENT,NAME ENDS,段的名字NAME代表该段的段地址。,2ASSUME,格式:ASSUME 段存放器:段名,,段存放器可以是:CS,DS,SS,ES,出现在代码段中,指示汇编程序在该段程序中使用哪些被定义的段,每个段分别属于什么段。,ASSUME命令并不能给段存放器赋值,程序中仍需要对段存放器赋值代码段除外。,四过程PROCEDURE定义语句,格式:,NAME PROC,RET,NAME ENDP,NAME为过程名。,当过程被定义为NEAR属性时,该过程只能被段内的主程序调用;当被定义为FAR属性时,可被其他代码段的程序调用。可省略,默认为NEAR属性。,五结束语句,END 指令语句标号,指令语句标号表示当程序执行时,第一条要执行的指令的标号。,4-4 语句的表达方式,1、常量,8086汇编语言可采用数字常量和字符串常量。,数字常量 可用二进制B、八进制Q,十六进制H、十进制D表示,字符串常量。用 表示,如A、JUMP,其数值为字符的ASCII码值。,2、标识符,如伪指令语句的名字段名、过程名、变量名、指令语句的标号等,由程序员自由建立。,标识符最多31个字母、数字及特殊符号?_$组成,不能用数字开头。,3、保存字,不能用保存字做标识符。,4、变量,用DB、DW等伪指令定义的存储器操作数,变量值可在程序中使用和改变。,如定义变量 VAR1 DB?,在程序中可以有:,MOV VAR1,AL,ADD VAR1,21H,变量有,3,种属性:,段值、偏移量、类型,类型可以是,字节、字、双字,等,5,、标号,指示某指令的存放地址。,标号与变量都是存储单元的,符号地址,,但标号对应单元存放指令,变量对应单元存放数据。,标号也有三种属性:,段值、偏移量、类型,但标号的类型是,NEAR,和,FAR,。,6、表达式,由标识符与运算符组合的序列,在汇编时能够产生一个数值,如 SUM+7,CYCLE*2-8;,运算符包括算术运算符、逻辑运算符、分析运算符和合成运算符,1算术运算符,+、-、*、/,如 mov ax,10-6;结果ax的内容为4,2逻辑运算符,AND、OR、NOT、XOR,3关系运算符,EQ、NE、LT、GT、LE、GE,如 PROT_A LT 6,,假设关系为真,结果全1;假设关系为假,全0,4分析运算符,SEG,格式:SEG 变量或标号,返回地址操作数所在段的段地址,如 MOV AX,SEG CYCLE,OFFSET,格式:OFFSET 变量或标号,功能:返回地址操作数的段内偏移地址。,如 MOV AX,OFFSET CYCLE,TYPE,格式:TYPE 变量,功能:返回变量定义的字节数,如 ABC DD?,56,3,MOV AX,TYPE ABC,那么 AX=4,举例:,DATA SEGMENT,BUF1 DB 100H DUP(1),BUF2 DW 100H DUP(2),BUF3 DD 100H DUP(3),DATA ENDS,假设DATA段的段地址为3000H,BUF1的偏移地址为1000H,那么分别执行以下指令后(AX)=?各属于何种寻址方式?,MOV AX,DATA,MOV AX,SEG BUF2,MOV AX,OFFSET BUF2,MOV AX,OFFSET BUF3,MOV AX,BUF2,Add buf2+2,ax,MOV AX,TYPE BUF2,5合成运算符,PTR,格式:属性 PTR 变量或标号 byte,word,功能:将左边的属性赋给右边的变量或标号,如 MOV word PTR BX,10H,JMP FAR PTR LOOP1,段超越,格式:段存放器:变量或地址,如 MOV AX,ES:BX,MOV AX,DS:BP,MOV AX,SS:BUF2,4-5 汇编语言程序设计举例,例1:根本编程,将数据段SAV为偏移首地址的存储单元的内容分别送到AX,BX,CX和DX,程序清单:,data segment,savdw 1000h,dw 2000h,dw 3000h,dw 4000h,data ends,codesegment,assume cs:code,ds:data,start:,mov ax,data,mov ds,ax,lea si,sav (,或 mov si,offset sav,),mov ax,si,mov bx,2si,mov cx,4si,mov dx,6si,code ends,end start,假设将附加段SAV为偏移首地址的存储单元的内容分别送到AX,BX,CX和DX,如何实现?,一种方法是段超越;另一种方法是将数据段定义为与附加段重叠。,例2:编程实现两个32位无符号数12345678h和1357abcdh相乘。,设两个数分别为AB和CD,那么有,AB,CD,B*D,A*D,+B*C,A*C,Data segment,mlt1 dw 5678h,1234h,mlt2 dw abcdh,1357h,prd dw 4 dup(0),data Ends,Code segment,assume cs:code,ds:data,start:mov ax,data,mov ds,ax,lea bx,mlt1,lea si,mlt2,lea di,prd,mov ax,bx,mul si,mov di,ax,mov 2di,dx,mov ax,2bx,mul si,add 2di,ax,adc 4di,dx,mov ax,bx,mul 2si,ad
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


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

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


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