欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:69885744       资源大小:335.50KB        全文页数:46页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第四章第四章 汇编语言程序设计汇编语言程序设计 汇汇编编语语言言(Assemble Assemble LanguageLanguage):一一种种面面向向CPUCPU的的程程序序设设计计语语言言,为为特特定定的的处处理理器器或或处处理理器器系列而专门设计,是一种低级程序设计语言。系列而专门设计,是一种低级程序设计语言。机器语言:机器语言:CPUCPU能够能够直接直接识别和执行的语言。识别和执行的语言。汇汇编编语语言言程程序序翻翻译译成成机机器器语语言言程程序序的的过过程程称称为为汇编汇编。完完 成成 汇汇 编编 任任 务务 的的 程程 序序 叫叫 做做 汇汇 编编 程程 序序(AssemblerAssembler).汇编语言程序的优点:汇编语言程序的优点:可充分利用机器的硬件功能和结构特点,可充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少程序规模。加快程序的执行速度,减少程序规模。常用来编写实时控制程序、实时通信程序、常用来编写实时控制程序、实时通信程序、某些系统软件。某些系统软件。缺点:缺点:编程效率低编程效率低与自然表达方式相差大;与自然表达方式相差大;程序移植性差程序移植性差在一种结构的机器上开发在一种结构的机器上开发的程序很难移植到另一种不同结构的机器的程序很难移植到另一种不同结构的机器上去。上去。1、8086汇编语言程序结构举例汇编语言程序结构举例 DATA SEGMENTDATA SEGMENT;定义一个段,名字为定义一个段,名字为DATADATA SUM DB 14H SUM DB 14H;定义字节单元定义字节单元 TAB DW 100 DUP(0);TAB DW 100 DUP(0);定义定义100100个字单元个字单元 DATA ENDSDATA ENDS;段定义结束段定义结束 STCK SEGMENT STCK SEGMENT STACKSTACK DW 500 DUP(?)DW 500 DUP(?)STCK ENDSSTCK ENDS CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STCK ASSUME CS:CODE,DS:DATA,SS:STCK4-1 8086系列汇编语言程序结构系列汇编语言程序结构START:MOV AX,DATASTART:MOV AX,DATA;DATADATA段地址传送段地址传送AXAX MOV DS,AX MOV DS,AX;赋给数据段寄存器赋给数据段寄存器 MOV AX,STCK MOV AX,STCK;STACKSTACK段地址传送段地址传送AXAX MOV SS,AX MOV SS,AX;赋给堆栈段寄存器赋给堆栈段寄存器CYCLE:MOV AL,01HCYCLE:MOV AL,01H ADD SUM,AL ADD SUM,AL CMP SUM,100 CMP SUM,100 JNZ CYCLE JNZ CYCLE MOV AL,SUM MOV AL,SUM CODE ENDSCODE ENDS END STARTEND START2、8086汇编语言源程序的格式汇编语言源程序的格式一个汇编源程序由多个段构成。一个汇编源程序由多个段构成。其一般格式为其一般格式为 NAME1 NAME1 SEGMENTSEGMENT 语句语句 NAME1 NAME1 ENDSENDS NAME2 NAME2 SEGMENTSEGMENT 语句语句 NAME2 NAME2 ENDSENDS ENDEND 标号标号由多个段组成;由多个段组成;每个段有一个名字;每个段有一个名字;以符号以符号SEGMENTSEGMENT作为段定义的开始,以作为段定义的开始,以ENDSENDS作作为段的结束;为段的结束;整个源程序以语句整个源程序以语句 END END 标号标号 结束;结束;4-2 语句的构成语句的构成 4-2-1 语句的种类与格式语句的种类与格式1 1、语句分为两类:、语句分为两类:指令语句指令语句和和指示性语句指示性语句。指令语句指令语句:在汇编时生成目标代码,对应机器:在汇编时生成目标代码,对应机器的某种操作。如的某种操作。如 MOV AXMOV AX,DATADATA 指示性语句指示性语句:也叫:也叫伪指令语句伪指令语句,汇编时不生成,汇编时不生成目标代码,只是用来指示、引导汇编程序在汇编目标代码,只是用来指示、引导汇编程序在汇编过程中完成一些操作。如过程中完成一些操作。如 SUM DB 34HSUM DB 34H2 2、语句的格式、语句的格式 指令语句的格式为:指令语句的格式为:标号标号:指令指令;注释注释例如例如 CYCLE:ADD SUM,AL CYCLE:ADD SUM,AL;两数相加;两数相加伪指令语句的格式:伪指令语句的格式:名字名字 定义符定义符 参数参数1 1,参数,参数2 2,;注释注释例如例如 DATA SEGMENTDATA SEGMENT;段定义段定义 SUM DB 34HSUM DB 34H;定义字节定义字节3 3、几点说明、几点说明指令语句的标号后用指令语句的标号后用“:”分隔,指示性语句分隔,指示性语句的名字之后为空格分隔。的名字之后为空格分隔。指令语句的标号代表该指令的存放地址指令语句的标号代表该指令的存放地址,即符即符号地址。在汇编时,将符号地址替换为实际号地址。在汇编时,将符号地址替换为实际地址。地址。指令语句的标号可任选或省略;而伪指令的名指令语句的标号可任选或省略;而伪指令的名字可能是强制的、任选的或禁止的,不同语字可能是强制的、任选的或禁止的,不同语句有不同规定。句有不同规定。标号或名字可由最多标号或名字可由最多3131个字母、数字及字符个字母、数字及字符?_$_$等组成,不能以数字开头。等组成,不能以数字开头。注释部分用注释部分用“;”分隔,对语句功能加以说明,分隔,对语句功能加以说明,以提高程序可读性。注释可有可无。以提高程序可读性。注释可有可无。80868086系列汇编程序定义了系列汇编程序定义了5 5种指示性语句种指示性语句(一)符号定义语句(一)符号定义语句1 1、等值语句、等值语句EQUEQU 格式:格式:名字名字 EQUEQU 符号或表达式符号或表达式 如如 A EQU 2A EQU 2 COUNT EQU CX COUNT EQU CX 功能:用功能:用名字名字代替右边的代替右边的符号或表达式符号或表达式。目的。目的是是提高程序的可读性提高程序的可读性。在汇编时,汇编程序。在汇编时,汇编程序自动用被等值量代入。自动用被等值量代入。4-3 指示性语句(指示性语句(Directive Statements)2 2、解除语句、解除语句PURGEPURGE格式:格式:PURGE PURGE 名字名字1 1,名字,名字2 2,如如 PURGE APURGE A,SIZESIZE,COUNTCOUNT功能:对功能:对EQUEQU定义的语句,用该语句解除定义。定义的语句,用该语句解除定义。(二)数据定义语句(二)数据定义语句DB/DW/DDDB/DW/DD名字名字 DB/DW/DDDB/DW/DD 表达式表达式1 1,表达式,表达式2 2,功能:为数据项分配存储单元,用一个符号功能:为数据项分配存储单元,用一个符号名代表这个存储单元偏移地址,并为这个数名代表这个存储单元偏移地址,并为这个数据项提供一个初值;据项提供一个初值;DB DB 定义字节;定义字节;DW DW 定义字;定义字;DD DD 定义双字(定义双字(3232位);位);如如 MYDATA SEGMENT MYDATA SEGMENT ARRAY ARRAY DBDB 1,2,3,4 1,2,3,4 simsim DB DB A,BA,B BUF BUF DWDW?,1234H?,1234H MYDATA ENDS MYDATA ENDS1 12 23 34 4指定的指定的MYDATAMYDATA段中段中SIMSIMBUFBUFSIM+1SIM+1存储器存储器ARRAYARRAYAABB34H34HARRAY+1ARRAY+1ARRAY+2ARRAY+2ARRAY+3ARRAY+3BUF+2BUF+212H12H?符号名可任选或省略;符号名可任选或省略;表达式可以是表达式可以是:1):1)常数常数;2)2)?,表示不确定初,表示不确定初值;值;3)3)字符串字符串,用,用 表示,其数值为字符的表示,其数值为字符的ASCIIASCII码值;码值;4)4)重复子句重复子句,重复次数为重复次数为DUPDUP;如如 AREA DW 100 DUP(?);重复定义重复定义100100个字单元个字单元 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 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 dec cx jnz reptCode endsEnd st(三)段定义语句(三)段定义语句1 1)段定义)段定义 一个段由命令一个段由命令SEGMENTSEGMENT开始,由命令开始,由命令ENDSENDS结束,结束,它们必须成对出现;段必须有名字(强制的)。它们必须成对出现;段必须有名字(强制的)。格式格式 NAME SEGMENT NAME ENDS 段的名字段的名字NAMENAME代表该段的段地址。代表该段的段地址。2 2)ASSUME 格式:格式:ASSUME 段寄存器:段名,段寄存器:段名,段寄存器可以是:段寄存器可以是:CSCS,DSDS,SSSS,ESES 出现在代码段中,指示汇编程序在该段程序出现在代码段中,指示汇编程序在该段程序中使用哪些被定义的段,每个段分别属于什么中使用哪些被定义的段,每个段分别属于什么段。段。ASSUME命令并不能给段寄存器赋值,程序命令并不能给段寄存器赋值,程序中仍需要对段寄存器赋值(代码段除外)。中仍需要对段寄存器赋值(代码段除外)。(四)过程(四)过程(PROCEDURE)定义语句定义语句格式:格式:NAME PROC NEAR/FAR RET NAME ENDP NAME为过程名。为过程名。当过程被定义为当过程被定义为NEAR属性时,该过程只能被属性时,该过程只能被段内的主程序调用;当被定义为段内的主程序调用;当被定义为FAR属性时,属性时,可被其他代码段的程序调用。可省略,默认为可被其他代码段的程序调用。可省略,默认为NEAR属性。属性。(五)结束语句(五)结束语句 END 指令语句标号指令语句标号指令语句标号指令语句标号表示当程序执行时,第一条要表示当程序执行时,第一条要执执行行的指令的标号。的指令的标号。4-4 语句的表达方式语句的表达方式1 1、常量、常量80868086汇编语言可采用数字常量和字符串常量。汇编语言可采用数字常量和字符串常量。数字常量数字常量 可用二进制(可用二进制(B B)、)、八进制(八进制(Q Q)十六进制(十六进制(H H)、)、十进制(十进制(D D)表示表示 字符串常量字符串常量 。用。用 表示,如表示,如AA、JUMPJUMP,其数值为字符的其数值为字符的ASCIIASCII码值。码值。2 2、标识符、标识符 如伪指令语句的名字(段名、过程名、变量如伪指令语句的名字(段名、过程名、变量名)、指令语句的标号等,由程序员自由建立。名)、指令语句的标号等,由程序员自由建立。标识符最多标识符最多3131个字母、数字及特殊符号(?个字母、数字及特殊符号(?_$_$)组成,不能用数字开头。)组成,不能用数字开头。3 3、保留字、保留字 不能用保留字做标识符。不能用保留字做标识符。4 4、变量、变量 用用DBDB、DWDW等伪指令定义的存储器操作数,变等伪指令定义的存储器操作数,变量值可在程序中使用和改变。量值可在程序中使用和改变。如如定义变量定义变量 VAR1 DB VAR1 DB?在程序中可以有:在程序中可以有:MOV VAR1MOV VAR1,ALAL ADD VAR1 ADD VAR1,21H21H 变量有变量有3 3种属性:种属性:段值、偏移量、类型段值、偏移量、类型 类型可以是类型可以是字节、字、双字字节、字、双字等等5 5、标号、标号 指示某指令的存放地址。指示某指令的存放地址。标号与变量都是存储单元的标号与变量都是存储单元的符号地址符号地址,但标,但标号对应单元存放指令,变量对应单元存放数据。号对应单元存放指令,变量对应单元存放数据。标号也有三种属性:标号也有三种属性:段值、偏移量、类型段值、偏移量、类型 但标号的类型是但标号的类型是NEAR和和FAR。6 6、表达式、表达式 由由标识符标识符与与运算符运算符组合的序列,在汇编时能组合的序列,在汇编时能够产生一个数值够产生一个数值 如如 SUM+7,CYCLE*2-8;运算符包括运算符包括算术运算符算术运算符、逻辑运算符逻辑运算符、分析分析运算符运算符和和合成运算符合成运算符1 1)算术运算符)算术运算符 +、-、*、/如如 movmov ax,ax,10-6;结果结果axax的内容为的内容为42 2)逻辑运算符)逻辑运算符 AND、OR、NOT、XOR3 3)关系运算符)关系运算符 EQ、NE、LT、GT、LE、GE 如如 PROT_A LT 6,若关系为真,结果全若关系为真,结果全1 1;若关系为假,全;若关系为假,全0 04 4)分析运算符)分析运算符 SEG 格式:格式:SEG 变量或标号变量或标号 返回地址操作数所在段的段地址返回地址操作数所在段的段地址 如如 MOV AX,SEG CYCLE OFFSET 格式:格式:OFFSET 变量或标号变量或标号功能:返回地址操作数的段内偏移地址。功能:返回地址操作数的段内偏移地址。如如 MOV AX,OFFSET CYCLETYPE 格式:格式: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 BUF25 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:BUF24-5 汇编语言程序设计举例汇编语言程序设计举例例例1 1:基本编程基本编程将数据段将数据段SAV为偏移首地址的存储单元的内容为偏移首地址的存储单元的内容分别送到分别送到AX,BX,CX和和DX 程序清单程序清单:data segmentsavdw 1000h dw 2000h dw 3000hdw 4000h data endscode segmentassume cs:code,ds: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 2:编程实现两个:编程实现两个3232位无符号数位无符号数12345678h12345678h和和1357abcdh1357abcdh相乘。相乘。设两个数分别为设两个数分别为ABAB和和CDCD,则有,则有 AB AB CD CD B*D B*D A*D A*D +B*C +B*C A*C A*C Data segment Data segment mlt1 dw 5678h,1234h mlt1 dw 5678h,1234h mlt2 dw abcdh,1357h mlt2 dw abcdh,1357h prd dw 4 dup(0)prd dw 4 dup(0)data Ends data EndsCode segmentCode segment assume cs:code,ds:data assume cs:code,ds:datastart:mov ax,datastart:mov ax,data mov ds,ax mov ds,ax lea bx,mlt1 lea bx,mlt1 lea si,mlt2 lea si,mlt2 lea di,prd lea di,prd mov ax,bx mov ax,bx mul si mul si mov di,ax mov di,ax mov 2di,dx mov 2di,dx mov ax,2bx mov ax,2bx mul si mul si add 2di,ax add 2di,ax adc 4di,dx adc 4di,dx mov ax,bx mov ax,bx mul 2si mul 2si add 2di,ax add 2di,ax adc 4di,dx adc 4di,dx adc 6di,0 adc 6di,0 mov ax,2bx mov ax,2bx mul 2si mul 2si add 4di,ax add 4di,ax adc 6di,dx adc 6di,dxCode endsCode endsEnd startEnd start例例3:子程序设计。:子程序设计。有有32位数据位数据X、Y存于存储器中,用子程序编程存于存储器中,用子程序编程求求X*Y。主程序与子程序参数传递一般可采用寄存器传递、主程序与子程序参数传递一般可采用寄存器传递、存储器传递、堆栈传递等方式存储器传递、堆栈传递等方式 Data segment Data segment mlt1 dw 5678h,1234h mlt1 dw 5678h,1234h mlt2 dw abcdh,1357h mlt2 dw abcdh,1357h prd dw 4 dup(0)prd dw 4 dup(0)data Ends data Ends Stack segment stack Stack segment stack db 100 dup(?)db 100 dup(?)Stack ends Stack ends Code segment Code segment assume cs:code,ds:data,ss:stack assume cs:code,ds:data,ss:stackMul32 proc nearMul32 proc near push ax push ax push dx push dx mov ax,bx mov ax,bx mul si mul si mov di,ax mov di,ax mov 2di,dx mov 2di,dx mov ax,2bx mov ax,2bx mul si mul si add 2di,ax add 2di,ax adc 4di,dx adc 4di,dx mov ax,bx mov ax,bx mul 2si mul 2si add 2di,ax add 2di,ax adc 4di,dx adc 4di,dx pushf pushf mov ax,2bx mov ax,2bx mul 2si mul 2si popf popf adc 6di,0 adc 6di,0 add 4di,ax add 4di,ax adc 6di,dx adc 6di,dx pop dx pop dx pop ax pop ax ret retMul32 endp Mul32 endp start:mov ax,datastart:mov ax,data mov ds,ax mov ds,ax mov ax,stack mov ax,stack mov ss,ax mov ss,ax lea bx,mlt1 lea bx,mlt1;被乘数地址;被乘数地址 lea si,mlt2 lea si,mlt2;乘数地址;乘数地址 lea di,prd lea di,prd;乘积地址;乘积地址 call Mul32 call Mul32 Code endsCode endsEnd startEnd 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 loop bld;建立;建立26个字母的码值个字母的码值lea si,srclea di,dstcldmov cx,26rep movsb;完成复制;完成复制code endsend start例例5、将给定的字符串、将给定的字符串A computer language!中的小写字母转换成相应的大写字母中的小写字母转换成相应的大写字母data segmentmess db A computer language!count equ$-mess ;字符串的长度字符串的长度data endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axlea bx,messmov cx,countcase1:mov al,bxcmp al,ajb case2 ;若低于若低于a跳转跳转cmp al,zja case2 ;若高于若高于z跳转跳转sub al,20hcase2:mov bx,alinc bxdec cxjne case1code endsend start 例例6、已知、已知 CHR 字节单元有一个二进制有符号字节单元有一个二进制有符号数数 X,编程计算编程计算 Y,其结果存入其结果存入 PQ 单元中单元中.data segmentchr 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,再与再与20比较比较jnl l2mov bl,7imul blsub al,8jmp l3l2:mov al,50;若若=20,将将50送送pql3:mov y,al code endsend start

    注意事项

    本文(【教学课件】第四章汇编语言程序设计.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开