《最新微机原理汇编语言PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新微机原理汇编语言PPT课件.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微机原理汇编语言微机原理汇编语言第4章 汇编语言程序设计4.1 汇编语言程序格式及开发过程汇编语言用指令的助记符、符号地址、标号等符号书写程序的语言。源程序 用汇编语言编写的程序。汇编把源程序翻译成机器语言程序的过程。汇编程序完成汇编任务的程序。2第4章 汇编语言程序设计第4章 汇编语言程序设计第4章 汇编语言程序设计第4章 汇编语言程序设计第4章 汇编语言程序设计第4章 汇编语言程序设计第4章 汇编语言程序设计4)简化格式 (.COM).model tiny;微型存储模式.code;只有代码段.startup;程序起始点 ORG 100Hmov dx,offset stringmov ah,
2、9;显示信息int 21hmov ah,01h;等待按键int 21hmov ah,02h;响铃mov dl,07hint 21h.exit 0;程序结束点,返回DOSString db Press any key to continue!$end;汇编结束Ep49第4章 汇编语言程序设计 5)完整格式(.COM)C_SEG SEGMENTASSUME CS:C_SEG,DS:C_SEG,ES:C_SEGORG 100HBEGIN:JMP STARTMAN DB?WOMAN DB?NUM DW 6START:MOV CX,NUMMOV DX,0INPUT:MOV AH,1INT 21H10第4
3、章 汇编语言程序设计CMP AL,1JZ MANCNTCMP AL,0JZ WOMANCNTJMP INPUTMANCNT:INC DLJMP NEXTWOMANCNT:INC DHNEXT:LOOP INPUT MOV MAN,DL MOV WOMAN,DH MOV AH,4CH INT 21HC_SEG ENDS END BEGINep511第4章 汇编语言程序设计4.2 汇编语言的基本语法和伪指令1.汇编语言的基本语法1)标号与变量标号:是一条指令语句的符号地址。可作为转移类指令的操作数,即转移地址。变量:存放在某些存储单元中的值。12第4章 汇编语言程序设计 段属性标号和变量对应存储单
4、元的段地址 偏移属性标号和变量对应存储单元的偏移地址 类型属性标号的类型可以是NEAR和FAR,分别表示段内或段间变量的类型可以是BYTE、WORD和DWORD等地址属性标号和变量具有三种属性13第4章 汇编语言程序设计变量、标号的命名一般最多由31个字母、数字及规定的特殊符号(.、_、$、?、)组成,不能以数字开头.只能位于名字首$、?不能单独作为名字不区别标识符中的字母大小写不能使用汇编语言的保留字14第4章 汇编语言程序设计保留字保留字(Reserved Word)是汇编程序已经利用的标识符,主要有:指令助记符例如:MOV、ADD伪指令助记符例如:DB、EQU运算符例如:OFFSET、P
5、TR寄存器名例如:AX、CS预定义符号例如:data15第4章 汇编语言程序设计2)常数常数表示一个固定的数值数值常数字符串常数用引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值。符号常数利用一个标识符表达的一个数值。例:DWriteChar equ 216第4章 汇编语言程序设计3)运算符算术运算符逻辑运算符关系运算符分析运算符综合运算符17第4章 汇编语言程序设计(加)(减)*(乘)(除)MOD(求模)算术运算符逻辑运算符 AND(与)OR(或)XOR(异或)NOT(非)18第4章 汇编语言程序设计 EQ(相等)NE(不等)LT(小于)GT(大于)LE(小于或等于)G
6、E(大于或等于)关系运算符分析运算符OFFSET SEG TYPE LENGTHSIZE19第4章 汇编语言程序设计OFFSET格式:OFFSET 变量或标号功能:取其后变量或标号的偏移地址。例如:MOV BX,OFFSET BUFSEG格式:SEG 变量或标号功能:取其后变量或标号所在段的段首址。例如:MOV AX,SEG ABC MOV DS,AX20第4章 汇编语言程序设计PTR THIS综合运算符例如:mov al,byte ptr w_var;jmp far ptr n_label;类型名 PTR 名字/标号 使名字或标号具有指定的类型 类型名可以是:BYTE/WORD/DWORD
7、或者是:NEAR/FAR21第4章 汇编语言程序设计2.伪指令1)处理器选择伪指令2)等值伪指令3)定义存储单元伪指令4)段定义伪指令5)过程定义伪指令6)源程序结束伪指令22第4章 汇编语言程序设计1)处理器选择伪指令.8086.386.386P.586.586P23第4章 汇编语言程序设计2)等值伪指令EQU功能:给符号名定义一个值,或别的符号名。格式:符号名 EQU 表达式例:PORT1 EQU 100 PORT2 EQU PORT1+10 COUNT EQU CX AD EQU ADD特点:不能重复定义。不分配存储单元。24第4章 汇编语言程序设计3)定义存储单元伪指令DB,DW,DD
8、,DQ,DT。格式:变量名 伪指令助记符 表达式,功能:定义内存数据存储区,类型由伪指令助记符确定,初值由表达式给定。25第4章 汇编语言程序设计DB定义字节伪指令DW定义字伪指令DD定义双字伪指令DQ定义4字伪指令DT定义10字节伪指令26第4章 汇编语言程序设计数值表达式字符串表达式地址表达式(适用DW和DD伪指令)?表达式带DUP的表达式表达式的形式27第4章 汇编语言程序设计datasegmentXdb a,-5db 2 dup(100),?Ydb ABCdataendsmov al,Xdec X+1mov Y,al28第4章 汇编语言程序设计datasegmentcountdw 80
9、00h,?,ABnumberdw 64harraydw 2 dup(0)dataends29第4章 汇编语言程序设计4)段定义伪指令完整段定义伪指令段名segment 定位 组合 使用 类别.;语句序列段名endsSEGMENT定义一个逻辑段的开始ENDS表示一个段的结束4个关键字用于确定段的各种属性30第4章 汇编语言程序设计段寄存器说明伪指令指定的段寄存器来寻址对应的逻辑段ASSUME 段寄存器:段名,段寄存器名:段名,.注意:没有为段寄存器设定初值。31第4章 汇编语言程序设计n 存储模式和简化段定义伪指令存储模式伪指令.MODEL 存储模式.model必须位于所有段定义语句之前存储模式
10、决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性MASM的存储模式TINY SMALL COMPACT MEDIUMLARGE HUGE FLAT32第4章 汇编语言程序设计简化段定义伪指令.STACK 大小;堆栈段开始。参数指定字节数,默认是1KB.DATA;数据段开始.CODE 段名;代码段开始一个逻辑段的开始,自动结束前面的一个段段名称使用MASM预定义符号例如:data表示由.data定义的数据段的段名33第4章 汇编语言程序设计5)过程定义伪指令过程调用语句:CALL 过程名过程返回语句:RETPROC_NAME PROC NEAR/FAR .RETPROC_NA
11、ME ENDP34第4章 汇编语言程序设计6)源程序结束伪指令END 标号指示汇编程序结束汇编过程源程序的最后必须为END标号用于指定程序开始执行点,连接程序将据此设置CS:IP值采用.startup不用“end 标号”,而使用“end”。35第4章 汇编语言程序设计4.3 基本结构程序设计举例.model small.stack 256.dataASCII db 30h,31h,32h,33h,34h,35h db 36h,37h,38h,39h db 41h,42h,43h,44h,45h,46hHex db 0bhp例1:实现一位16进制数转换为ASCII码显示。(查表法)36第4章 汇
12、编语言程序设计.code.startupmov bx,offset ASCIImov al,hexand al,0fhxlatmov dl,almov ah,2int 21h.exit 0end37第4章 汇编语言程序设计p例2:编写计算下面函数值的程序。1X0Y=0X=0 -1X38第4章 汇编语言程序设计DATA SEGMENT X DB -10 Y DB?DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOVAX,DATA MOV DS,AX39第4章 汇编语言程序设计 CMPX,0 JGE A1 MOVY,-1 JMP EXITA1:
13、JG A2 MOVY,0 JMP EXITA2:MOVY,1EXIT:MOVAH,4CH INT 21H CODE ENDS ENDSTART40第4章 汇编语言程序设计p 例3:编程统计BUF字单元中1的个数。41第4章 汇编语言程序设计DATASEGMENTBUFDW 0011110010101011BCOUNTDB?DATAENDSCODESEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AXMOV AX,BUFMOV CL,042第4章 汇编语言程序设计LOPA:AND AX,AXJZEXITSHL AX,1JNCLOPAIN
14、CCLJMP LOPAEXIT:MOV COUNT,CLMOV AH,4CHINT21HCODEENDSEND START43第4章 汇编语言程序设计p 例4:编程实现将BUF字单元的二进制数以十六 进制形式显示在屏幕上。DATA SEGMENTBUF DW 2468HDATA ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS:CODE,DS:DATA PUSH DS SUB AX,AX PUSH AX44第4章 汇编语言程序设计MOV AX,DATA MOV DS,AX MOV BX,BUFMOV CH,4RT:MOV CL,4ROL BX,CLMOV AL,B
15、L AND AL,0FHADD AL,30HCMP AL,3AHJL PRT ADD AL,07HPRT:MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ RT RETMAIN ENDPCODE ENDS END MAIN45第4章 汇编语言程序设计p例5:在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。数108169032第一遍101690328第二遍169032108第三遍90321610846第4章 汇编语言程序设计DATA SEGMENTBUF DW 3,-4,6,7,9,2,0 DW-8,-9,-1
16、0,20N EQU(-BUF)/2DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA47第4章 汇编语言程序设计START:MOV AX,DATAMOV DS,AXMOV CX,NDEC CXLOOP1:MOV DX,CXMOV BX,0LOOP2:MOV AX,BUFBXCMP AX,BUFBX+2JGELXCHG AX,BUFBX+2MOV BUFBX,AX48第4章 汇编语言程序设计L:ADD BX,2DEC CXJNELOOP2MOV CX,DXLOOP LOOP1MOV AH,4CHINT21HCODEENDSEND START49第4章 汇编语
17、言程序设计4.4 子程序结构程序设计举例例:十进制到十六进制转换的程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制的形式在屏幕上显示出来。开始开始调用DECIBIN调用CRLF调用BINIHEX调用CRLF结束从键盘取得十进制数,保存到BX中显示回车和换行用十六进制形式显示BX中的数50第4章 汇编语言程序设计Decihex segmentMain proc far assume cs:Decihex push ds xor ax,ax push ax call decibin call crlf call binihex call crlf retMain endp Decibin
18、 proc near mov bx,0Newchar:mov ah,1 int 21h sub al,30h jl exit cmp al,9 jg exit cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add bx,ax jmp newchar Exit:retDecibin endp 51第4章 汇编语言程序设计Binihex proc near mov ch,4Rotate:mov cl,4 rol bx,cl mov dl,bl and dl,0fh add dl,30h cmp dl,3ah jl print add dl,7h Print:
19、mov ah,2 int 21h dec ch jnz rotate ret Binihex endpCrlf proc near mov ah,2 mov dl,0dh int 21h mov dl,0ah int 21h retCrlf endpDecihex ends end Main52第4章 汇编语言程序设计4.5 BIOS和DOS中断nDOS有一百多个子程序,可供调用,包含:磁盘的读写、管理;内存管理;基本输入输出管理。n用软中断指令调用。类型号:2027H系统功能调用:INT 21H1.DOS中断和DOS系统功能调用1)DOS中断53第4章 汇编语言程序设计2)DOS系统功能调用
20、单字符输入(1)单字符显示(2)显示字符串(9)字符串输入(10)结束调用(4CH)n DOS系统功能调用的方法:设置的入口参数。功能号AH。INT 21H指令自动转入中断子程序入口。中断子程序运行完毕,获得出口参数。54第4章 汇编语言程序设计n字符串输入(功号为10)功能:从键盘接收字符串到内存缓冲区。要求:先定义一个缓冲区:第一字节:指出缓冲区能容纳字符个数。第二字节:保留以用作填写输入字符数。第三字节:开始存放接收字符。DS:DX指向缓冲区。55第4章 汇编语言程序设计例:反向显示输入的字符串。DATA SEGMENTINFO1 DB 0DH,0AH,INPUT STRING:$INF
21、O2 DB 0DH,0AH,OUTPUT STRING:$BUFA DB 80 DB?DB 80 DUP(0)BUFB DB 81 DUP(0)DATA ENDS56第4章 汇编语言程序设计CODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AXLEA DX,INFO1MOV AH,9INT21HLEA DX,BUFAMOV AH,10 INT21H57第4章 汇编语言程序设计LEA SI,BUFA+1 MOV CH,0;取字符长度CX MOV CL,SIADD SI,CX;SI 指向字符串尾部LEA DI,BU
22、FBNEXT:MOV AL,SI MOV DI,AL DEC SI INCDI LOOP NEXT58第4章 汇编语言程序设计 MOV BYTE PTR DI,LEA DX,INFO2 MOV AH,9 INT21HLEA DX,BUFB MOV AH,9 ;反向显示字符串 INT21H MOV AH,4CH INT21HCODE ENDS END STARTep659第4章 汇编语言程序设计2.BIOS基本输入输出系统nPC机系统板上地址为0FE000H开始的8KB为BIOS ROM。BIOS提供了系统加电自检、引导装入以及对I/O接口控制等功能。n通过中断调用指令实现对BIOS的调用。n中断类型号:10H 1FHn调用方法:给出入口参数、功能号中断指令n例如:中断号 10H ;显示器中断 中断号 16H ;键盘中断60第4章 汇编语言程序设计小结n汇编语言程序的开发过程;.EXE文件的汇编格式:简化格式、完整格式1、完整格式2。n汇编语言的基本语法:标号与变量、常数、运算符;伪指令:处理器选择伪指令、等值伪指令、定义存储单元伪指令、段定义伪指令、过程定义伪指令、源程序结束伪指令。n基本结构程序设计举例;子程序结构程序设计举例;DOS系统功能调用。61