微机课件04第四章:汇编程序设计.ppt

上传人:max****ui 文档编号:15473748 上传时间:2020-08-12 格式:PPT 页数:54 大小:4.22MB
返回 下载 相关 举报
微机课件04第四章:汇编程序设计.ppt_第1页
第1页 / 共54页
微机课件04第四章:汇编程序设计.ppt_第2页
第2页 / 共54页
微机课件04第四章:汇编程序设计.ppt_第3页
第3页 / 共54页
点击查看更多>>
资源描述
第四章 汇编语言程序设计,南理工紫金学院 帅辉明,汇编语言 数据和表达式 伪指令 语法 程序设计 顺序、分支、循环、子程序 DOS功能调用,本章重点,机器语言:由0、1代码所组成的语言。面向机器,同一组代码对不同的计算机表示不同的含义。 汇编语言:由助记符表示的语言。面向机器。 高级语言:用一些接近人们书写习惯的英语和数学表达式形式的句子编写程序。这种语言不面向机器,而是面向过程、面向对象。,4.1 程序设计语言概述,高级语言,C、C+、PASCAL语言 如:Turbo C、VC+、DELPHI、GNU GCC,汇编语言,机器语言,高级语言,虚拟机,C#、JAVA,.NET、JVM,各种语言的关系,1.数据 (1)常数 表示汇编过程中已经有确定数值的量,主要用于做指令中的立即数、寻址中的位移量,或在伪指令语句中给变量赋值。 数值常数:由二、八、十和十六进制表达的数 字符串常数:用 (或“ ”)括起来的一串ASCII码字符,等效为一组数值常数,4.2 8086汇编语言介绍,0101B3247O2873D23ABH,12AB= 31H、32H、41H、42H,内存单元的数据,变量值在程序运行期间可以改变。 需要事先定义,通过变量名引用。变量名表示变量的首地址。 在数据段或附加段用数据定义伪指令定义。 变量的属性 段:变量所在段基址 偏移量:变量在段内的偏移量 类型:变量的字节数,DB、DW、DD,(2)变量,在指令前面,代表指令所在存储单元的地址。 通常作为程序中转移、调用、循环指令的转移目标地址。 定义方式 标识符: 标号的属性: 段:变量所在段基址 偏移量:变量在段内的偏移量 距离: NEAR段内标号、 FAR段外标号,(3)标号,2、表达式,由常数、变量或标号、运算符连接而成 分类:数字表达式、地址表达式 (1)运算符,注意与算术运算指令和逻辑运算指令的区别,ANDDX, PORT AND 0FFH,MOV AX, VALUE MOD 7 ;VALUE=50 MOV AL, NOT 0FH MOV AX, 0FH EQ 1111B,举例:,MOV AX, 1,MOV AL, F0H,关系成立结果全为1否则全为0 MOV AX, FFFFH,对存储单元的操作,(2)数值返回运算符,SEG返回变量/标号的段基址 OFFSET返回变量/标号的段内偏移 举例: MOVAX,SEG K1 MOV BX,SEG ARRAY MOVBX,OFFSET ARRAY 变量K1所在段的段基址为0915H 变量ARRAY所在段的段基址为0947H,偏移为0100H,运算符SEG和OFFSET,= MOVAX,0915H = MOV BX,0947H = MOVBX,0100H,运算符TYPE,LENGTH返回数组元素的个数 若变量用重复数据操作符DUP定义,则返回最外层DUP的值 若变量无DUP说明则返回1 SIZE返回数组变量所占的总字节数 =LENGTH*TYPE,运算符LENGTH和SIZE,K1DB10H DUP(0) K2DB“ABCDEF” TYPE K1 = TYPE K2 = LENGTHK1 =LENGTH K2 = SIZE K1 = SIZE K2 =,举例:,1,10,1*10=10,1,1,1*1=1,(3)属性运算符,(4)运算符优先级,指令语句 伪指令语句 宏指令语句,3.伪指令,执行语句。经过汇编产生可供计算机硬件执行的机器目标代码。,说明语句。如:程序有几个段,段的名称,是否需要预留存储空间等。不直接产生目标代码。,指令语句+伪指令语句。替代源程序中一段有独立功能的程序,汇编时产生相应的目标代码。,定义变量,并关联变量名和存储单元地址。 定义格式:变量名 类型 数据项表 类型:DB DW DD DQ DT 数据表项:变量的长度、数组元素个数、变量的初值,(1)变量定义伪指令,DBYTE DB -5H 一个字节变量,值为-5H DWORD DW 6*3 一个字变量,值为18 DDWORD DD 1234H 一个双字变量,值为1234H,数据定义例数值初值,DBYTE,DWORD,DDWORD,STRING1 DB AB 一个字节变量,值为A STRING2 DW AB 一个字变量,值为AB STRING3 DD AB 一个双字变量,值为AB,数据定义例字符串,STRING1,STRING2,STRING3,伪指令:DUP,重复赋值 格式:重复次数 DUP(操作数,.,操作数) SUBBDW1000 DUP (?) 包含1000数组元素 值不确定 SDKPDB2 DUP (0,2 DUP(1) 包含2个数组元素 每个元素由2部分构成,0和另一个数组B 数组B包含2个元素,值为1,数据定义例数组(1),BUFFDB16 DUP (Welcome) 包含16个元素 每个元素的值为Welcome LINGDB4 DUP (0,1) 包含4个元素 每个元素的数据为0和1,数据定义例数组(2),数组共占16*7个字节!,数组共占4*2个字节!,数组实际所占空间和用SIZE求得数值不一定相同!,赋值伪指令:EQU 定义格式:符号名 EQU 表达式 等号伪指令: 定义格式:符号名 表达式 特点:都不直接产生机器指令 区别:赋值伪指令不可以重名,(2)符号定义伪指令,COUNT=5;常数 NUM=13+5-4;数值表达式 NUM = NUM+1 ADR1 EQUDS:BP+4 ;地址表达式 CREGEQUCX;寄存器名 CBDEQUDAA;指令名 L1EQUSUBSTART;标号名 WOEQUWORD PTR DBYTE;变量名,举例:,把源程序划分成若干逻辑段,便于汇编程序生产相应代码,便于连接程序生产可执行程序。 一个汇编语言源程序可以包含若干个逻辑段(代码段、数据段、附加段或堆栈段),段与段之间的顺序可随意排列。需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。,(3)段定义伪指令,段名 SEGMENT 定位类型组合类型类别名 段名 ENDS 定位类型:表示对该段起始边界的要求 组合类型:段与段之间如果连接和定位 类别名:用于分类排序,逻辑段定义格式,STACK SEGMENT STACK . STACK ENDS DATA SEGMENT . DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK . CODE ENDS,格式:ORG 表达式 功能:表明从表达式所指地址开始存放程序或数据 举例: DATASEGMENT BUFF1DB23,56H,EOF ORG2000H BUFF2DBSTRING DATAENDS,(4)设置起始地址伪指令,表示整个源程序结束,停止汇编。 定义格式:END 标号 注意: 与第一条指令的标号相同; 必须是最后一条语句; 若有多个END语句,只有第一个有效。,(5)汇编结束伪指令,说明段寄存器和用户编写的段的对应关系,表示出用户编写的段属于系统规定的哪个段 一般设在代码段中 定义格式: ASSUME 段寄存器名:段名, 段寄存器名:段名,(6)段寄存器设定伪指令,注意:该语句仅仅说明段寄存器和段的对应关系,但不等于段基址已经装入了段寄存器,3.3 汇编语言程序设计,汇编程序的结构框架,DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA ;定义过程 START:MOVAX,DATA MOVDS,AX MOVAH,4CH INT21H CODE ENDS END START,段寄存器定义,过程:具有一定功能的子程序,CALL调用 定义格式: 过程名PROC距离类型 ret 过程名ENDP 注意: 过程和段可以互相嵌套,但不可交叉覆盖 每个过程一定有返回指令RET,可能有多个 最后一条指令必须是RET,(7)过程定义伪指令,名字 操作码 操作数 注释 START: MOV AX,30H ; AX30H 名字 以字母开头,由字母、数字、特殊字符(?、*、_、$、等)组成,不超过31字符 不能与保留字相同 任选,多数指令不用,伪指令用 指令语句名字用“:”分界,伪指令语句用空格分界 标号名、变量名、常量名、过程名、段名等,4、汇编语言语句结构,操作码 必不可少的核心,规定了所要执行的操作,由指令或伪指令助记符组成 操作数 参与操作的数据或地址,可以有多种表达形式,之间用,隔开 注释 ; 后面的字符串,1、程序设计的基本步骤 分析题目与确定算法 合理分配存储空间和存储器 编制程序流程图 编写源程序 调试源程序,4.3 汇编语言程序设计,2、顺序结构,例4-15把BUF开始的两个字节单元中的压缩BCD数相加,结果存入字节单元RES中 BCD码:为了让计算机能识别十进制数 例如:通常十进制数49在计算机中为31H,不方便程序员观察和记忆,用BCD码存放则直接为49H,buf db 89h,34h res dw ? LEA BX,BUF ;BX为BUF的有效地址 MOV AL,BUF ;BUF中的第一个字节 ADD AL,BX+1 ; BX+1 为BUF中的第二个字节 DAA MOV RES,AX,例4-18 求数X的绝对值,并送值回原处 STACKSEGMENT STACK DW256DUP(?) STACKENDS DATASEGMENT XADRDW3456H, 8192H DATAENDS CODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,3、分支结构,START:MOV AX, DATA MOV DS, AX MOV AX, XADR AND AX, AX JNS DONE NEG AX MOV XADR, AX DONE:MOV AH, 4CH INT 21H CODEENDS END START,例4-20求某数据区内负数的个数 设数据区第一个单元存放数据个数,第二单元开始存放数据,最后一个单元存放结果。 STACK SEGMENT STACK DW64 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:CODE,4、循环结构,START:MOVDI, 3000H;设置数据区首地址 MOVCL, DI;设置循环次数(即数据个数)(设置初值) XORCH, CH;CH清0 MOV BL, CH;BL统计负数个数,初值为0 INCDI;指向第一个元素(循环条件改变) A1:MOVAL, DI TESTAL, 80H;测试数据首位=1? JEA2;ZF=1,数据首位=0 INCBL;负数个数+1 A2:INCDI;指向下一个元素 LOOP A1 MOVDI, BL;存放统计结果,注意: 主程序与子程序之间的参数传递 保护和恢复主程序中寄存器的现场数据 主程序与子程序之间的参数传递方式 寄存器传递参数 堆栈传递参数 指定存储单元传递参数,5、子程序设计,例4-23 求2个32位数的和。(利用堆栈传递参数) CODESEGMENT ASSUME CS:CODE,DS:CODE,SS:CODE ORG 100H ;以下指令从偏移为0100H处开始 START:JMPMAIN ADDT1DW1200H, 1200H;数据定义 ADDT2DW2100H, 2100H SUMDW2DUP(?) MAIN:MOVAX, CODE MOV DS, AX,MOVCX, 0002;定义调用次数 MOVSI, 0;定义数据指针 CLC;CF0 REPEAT:MOVAX, ADDT1 ;取当前数X PUSHAX;压入堆栈 MOVAX, ADDT2SI;取当前数Y PUSHAX;压入堆栈 CALLADDITION;调用加法子程序 MOVSUMSI, AX;送当次运算结果 INCSI INCSI;指向下一个数据 LOOPREPEAT,MOVAX, 4C00H;结束调用 INT21H ADDITIONPROC NEAR MOVBP, SP;指向栈顶 MOVAX, BP+2;取第一个加数 ADCAX, BP+4;取第二个加数 RET4;弹出两个加数 ADDITIONENDP CODE ENDS ENDSTART,DOS系统功能调用和BIOS中断调用 1常用DOS系统功能调用 DOS系统功能调用即DOS为用户提供的一组例行子程序,其调用和返回不是用CALL和RET,而是用INT n和IRET。这些子程序可分为以下几个方面: 磁盘的读写及控制管理。 内存管理 基本输入/输出管理(如键盘、打印机、显示器) 其他管理(如日期、时间) 所有这些子程序按顺序编号(调用号),分别为075H。 调用方法:子程序入口参数送相应寄存器 调用功能号送AH INT 21H,(1)1号功能调用(键盘输入并显示) MOV AH,1 INT 21H 功能:扫描键盘,等待输入,若有键盘按下,则将键值读入并判断是否为Ctrl+Break键,若是,退出;若不是,则将键值(字符的ASCII码)送AL,同时在CRT上显示该字符。 (2)2号功能调用(显示一个字符) MOV AH,2 MOV DL,待显字符ASCII码 INT 21H,(3)9号功能调用(字符串显示) MOV DX,待显示字符串首地址 MOV AH,9 INT 21H 功能:将以$为结束标志的字符串在屏幕上显示。 说明: (1)执行前要在DS数据段定义一个字符串,该字符串必须在$结尾。 (2)若字符串无$结尾,则在其尾部加一$;若字符串中间有$,则只能采用2号功能调用逐个字符输出。,(4)10号功能调用(字符串输入) MOV AH,10 MOV DX,待存数据区首地址 INT 21H 功能:从键盘上接收字符串送到内存数据中。 注意:数据区的定义形式: BUF DB 50 ;数据区长度 DB ? ;实际输入字符的个数 DB 50 DUP(?) ;存放输入的字符 如果输入的字符数大于数据区所定义的字符个数,就会发出“嘟嘟”声。,(5)4CH号功能调用(返回操作系统) MOV AH,4CH INT 21H 功能:结束当前正在执行的程序,返回操作系统,屏幕显示操作系统提示符。 2BIOS中断调用 驻留在ROM中的BIOS提供了系统加电自检、引导装入I/O设备的处理程序及接口控制等功能模块来处理所有的系统中断。与DOS系统功能调用类似,用户可以直接用指令设置参数,然后中断调用BIOS中的程序。,下面介绍几条常用的中断调用。 (1)键盘中断调用(INT 16H) 软中断INT 16H有多个功能,其中常用的是0、1、2号功能 0号:MOV AH,0 INT 16H 功能:从键盘读字符,并将其ASCII码送AL。扫描码送AH。与DOS的1、8号功能类似。 1号:MOV AH,1 INT 16H 功能:判断是否有键按下。有键按下,ZF=0,且AL,AH同上。无键按下,ZF=1。与DOS的6号、0B号功能类似。,例:按任意键,程序退出执行。 DOS功能调用(11号功能): MOV AH,0BH INT 21H CMP AL,0FFH JZ STOP ;有键按下,AL=0FFH STOP:MOV AH,4CH INT 21H,DOS功能调用(6号功能): MOV AH,06H MOV DL,0FFH INT 21H JNZ STOP ;有键按下,ZF=0 STOP:MOV AH,4CH INT 21H BIOS中断调用(INT 16H): MOV AH,1 INT 16H JNZ STOP ;有键按下,ZF=0 STOP:MOV AH,4CH INT 21H,(2)显示器中断调用(INT 10H) INT 10H的功能调用可以进行屏幕设置。共有16种功能号,其中的0E号功能与DOS的2号功能类似。 例:在当前光标位置显示人处字符“7”,并使光标进1。 MOV AH,0EH MOV AL,37H INT 10H DOS调用可实现相同的功能: MOV AH,2 MOV DL,37H INT 21H,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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