




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章第七章 汇编语言程序设计的基本汇编语言程序设计的基本方法和技巧方法和技巧7.1 概述概述7.3 8086汇编语言程序设计的基本语法汇编语言程序设计的基本语法7.4 汇编语言程序设计的基本方法和技巧汇编语言程序设计的基本方法和技巧7.7 IBM-PC-DOS系统的功能调用系统的功能调用可执行目标文件:可执行目标文件:“.EXE”目标代码文件:目标代码文件:“.OBJ”,没有确定的物理地址,没有确定的物理地址,“.ASM若有错,给出信息若有错,给出信息源程序文件:源程序文件:“.ASM” “.asm” 编辑编辑edit汇编汇编得到结果,观察结果是否正确,错误得到结果,观察结果是否正确,错误链
2、接链接若干若干.OBJ调试调试MS-DOS下下7.1 概述概述7.3 8086汇编语言程序设计的基本语法汇编语言程序设计的基本语法指示性语句与指令性语句:指示性语句与指令性语句:指令性语句是用指令系统中的指令构成的语句。指令性语句是用指令系统中的指令构成的语句。 格式:格式:标号:标号: 操作码助记符操作码助记符 操作数操作数 ;注释;注释指示性语句是指示汇编程序进行汇编的操作伪指令和宏指令指示性语句是指示汇编程序进行汇编的操作伪指令和宏指令)。)。 格式:格式:名字名字 定义符定义符 参数参数 ;注释;注释l指示性语句与指令性语句区别指示性语句与指令性语句区别l一个程序经汇编,连接和装入内存
3、后,在执行程序之前:一个程序经汇编,连接和装入内存后,在执行程序之前:l 指示性语句的功能已经完成,故又称伪操作。指示性语句的功能已经完成,故又称伪操作。 l 而指令性语句的功能尚未完成,需控制而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。去执行,才能完成。一、源程序语句的组成一、源程序语句的组成NEAR:标号只能做段内转移和段内调用的目标地址。标号只能做段内转移和段内调用的目标地址。FAR:标号只能做段间转移和段间调用的目标地址标号只能做段间转移和段间调用的目标地址 标号:表示指令所在存储单元的首地址标号:表示指令所在存储单元的首地址.具有段属性,具有段属性,段基址必须在段基址必
4、须在CS段寄存器中,在段内有偏移量。段寄存器中,在段内有偏移量。两种类性:两种类性:NEAR和和FARJMP LE(0FFFFH:0) JMP 0ffff:0JMP dword ptr bx JMP Array 1234h 名字:后不带名字:后不带:,除存储器间接寻址外,名字,除存储器间接寻址外,名字不作为转移指令和调用指令的目的操作数。不作为转移指令和调用指令的目的操作数。在程序中,标号和名字只能出现一次在程序中,标号和名字只能出现一次助记符由指令系统规定。助记符由指令系统规定。定义符由汇编程序规定。定义符由汇编程序规定。都称为关键字或保留字,不能用作标号、名字、变量名。都称为关键字或保留字
5、,不能用作标号、名字、变量名。二、操作数和参数二、操作数和参数可以是常量、变量、寄存器、标号和表达式,不止一可以是常量、变量、寄存器、标号和表达式,不止一个,用个,用,分开分开1. 常量常量在指令性语句中可以做立即数,也可以做偏移量在指令性语句中可以做立即数,也可以做偏移量e.g. MOV AL, 5AH MOV AX, SI+66H在指示性语句中一般作为参数或数据项在指示性语句中一般作为参数或数据项e.g. ABC DW 1357H ;定义字定义字2. 变量变量 代表存放在某存储单元的数据,若变量代表存放在某存储单元的数据,若变量在名字中出现,称为对变量的定义,就是在名字中出现,称为对变量的
6、定义,就是给变量分配存储单元,且对这个存储单元给变量分配存储单元,且对这个存储单元赋一个符号名赋一个符号名变量名。同时将这些存变量名。同时将这些存储单元预置初值,可以通过储单元预置初值,可以通过DBDB、DWDW、DDDD等等对变量定义。对变量定义。三种三种属性属性段属性一定属于某个段)段属性一定属于某个段)偏移属性在段内有偏移量)偏移属性在段内有偏移量)类型属性,指变量长度:类型属性,指变量长度:DB、DD、DW、DQ、DT3. 表达式与运算符表达式与运算符 +、-、*、/:参加运算的数和结果均是整数,除法运参加运算的数和结果均是整数,除法运算的结果只取整数部分算的结果只取整数部分 e.g.
7、 80/9的值为的值为8 MOD:除法取余:除法取余 SHL/SHR:逻辑左:逻辑左/右移,最右右移,最右/左边以左边以0补,当移位次补,当移位次数数16时,结果恒为时,结果恒为0 表达式表达式11表达式表达式22 下标运算符,表示加法,把表达式下标运算符,表示加法,把表达式1 1和表达式和表达式2 2相加形成一个存储器内存地址相加形成一个存储器内存地址e.g. MOV AX, DATA110He.g. MOV AX, DATA110H MOV AX, DATA1+10H MOV AX, DATA1+10H等价等价(2) (2) 逻辑运算符逻辑运算符 ANDAND、OROR、XORXOR、NO
8、TNOT注:有些运算符与指令助记符是相同的,但是概念不注:有些运算符与指令助记符是相同的,但是概念不同同 在语句中所处的字段不同,指令位于操作码段,运算在语句中所处的字段不同,指令位于操作码段,运算符位于操作数段符位于操作数段 指令在程序运行时执行,运算符在运算在汇编时完成指令在程序运行时执行,运算符在运算在汇编时完成 指令操作对象是操作数,运算符处理对象是某一个具指令操作对象是操作数,运算符处理对象是某一个具体的数体的数AND AL,24H AND 0FHAND AL,24H AND 0FH(3) (3) 关系运算符关系运算符 EQEQ、NENE、LTLT、LELE、GTGT、GEGE 关系
9、运算符连接两数这两个数必须同时是数字或关系运算符连接两数这两个数必须同时是数字或同一段内的两个地址组成一个判定式,若判定式正确同一段内的两个地址组成一个判定式,若判定式正确为真),运算结果为为真),运算结果为0FFFFH,若为假,则运算结果,若为假,则运算结果为为0000He.g. (PORT)=25 MOV AX, 25 EQ PORT 汇编汇编“MOV AX, 0FFFFH” MOV AX, 25 NE PORT 汇编汇编“MOV AX, 0000H”(4) (4) 分析运算符分析运算符 SEG 符号名符号名 ;求段基址;求段基址e.g. 标号标号SLAB处于数据段,且段基址为处于数据段,
10、且段基址为46FFH,那么,那么 MOV AX, SEG SLAB ;(AX)=46FFH OFFSET 符号名符号名 ;求段内偏移量;求段内偏移量e.g. 标号标号SLAB处于数据段,且与数据段基址的距离为处于数据段,且与数据段基址的距离为10H MOV SI, OFFSET SLAB ;(SI)=0010H TYPE TYPE 符号名符号名 ;求符号名类型值;求符号名类型值e.g. DATA1 DB 12H, 34H, 56He.g. DATA1 DB 12H, 34H, 56H DATA2 DW 7890H DATA2 DW 7890H MOV AX, TYPE DATA1 ;(AX)=
11、1 MOV AX, TYPE DATA1 ;(AX)=1 MOV BX, TYPE DATA2 ;(BX)=2 MOV BX, TYPE DATA2 ;(BX)=2类型类型类型值类型值1B12B24B48B810B10NEAR-1FAR-2 SIZE 符号名符号名 ;求为符号名分配的字节数;求为符号名分配的字节数e.g. DATA1 DB 50 DUP (0) DATA2 DD 20 DUP (0) MOV AX, SIZE DATA1 ;(AX)=1*50=50 MOV AX, SIZE DATA2 ;(AX)=4*20=80必须是用必须是用“DUP( )”定义的数据项定义的数据项 LENG
12、TH 符号名符号名 ;求为符号名分配的项数;求为符号名分配的项数SIZE、LENGH、TYPE之间的关系:之间的关系:SIZE 符号名符号名=(LENGTH 符号名符号名)*(TYPE 符号名符号名)e.g. 对于对于“ABC DW 100 DUP (?)” TYPE ABC ;汇编结果为汇编结果为2 LENGTH ABC ;汇编结果为汇编结果为100 SIZE ABC ;汇编结果为汇编结果为200必须是用必须是用“DUP( )”定义的数据项定义的数据项(5) (5) 属性运算符属性运算符 类型类型 PTR 符号名符号名 ;将符号定义为新类型;将符号定义为新类型BYTE、WORD、DWORD、
13、NEAR、FAR等等SUB WORD PTR ALPHABXDI, 512H; THIS 类型类型 ;指定新类型,规定它所定义的符号名;指定新类型,规定它所定义的符号名和相邻的下一个语句的符号名具有相同的物理地址和相邻的下一个语句的符号名具有相同的物理地址e.g. LABC EQU THIS BYTE LABD DW 1357H, 2468H MOV AL, LABC ;(AL)=57H MOV AX, LABD+1 ;(AX)=6813H SHORT 标号标号 ;指出;指出JMP指令的转向地址是在下一条指指令的转向地址是在下一条指令的令的127个字节范围内个字节范围内(5) (5) 分离运算
14、符分离运算符 LOW 表达式表达式 ;取低字节取低字节 HIGH 表达式表达式 ;取高字节取高字节e.g. SSY=1234H, 那么那么 MOV AL, LOW 5678H ; (AL)=78H MOV AH, HIGH SSY ; (AH)=12H7.4 汇编语言程序设计的基本方法和技巧汇编语言程序设计的基本方法和技巧一、概述一、概述 (一)(一) 判断程序质量的标准判断程序质量的标准 程序的正确性程序的正确性 程序的可读性程序的可读性 程序的执行时间程序的执行时间 程序所占内存大小程序所占内存大小( (二二) )汇编语言的程序设计步骤如下:汇编语言的程序设计步骤如下:1 1建立数学模型;
15、建立数学模型;2 2选择算法;选择算法;3 3绘制流程图;绘制流程图;4 4分配存储空间和工作单元;分配存储空间和工作单元;5 5根据流程图编制程序;根据流程图编制程序;6 6上机调试程序。上机调试程序。7.4 汇编语言程序设计的基本方法和技巧汇编语言程序设计的基本方法和技巧 顺序结构顺序结构分支结构分支结构循环结构循环结构 子程序结构子程序结构(三几种程序结构(三几种程序结构7.4 汇编语言程序设计的基本方法和技巧汇编语言程序设计的基本方法和技巧1. 顺序程序设计顺序程序设计例例 从标号为从标号为ADD-BUF的存储单元开始连续存放着两个的存储单元开始连续存放着两个单字节数,将两数相加,结果
16、送到单字节数,将两数相加,结果送到SUMBUF存储单存储单元中不考虑进位)。元中不考虑进位)。 开开 始始 AH(ADD-BUF)AHAH+(ADD-BUF+1) (SUM-BUF)AH 完毕完毕 DATASEGMENTADD-BUFDB47H,6AHSUM-BUFDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVAH,ADDBUFADDAH,ADD-BUF+1MOVSUM-BUF,AHCODEENDSENDSTART2. 分支程序设计分支程序设计选择分支选择分支 简单分支简单分支 多分支多分支 例例
17、比较两个一字节无符号数比较两个一字节无符号数X1和和X2的大小,把大数的大小,把大数存入存入MAX单元。单元。分析:比较两个无符号数,可将两数相减,然后根据分析:比较两个无符号数,可将两数相减,然后根据CF标志位来判断大小。标志位来判断大小。 DATASEGMENTSOURCEDBX1, X2MAXDB?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMOVAX,DATAMOVDS,AXMOVAL,SOURSE;ALX1CMPAL,SOURSE+1;X1X2JNCBRANCH;若若X1X2,转转BRANCHMOVAL,SOURSE+1;否则,否则,ALX2BR
18、ANCH:MOVMAX,AL;大数送大数送MAX单单CODEENDSEND3. 循环程序设计循环程序设计WHILE-DO型循环图型循环图 REPEAT-UNTIL型循环图型循环图 (1)(1)初始化部分初始化部分这是循环的准备部分,为程序操作、地址指针、循环计数、这是循环的准备部分,为程序操作、地址指针、循环计数、结束条件等设置初始值。结束条件等设置初始值。(2)(2)循环体,包括以下循环体,包括以下3 3个部分:个部分: 循环工作部分循环工作部分-这是循环程序的主体,完成程序的这是循环程序的主体,完成程序的基本操作,循环多少次,这部分语句就执行多少次。基本操作,循环多少次,这部分语句就执行多
19、少次。 循环修改部分循环修改部分-修改循环工作部分的变量地址等,这修改循环工作部分的变量地址等,这保证每次重复时,参加执行的数据能发生有规律的变化。保证每次重复时,参加执行的数据能发生有规律的变化。 循环控制部分循环控制部分-保证循环条件满足时进入循环;循环保证循环条件满足时进入循环;循环结束条件不满足时,退出循环,执行循环体外的后续语句。结束条件不满足时,退出循环,执行循环体外的后续语句。(3)(3)循环结束部分循环结束部分 完成循环结束后的处理,如数据分析、结果的存放等。完成循环结束后的处理,如数据分析、结果的存放等。 例例 从从XX单元开始的单元开始的10个连续单元中个连续单元中存放有存
20、放有10个无符号数,从中找出最大个无符号数,从中找出最大者送入者送入YY单元。单元。 分析:根据题意,把第分析:根据题意,把第一个数先送入一个数先送入AL,将,将AL中的数与后面的中的数与后面的9个数逐个数逐个比较,如果个比较,如果AL中的数中的数较小,则两数交换位置,较小,则两数交换位置,如果如果AL中的数大于或等中的数大于或等于相比较的数,则两数于相比较的数,则两数位置不变,在比较过程位置不变,在比较过程中,中,AL中始终保持较大中始终保持较大的数,比较的数,比较9次,则最大次,则最大者必在者必在AL中,最后把中,最后把AL中的数送入中的数送入YY单元。单元。循环工作部分循环工作部分循环修
21、改部分循环修改部分循环控制部分循环控制部分循环修改部分循环修改部分初始化部分初始化部分循环结束部分循环结束部分DATASEGMENTXXDB73, 59, 61, 45, 8l, 107, 37, 25, 14, 64YYDB?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XXMOVBX,OFFSET XXMOVCX,9LOOP1: INCBXCMPAL,BXJAELOOP2MOVAL,BXLOOP2:DECCXJNZLOOP1MOVYY, ALMOVAH, 4CHINT21HCODEENDSEND
22、START7.7 DOS功能调用 PCDOS是是IBM PC微型计算机的磁盘操作系统。微型计算机的磁盘操作系统。它为用户提供了许多命令,也有它为用户提供了许多命令,也有80多个子程序可供用多个子程序可供用户调用。户调用。 这些子程序的功能主要是实现对存储器和基本这些子程序的功能主要是实现对存储器和基本I/O设备的管理等。为了便于调用将所有子程序顺序编号。设备的管理等。为了便于调用将所有子程序顺序编号。如如PC DOS2.0有有87个子程序,编号从个子程序,编号从0开始到开始到57H。 用户编程原则:用户编程原则:尽可能使用尽可能使用DOS的系统功能调用,提高程序可移的系统功能调用,提高程序可移
23、 植性。植性。在在DOS功能不能实现情况下,考虑用功能不能实现情况下,考虑用BIOS功能功能调调 用。用。在在DOS和和BIOS的中断子程不能解决问题时的中断子程不能解决问题时,使用使用 IN/OUT指令直接控制硬件。指令直接控制硬件。设置入口参数设置入口参数在在AH设置功能号设置功能号m执行中断指令执行中断指令INT N分析、应用出口参数分析、应用出口参数1. 调用方法使用使用DOS功能调用还要注意下列问题:功能调用还要注意下列问题:(1从键盘输入的字符由系统自动转换为从键盘输入的字符由系统自动转换为ASCII码,在进行数据处理时要特别注意;码,在进行数据处理时要特别注意;(2需要在屏幕上显
24、示的字符要在程序中将其转需要在屏幕上显示的字符要在程序中将其转换为换为ASCII码。码。 例:实验中的例:实验中的3+4=72、DOS功能调用要注意的问题 INT 21H INT 21H二、二、DOS系统功能调用系统功能调用 (21H类型中断调用类型中断调用)在在DOS中断服务程序中,功能最多的是矢量号为中断服务程序中,功能最多的是矢量号为21H的矢量中断的矢量中断 入口参数入口参数 定义要显示的字符串,字符串尾定义要显示的字符串,字符串尾 应为应为$,作为结束显示的标志。,作为结束显示的标志。 DS : DX = DS : DX = 字符串的首地址字符串的首地址功能号功能号 AH = 09
25、HAH = 09 H类型号类型号 21H21H出口参数出口参数 无无实现功能实现功能 显示字符串,遇显示字符串,遇 $ $ 停止显示,停止显示,光光 标随动。标随动。2. 显示字符串 ( 09H功能 )3.键盘输入一个字符 ( 01H功能 )将其ASCII字符代码送AL寄存器,同时送显示器显示。如:MOV AH,01H INT 21H 例:例:MOV AHMOV AH,4CH4CH INT 21H INT 21H4.终止程序,返回DOS4CH号)二、汇编语言程序设计举例例例1:试设计一个对两个:试设计一个对两个32位二进制数相加的程位二进制数相加的程序。设被加数序。设被加数2A3B078EH和
26、加数和加数4C508F55H从从数据段的数据段的BGS单元令单元令BGS=2000H开始依次开始依次存放,要求将两数和放在加数之后。存放,要求将两数和放在加数之后。 分析:这是一个简单的加法问题,因为数据不长,分析:这是一个简单的加法问题,因为数据不长,可采用顺序程序设计方法。可采用顺序程序设计方法。 因为是两个因为是两个32位数相加,应先加低位数相加,应先加低16位,再位,再加高加高16位,加高位,加高16位时还要考虑低位时还要考虑低16位相加产生位相加产生的进位,应选用带进位加法指令。还要注意,多的进位,应选用带进位加法指令。还要注意,多字节数在内存是放在连续的存储单元中,且高字字节数在内
27、存是放在连续的存储单元中,且高字节放高地址单元,低字节放低地址单元。节放高地址单元,低字节放低地址单元。 内存单元分配如下:内存单元分配如下:BGS=2000H8EH07H3BH2AH55H8FH50H4CH被加数被加数加数加数和和2019H2019HDATA SEGMENT ORG 2000HBGS DD 2A3B078EH,4C5D8F55H DD ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000HSTART:MOV AX,DATA MOV DS,AX MOV AX,BGS ADD AX,BGS+4 MOV BGS+8,AX MO
28、V AX,BGS+2 ADC AX,BGS+6 MOV BGS+0AH,AX MOV 0AH,4CH INT 21HCODE ENDS END START低低16位位高高16位位返回返回DOS 同一问题,若数据很长,或采用字节加法,则重同一问题,若数据很长,或采用字节加法,则重复很多次,可考虑采用循环程序设计方法:复很多次,可考虑采用循环程序设计方法:DATA SEGMENT ORG 2000HBGS DB 8EH, 07H, 3BH, 2AH DB 55H, 8FH,5DH, 4CH DB 4 DUP( ?)?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:
29、DATA ORG 1000HSTART:MOV AX,DATA MOV DS,AX MOV CX,4 CLC MOV SI,OFFSET BGS LOOP1:MOV AL,SI ADC AL,SI+4 MOV SI+8,AL INC SI LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START一次加法一次加法 例例1:已知从已知从DS段段1000H单元开始连续存放着单元开始连续存放着大小不同的两个大小不同的两个16位二进制无符号数位二进制无符号数X1和和X2。试设计一个程序,将其中的大数放到试设计一个程序,将其中的大数放到0050H单单元,小数放到元,
30、小数放到0052H单元。单元。 解:显然,这是一个双分支程序。解:显然,这是一个双分支程序。 根据比较结根据比较结果果(CF标志标志)用条件转移指令实现分支。用条件转移指令实现分支。 X1LX1H X2L X2HDS:1000HDS:0050H大数大数小数小数 0052HDATASEGMENT ORG 1000H x1 DW ? x2 DW ? ORG 0050HMAX DW 2DUP (?)DATAENDSCODESEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AX MOV AX, 1000H MOVBX, 1002H CMPAX
31、,BX;比较两数大小;比较两数大小 JNCLOP1; AX BX转转LOP1 MOVMAX , BX MOVMAX+2,AXLOPT: MOV AH,4CH INT 21HLOP1: MOVMAX,AX MOVMAX+2,BX JMPLOPTCODE ENDS END START程序分析程序分析data segmentdat db -22,35,-57,0,19,99,123,-98,-128,67res db (?)data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax lea si,dat ; 【61】 mov cx,9 mov al,silop
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025合同无效由哪些部门确认
- 2025年变更劳动合同协议 副本
- 2024年锡林郭勒盟锡林浩特市医疗保障局选聘社会监督员笔试真题
- 2024年邳州市市属事业单位考试真题
- 2024年柳州市市属事业单位考试真题
- 2024年湖北省中医院招聘聘用工作人员真题
- 2024年安庆皖江中等专业学校专任教师招聘真题
- 2024年福建福清元载中学教师招聘真题
- 2024年北京农业职业学院招聘真题
- 2024年安国市职业技术教育中心专任教师招聘真题
- 2023年广东省深圳市中考化学试卷(含答案解析)
- 房地产用户需求分析报告
- 年兽来了课件
- JT-T-524-2019公路工程水泥混凝土用纤维
- DL-T5501-2015冻土地区架空输电线路基础设计技术规程
- DZ∕T 0173-2022 大地电磁测深法技术规程(正式版)
- 代理记账业务规范-代理记账业务内部规范制度
- 中级考试外科基础题
- 初三化学原子的结构课件1
- 《控制计划培训》课件
- 中学风险辨识评估和应急资源调查报告
评论
0/150
提交评论