【教学课件】第四章汇编语言程序设计.ppt

上传人:牧羊曲112 文档编号:5665115 上传时间:2023-08-07 格式:PPT 页数:46 大小:335.50KB
返回 下载 相关 举报
【教学课件】第四章汇编语言程序设计.ppt_第1页
第1页 / 共46页
【教学课件】第四章汇编语言程序设计.ppt_第2页
第2页 / 共46页
【教学课件】第四章汇编语言程序设计.ppt_第3页
第3页 / 共46页
【教学课件】第四章汇编语言程序设计.ppt_第4页
第4页 / 共46页
【教学课件】第四章汇编语言程序设计.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《【教学课件】第四章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第四章汇编语言程序设计.ppt(46页珍藏版)》请在三一办公上搜索。

1、第四章 汇编语言程序设计,汇编语言(Assemble Language):一种面向CPU的程序设计语言,为特定的处理器或处理器系列而专门设计,是一种低级程序设计语言。机器语言:CPU能够直接识别和执行的语言。汇编语言程序翻译成机器语言程序的过程称为汇编。完成汇编任务的程序叫做汇编程序(Assembler).,汇编语言程序的优点:可充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少程序规模。常用来编写实时控制程序、实时通信程序、某些系统软件。缺点:编程效率低与自然表达方式相差大;程序移植性差在一种结构的机器上开发的程序很难移植到另一种不同结构的机器上去。,1、8086汇编语言程序结构举例

2、 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,

3、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、语句分为两类:指令语句和指示性语句。指令语句:在汇编时生成目标代码,对应机器的

4、某种操作。如 MOV AX,DATA 指示性语句:也叫伪指令语句,汇编时不生成目标代码,只是用来指示、引导汇编程序在汇编过程中完成一些操作。如 SUM DB 34H,2、语句的格式 指令语句的格式为:标号:指令;注释例如 CYCLE:ADD SUM,AL;两数相加伪指令语句的格式:名字 定义符 参数1,参数2,;注释例如 DATA SEGMENT;段定义 SUM DB 34H;定义字节3、几点说明指令语句的标号后用“:”分隔,指示性语句的名字之后为空格分隔。,指令语句的标号代表该指令的存放地址,即符号地址。在汇编时,将符号地址替换为实际地址。指令语句的标号可任选或省略;而伪指令的名字可能是强制

5、的、任选的或禁止的,不同语句有不同规定。标号或名字可由最多31个字母、数字及字符?_$等组成,不能以数字开头。注释部分用“;”分隔,对语句功能加以说明,以提高程序可读性。注释可有可无。,8086系列汇编程序定义了5种指示性语句(一)符号定义语句1、等值语句EQU 格式:名字 EQU 符号或表达式 如 A EQU 2 COUNT EQU CX 功能:用名字代替右边的符号或表达式。目的是提高程序的可读性。在汇编时,汇编程序自动用被等值量代入。,4-3 指示性语句(Directive Statements),2、解除语句PURGE格式:PURGE 名字1,名字2,如 PURGE A,SIZE,COU

6、NT功能:对EQU定义的语句,用该语句解除定义。(二)数据定义语句DB/DW/DD名字 DB/DW/DD 表达式1,表达式2,功能:为数据项分配存储单元,用一个符号名代表这个存储单元偏移地址,并为这个数据项提供一个初值;,DB 定义字节;DW 定义字;DD 定义双字(32位);如 MYDATA SEGMENT ARRAY DB 1,2,3,4 sim DB A,B BUF DW?,1234H MYDATA ENDS,符号名可任选或省略;表达式可以是:1)常数;2)?,表示不确定初值;3)字符串,用 表示,其数值为字符的ASCII码值;4)重复子句,重复次数为DUP;如 AREA DW 100

7、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(00

8、h)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 mov si,offset X mov di,offset Y mov al,31h mov ah,0 mov cx,10,mov bl,9fhrept: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 de

9、c cx jnz reptCode endsEnd st,(三)段定义语句1)段定义 一个段由命令SEGMENT开始,由命令ENDS结束,它们必须成对出现;段必须有名字(强制的)。格式 NAME SEGMENT NAME ENDS 段的名字NAME代表该段的段地址。,2)ASSUME 格式:ASSUME 段寄存器:段名,段寄存器可以是:CS,DS,SS,ES 出现在代码段中,指示汇编程序在该段程序中使用哪些被定义的段,每个段分别属于什么段。ASSUME命令并不能给段寄存器赋值,程序中仍需要对段寄存器赋值(代码段除外)。,(四)过程(PROCEDURE)定义语句格式:NAME PROC NEAR

10、/FAR RET NAME ENDP NAME为过程名。当过程被定义为NEAR属性时,该过程只能被段内的主程序调用;当被定义为FAR属性时,可被其他代码段的程序调用。可省略,默认为NEAR属性。,(五)结束语句 END 指令语句标号指令语句标号表示当程序执行时,第一条要执行的指令的标号。,4-4 语句的表达方式,1、常量8086汇编语言可采用数字常量和字符串常量。数字常量 可用二进制(B)、八进制(Q)十六进制(H)、十进制(D)表示 字符串常量。用 表示,如A、JUMP,其数值为字符的ASCII码值。2、标识符 如伪指令语句的名字(段名、过程名、变量名)、指令语句的标号等,由程序员自由建立。

11、,标识符最多31个字母、数字及特殊符号(?_$)组成,不能用数字开头。3、保留字 不能用保留字做标识符。4、变量 用DB、DW等伪指令定义的存储器操作数,变量值可在程序中使用和改变。如定义变量 VAR1 DB?在程序中可以有:MOV VAR1,AL ADD VAR1,21H,变量有3种属性:段值、偏移量、类型 类型可以是字节、字、双字等5、标号 指示某指令的存放地址。标号与变量都是存储单元的符号地址,但标号对应单元存放指令,变量对应单元存放数据。标号也有三种属性:段值、偏移量、类型 但标号的类型是NEAR和FAR。,6、表达式 由标识符与运算符组合的序列,在汇编时能够产生一个数值 如 SUM+

12、7,CYCLE*2-8;运算符包括算术运算符、逻辑运算符、分析运算符和合成运算符1)算术运算符+、-、*、/如 mov ax,10-6;结果ax的内容为42)逻辑运算符 AND、OR、NOT、XOR,3)关系运算符 EQ、NE、LT、GT、LE、GE 如 PROT_A LT 6,若关系为真,结果全1;若关系为假,全04)分析运算符 SEG 格式:SEG 变量或标号 返回地址操作数所在段的段地址 如 MOV AX,SEG CYCLE,OFFSET 格式:OFFSET 变量或标号功能:返回地址操作数的段内偏移地址。如 MOV AX,OFFSET CYCLETYPE 格式:TYPE 变量功能:返回变

13、量定义的字节数如 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 BUF25)合成运

14、算符 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 segmentsavdw 1000h dw 2000h dw 3000hdw 4000h data ends,codesegmentassume cs:code,d

15、s:datastart:mov ax,datamov ds,axlea si,sav(或 mov si,offset sav)mov ax,si mov bx,2simov cx,4simov dx,6sicode endsend 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,12

16、34h mlt2 dw abcdh,1357h prd dw 4 dup(0)data EndsCode segment assume cs:code,ds:datastart: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 add 2di,ax adc 4di,dx,adc 6di,0 mov ax,2bx mul 2si add 4di

17、,ax adc 6di,dxCode endsEnd start,例3:子程序设计。有32位数据X、Y存于存储器中,用子程序编程求X*Y。主程序与子程序参数传递一般可采用寄存器传递、存储器传递、堆栈传递等方式,Data segment mlt1 dw 5678h,1234h mlt2 dw abcdh,1357h prd dw 4 dup(0)data Ends Stack segment stack db 100 dup(?)Stack ends Code segment assume cs:code,ds:data,ss:stack,Mul32 proc near push ax push

18、 dx 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,add 2di,ax adc 4di,dx pushf mov ax,2bx mul 2si popf adc 6di,0 add 4di,ax adc 6di,dx pop dx pop ax retMul32 endp,start:mov ax,data mov ds,ax mov ax,stack mov ss,ax lea bx,mlt1;被乘数地址 lea si,mlt2;乘数地址 le

19、a di,prd;乘积地址 call Mul32 Code endsEnd start,例4 串传送程序在数据段中建立26个字母的码值,再复制一份.data segment letter db a srcdb 26 dup(?);存放字母码值 dstdb 26 dup(?);复制一份 data ends code segment assume cs:code,ds:data,es:datastart:mov ax,data mov ds,ax mov es,ax lea si,src,mov al,letter mov cx,26 bld:mov si,al inc si inc al loo

20、p bld;建立26个字母的码值lea si,srclea di,dstcldmov cx,26rep movsb;完成复制codeendsend start,例5、将给定的字符串A computer language!中的小写字母转换成相应的大写字母datasegmentmess db A computer language!count equ$-mess;字符串的长度dataendscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axlea bx,messmov cx,count,case1:mov al,bxcmp al

21、,ajb case2;若低于a跳转cmp al,zja case2;若高于z跳转sub al,20hcase2:mov bx,alinc bxdec cxjne case1code endsend start,例6、已知 CHR 字节单元有一个二进制有符号数 X,编程计算 Y,其结果存入 PQ 单元中.,datasegmentchr db?pq db?x equ chr y equ pqdata endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov al,x cmp al,5 jnl l1 shl al,1;若5,将x*4,shl al,1 jmp l3l1:cmp al,20;若=5,再与20比较jnl l2mov bl,7imul blsub al,8jmp l3l2:mov al,50;若=20,将50送pql3:mov y,al codeendsend start,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号