版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机原理与接口技术第第4 4章章 汇编语言程序设计汇编语言程序设计要求:l理解8086/8088汇编语言的一般概念l理解源程序的结构l掌握伪指令语句l掌握数据项和表达式l灵活运用顺序结构、分支结构、循环结构3种基本结构微机原理与接口技术4.1 4.1 程序设计语言概述程序设计语言概述1 1、机器指令机器指令:计算机能识别的代码,机器指令是由:计算机能识别的代码,机器指令是由二进制数组成的。二进制数组成的。 例如例如: : PUSH PUSH AXAX 机器指令为机器指令为: : 01010000010100002 2、汇编语言汇编语言:汇编语言是一种符号语言,用助记符:汇编语言是一种符号语言,
2、用助记符表示操作码,用符号或符号地址表示操作数或操作表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的。数地址,它与机器指令是一一对应的。3 3、高级语言高级语言:面向过程:面向过程( (如如C, FORTRAN)C, FORTRAN)或对象或对象( (如如C+, Java)C+, Java)的语言,不依赖于机器,因而有很好的的语言,不依赖于机器,因而有很好的通用性和可移植性。通用性和可移植性。微机原理与接口技术4.1 4.1 程序设计语言概述程序设计语言概述编编辑辑程程序序DELINKDELINKTCTC编辑器编辑器WINDOWSWINDOWS文本编辑器文本编辑器E
3、DITEDIT汇编语言源程序的操作流程图汇编语言源程序的操作流程图源程序源程序文件文件EXMP.ASMEXMP.ASMASMASMMASMMASMTASMTASM汇汇编编程程序序出错出错 文件文件 EXMP.OBJ EXMP.OBJ(EXMP.LSTEXMP.LST)(EXMP.CRFEXMP.CRF)LINKLINK连连接接程程序序出错出错文件文件EXMP.EXEEXMP.EXE(EXMP.MAPEXMP.MAP)(EXMP.LIBEXMP.LIB)DEBUGDEBUG出错出错连接的是连接的是.OBJ.OBJ文件文件 执行的是执行的是.exe.exe文件文件微机原理与接口技术4.2.1 80
4、86/80884.2.1 8086/8088汇编源程序结构汇编源程序结构MY_DATA SEGMENT MY_DATA SEGMENT ;定义数据段;定义数据段SUM DB ? SUM DB ? ;为符号;为符号SUMSUM保留一个字节保留一个字节MY_DATA ENDS MY_DATA ENDS ;数据段结束;数据段结束MY_CODE SEGMENT MY_CODE SEGMENT ;定义代码段;定义代码段ASSUME CS:MY_CODE,DS:MY_DATAASSUME CS:MY_CODE,DS:MY_DATA;规定规定CS,DSCS,DS的内容的内容 PORT_VAL EQU 3 P
5、ORT_VAL EQU 3 ;端口的符号名;端口的符号名GO: MOV AX,MY_DATA GO: MOV AX,MY_DATA ;DSDS初始化为初始化为 MY_DATAMY_DATA MOV DS,AX MOV DS,AX MOV SUM,0 MOV SUM,0 ;SUMSUM单元为单元为0 0CYCLE: CMP SUM,100 CYCLE: CMP SUM,100 ;SUMSUM与与100100比较比较 JNA NOT_DONE JNA NOT_DONE ;若未超过转至;若未超过转至NOT_DONENOT_DONE MOV AL,SUM MOV AL,SUM ;若超过把;若超过把SU
6、MSUM的内容的内容 OUT PORT_VAL,AL OUT PORT_VAL,AL ;通过;通过ALAL输出然后停机输出然后停机 HLTHLTNOT_DONE: IN AL,PORT_VAL NOT_DONE: IN AL,PORT_VAL ;输入下一个字节;输入下一个字节 ADD SUM,AL ADD SUM,AL ;与以前的结果累加;与以前的结果累加 JMP CYCLE JMP CYCLE ;转至;转至CYCLECYCLEMY_CODE ENDS MY_CODE ENDS ;码段结束;码段结束END GO END GO ;整个程序结束;整个程序结束微机原理与接口技术汇编语言的分段结构:汇
7、编语言的分段结构: 汇编语言源程序汇编语言源程序数据段(数据段(DATADATA)作用:存放程序运行所需要的数据和运行结果作用:存放程序运行所需要的数据和运行结果堆栈段(堆栈段(STACKSTACK)作用:执行数据的压栈和弹栈操作,以及程序中作用:执行数据的压栈和弹栈操作,以及程序中 的数据保护的数据保护代码段(代码段(CODECODE)作用:存放所编写的程序的代码作用:存放所编写的程序的代码用开始语句用开始语句“SEGMENTSEGMENT”和结束语句和结束语句“ENDSENDS”来定义一个段来定义一个段4.2.1 8086/80884.2.1 8086/8088汇编源程序结构汇编源程序结构
8、微机原理与接口技术4.2.2 8086/80884.2.2 8086/8088汇编语言语句的类型及格式汇编语言语句的类型及格式语句类型语句类型语句类型语句类型指令语句指令语句作用:产生相应的机器代码,指定作用:产生相应的机器代码,指定CPUCPU做什么操作。做什么操作。伪指令语句伪指令语句作用:不产生相应的机器代码,仅控制汇编过程。作用:不产生相应的机器代码,仅控制汇编过程。宏指令语句宏指令语句作用:由编程者按照一定的规则来定义的一种较作用:由编程者按照一定的规则来定义的一种较“宏宏大大”的指令,包括多条指令或伪指令的指令,包括多条指令或伪指令 。微机原理与接口技术 DATA SEGMENT
9、;定义定义DATA段段 BUF1 DB 34H ;定义第一个数据定义第一个数据 BUF2 DB 2AH ;定义第二个数据定义第二个数据 SUM DB ? ;定义数据和单元定义数据和单元 DATA ENDS ;DATA结束结束 STACK SEGMENT PARA STACK STACK ;定义定义STACK段段 DW 200 DUP(0) STACK ENDS ; STACK段结束段结束 SEGMENT 数据段开始ENDS数据段结束数据段堆栈段4.2.2 8086/80884.2.2 8086/8088汇编语言语句的类型及格式汇编语言语句的类型及格式微机原理与接口技术CODE SEGMENT
10、;定义定义CODE段段 ASSUME CS:CODE,DS:DATA,SS: STACK ;段分配段分配START:MOV AX,DATA MOV DS,AX ;填装数据段寄存器填装数据段寄存器DS MOV AL,BUF1 ;取第一个加数取第一个加数 ADD AL,BUF2 ;和第二个加数相加和第二个加数相加 MOV SUM,AL MOV AH,4CH INT 21H ;返回返回DOS状态状态CODE ENDS ;CODE段结束段结束 END START ;整个源程序结束整个源程序结束代码段代码段4.2.2 8086/80884.2.2 8086/8088汇编语言语句的类型及格式汇编语言语句的
11、类型及格式微机原理与接口技术;example2.asm(文件名)(文件名)stacksegment stack;定义堆栈段定义堆栈段dw 512 dup(?);堆栈段有堆栈段有512字空间字空间stackends;堆栈段结束堆栈段结束datasegment;定义数据段定义数据段stringdb Hello, Everybody !,0dh,0ah,$dataendscodesegment code;定义代码段定义代码段assume cs:code,ds:data,ss:stack例题微机原理与接口技术start:mov ax,data ;建立建立DS段地址段地址mov ds,ax mov dx
12、,offset stringmov ah,9int 21hmov ax,4c00hint 21h ;利用功能调用返回利用功能调用返回DOScodeends ;代码段结束代码段结束end start ;汇编结束,同时指明程序起始点汇编结束,同时指明程序起始点例题微机原理与接口技术指令语句指令语句伪指令语句伪指令语句定义符号、数据,分配内存单元,不产生机器代码 名字名字 操作码操作码 操作数操作数 ;注释注释 汇编时翻译成二进制机器代码 标号标号:操作码操作码 操作数操作数, , 操作数操作数;注释注释 指令语句标号后有冒号“:”伪指令语句名字后没有冒号指令语句、伪指令语句指令语句、伪指令语句 汇
13、编语言语句的格式汇编语言语句的格式微机原理与接口技术名字由字母开头。名字由字母开头。可由下列符号组成:可由下列符号组成: (1) (1) 大小写英文字母大小写英文字母(AZAZ,azaz) (2) (2) 数字数字(0909) (3) (3) 特殊符号特殊符号(?、(?、 、_ _等)等)命名规则:命名规则: (1) (1) 数字不能作为名字的第一个符号。数字不能作为名字的第一个符号。 (2) (2) 单独的问号(?)不能作为名字。单独的问号(?)不能作为名字。 (3) (3) 最大有效长度为最大有效长度为3131位。位。 (4) (4) 汇编语言中有特定含义的保留字(如操作码、寄汇编语言中有
14、特定含义的保留字(如操作码、寄存器名等),不能作为名字使用。存器名等),不能作为名字使用。 (5)(5)见名知义。如用见名知义。如用BUFFERBUFFER表示缓冲区、表示缓冲区、SUMSUM表示累加表示累加和等。和等。汇编语言语句的格式汇编语言语句的格式微机原理与接口技术标号的三种属性标号的三种属性段属性段属性偏移属性偏移属性 类型属性类型属性定义变量的段起始地址。定义变量的段起始地址。标号偏移地址,从段起始地址到定义标号的标号偏移地址,从段起始地址到定义标号的位置之间字节数。位置之间字节数。指出该标号是在本段内引用还是在其他段中指出该标号是在本段内引用还是在其他段中引用。段内引用属性为引用
15、。段内引用属性为NEARNEAR;段间引用属性;段间引用属性为为FARFAR。标号在代码段中定义。标号在代码段中定义。汇编语言语句的格式汇编语言语句的格式微机原理与接口技术操作数操作数:用来指定参与操作的数据。用来指定参与操作的数据。多于一个,之间用逗号分开。多于一个,之间用逗号分开。可以是常数或表达式。可以是常数或表达式。操作码操作码与与操作数操作数例:例:MOV AX MOV AX ,BX,BX操作码操作码:指明操作的性质和功能,指令中的助记符都是操作码指明操作的性质和功能,指令中的助记符都是操作码无操作数:无操作数:一个操作数:一个操作数:两个操作数:两个操作数:伪指令、宏指令可有多个操
16、伪指令、宏指令可有多个操作数:作数:汇编语言语句的格式汇编语言语句的格式微机原理与接口技术常量常量数值常量数值常量字符串常量字符串常量 符号常数符号常数 后缀:二进制后缀:二进制B B、八进制、八进制O O或或Q Q、 十进制十进制D D、十六进制、十六进制H H。 十进制数十进制数可省掉后缀可省掉后缀十六进制数以十六进制数以AFAF开头时,前面开头时,前面须加数字须加数字0 0字符串在计算机中以字符串在计算机中以ASCIIASCII码存储。码存储。如如AA的存储值是的存储值是41H41H,ABAB的的存储值是存储值是4141、42H42H等。等。用用EQUEQU或或 “ “=”=” 定义的符
17、号常量。定义的符号常量。如用如用COUNT EQU 3COUNT EQU 3或或COUNT=3COUNT=3定义定义后后 ,COUNTCOUNT是一个符号常数,是一个符号常数,与数值与数值3 3等价。等价。4.3 8086/80884.3 8086/8088汇编语言的数据项与表达式汇编语言的数据项与表达式微机原理与接口技术变量变量段属性段属性 偏移属性偏移属性 类型属性类型属性定义变量的段起始地址定义变量的段起始地址变量所在段的段内偏移地址变量所在段的段内偏移地址变量类型定义变量所占的字节数。变量类型定义变量所占的字节数。 如如:BYTE(DB,1BYTE(DB,1字节字节) )、WORDWO
18、RD(DW,2DW,2字节)、字节)、 DWORDDWORD(DD,4DD,4字节)、字节)、QWORDQWORD(DQ,8DQ,8字节)、字节)、TBYTETBYTE(DT,10DT,10字节)。字节)。4.3 8086/80884.3 8086/8088汇编语言的数据项与表达式汇编语言的数据项与表达式微机原理与接口技术运算符及表达式运算符及表达式算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符数值返回数值返回运算符运算符 + +、* *、/ /、MODMOD 与数学运算符的意义相同。与数学运算符的意义相同。 取模是取余数。取模是取余数。 例例:82 MOD 16 :82 MOD
19、 16 ;结果结果为为2 2 20H MOD 7 20H MOD 7 ; ;结果结果为为4 4 ANDAND、OROR、NOTNOT、XORXOR 运算结果是一个常数运算结果是一个常数. .EQEQ、NENE、LTLT、GTGT、LELE、GE GE 两个表达式比较时,两个表达式比较时,表达式表示表达式表示方法方法/ /性质性质要相同要相同关系成立,结果为全关系成立,结果为全1 1;不成立;不成立时,为全时,为全0 0例如:指令例如:指令MOV BXMOV BX,32EQ4532EQ45等价等价于于MOV BXMOV BX,0 0;属性属性运算符运算符SEGSEG、OFFSETOFFSET、L
20、ENGTHLENGTH、SIZESIZE、TYPE TYPE 把存储单元地址分解为段地址和把存储单元地址分解为段地址和偏移地址偏移地址 THIS THIS、PTRPTR 规定存储单元的性质规定存储单元的性质4.3 8086/80884.3 8086/8088汇编语言的数据项与表达式汇编语言的数据项与表达式微机原理与接口技术MOV AL,8 AND 4MOV AL,8+4-1 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA例题例题微机原理与接口技术若BUFFER存储区用如下伪指令定义: BUFFER DW 200 DUP(0) 则
21、: TYPE BUFFER 等于2 LENGTH BUFFER等于200 SIZE BUFFER等于400例题例题微机原理与接口技术 用于指定其后存储器操作数的类型用于指定其后存储器操作数的类型运算符运算符:PTR 、THIS例例: MOV BYTR PTRBX,12H DATAB EQU THIS BYTE DATAW DW ? 例题例题微机原理与接口技术方括号:方括号: 段重设符段重设符 段寄存器名:段寄存器名: 方括号中内容为操作数的偏移地址方括号中内容为操作数的偏移地址用于修改默认的段基地址用于修改默认的段基地址其它 微机原理与接口技术常用伪指令常用伪指令等值伪指令等值伪指令等号伪指令
22、等号伪指令 解除定义伪指令解除定义伪指令定义变量伪指令定义变量伪指令定位伪指令定位伪指令格式格式符号名符号名 EQU EQU 表达式表达式功能功能 给符号名定义一个值、别给符号名定义一个值、别的符号名、表达式或助记符。的符号名、表达式或助记符。注注 不能给一个符号重复定义不能给一个符号重复定义与与EQUEQU类似,但在同一个程序中,类似,但在同一个程序中,= =可以对一个符号重新定义。可以对一个符号重新定义。格式格式 PURGEPURGE符号符号1 1,2 2N N功能功能 解除指定符号的定义,解除指定符号的定义,解除后,可用解除后,可用EQUEQU重新定义。重新定义。例例 Y1 EQU 7Y
23、1 EQU 7;Y1Y1的值为的值为7 7 PURGE Y1 PURGE Y1;解除;解除Y1Y1的定义的定义DB DB 字节变量,以字节为单位字节变量,以字节为单位分配存储单元。分配存储单元。DW DW 字变量,以字为单位分配字变量,以字为单位分配存储单元。存储单元。DD DD 定义双字,以定义双字,以4 4字节为单字节为单位分配存储单元。位分配存储单元。DQ DQ 定义定义4 4字变量,以字变量,以8 8字节为字节为单位分配存储单元。单位分配存储单元。DT DT 定义定义5 5字字 变量,以变量,以1010字字节为单位分配存储单元节为单位分配存储单元 设置当前地址计数器的值设置当前地址计数
24、器的值例例 DATA SEGMENTDATA SEGMENT ORG ORG 10H10H BUFF1 DW 2000HBUFF1 DW 2000H ORG ORG 20H 20H BUFF2 DW 4000H BUFF2 DW 4000H DATA ENDS DATA ENDS 执行后执行后BUFF1BUFF1的偏移地址值为的偏移地址值为10H10H,BUFF2BUFF2的为的为20H20H。段定义伪指令段定义伪指令 段分配伪指令段分配伪指令A ASSUME SSUME 说明段寄存器和段名之间的对应关系说明段寄存器和段名之间的对应关系例例 ASSUME CS:CODE,DS:DATAASSU
25、ME CS:CODE,DS:DATA4.4 8086/80884.4 8086/8088汇编语言的伪指令汇编语言的伪指令微机原理与接口技术例题例题例例4-2 4-2 DSEG SEGMENTTABLE DW 12 DW 34DATA1 DB 5TABLE2 DW 67 DW 89 DW 1011DATA 2 DB 12RATES DW 1314OTHRAT DD 1718DSEG ENDS微机原理与接口技术例题例题例4-3FOO SEGMENT AT 55HZERO DB 0ONE DW ONETWO DD TWOFOUR DW FOUR +5SIX DW ZERO TWOATE DB 5*6
26、FOO ENDS微机原理与接口技术例题例题STRING1 DB HELLOSTRING2 DB ABSTRING3 DW ABD1 DB 40 DUP (?)D2 DW ?D3 DB 40 DUP(60H)ONE EQU 1TWO EQU 2SUM EQU ONE+TWO微机原理与接口技术例题例题BYTES DB 4 DUP(?)FIRSTW EQU WORD PTR BYTESXYZXYZEQU BP+3EQU BP+3;变址寻址引用赋予符号名;变址寻址引用赋予符号名XYZXYZA A EQU ARRAYBXSIEQU ARRAYBXSI ;基址加变址寻址引用赋予;基址加变址寻址引用赋予符号
27、名符号名A AB BEQU ESEQU ES:ALPHAALPHA;加段前缀的直接寻址引用;加段前缀的直接寻址引用赋予符号名赋予符号名B B微机原理与接口技术例题例题ARRAY _BYTE LABLE BYTEARRAY_WORD DW 50 DUP(?)MOV AL,ARRAY_BYTE MOV BX,ARRAY_WORDCOUNT EQU CX;为寄存器;为寄存器CX定义新的符定义新的符号名号名COUNTLD EQU MOV;为指令助记符;为指令助记符MOV定义定义新的符号名新的符号名LD微机原理与接口技术段定义伪指令格式: 段名 SEGMENT 定位类型组合方式类别名 ;指令句或伪指令句
28、 段名 ENDS成对使用,指定段的名称、范围和段的定位类型、组合类型和分类名。成对出现,前后必须相同在同一模块中,不同段的段名不能相同作用 规定段的起始地址四种类型的起始位置分别为(X表示可为0或1):(A) BYTE XXXX XXXX XXXX XXXX XXXXB(B) WORD XXXX XXXX XXXX XXXX XXX0B(C) PARA XXXX XXXX XXXX XXXX 0000B(D) PAGE XXXX XXXX XXXX 0000 0000B 以上分别表示以字节、字、节、页的边界为起始地址。如果缺省定位方式,则以节的边界为起始地址。作用 指示连接程序,把同名的段按照
29、指定的方式组合起来形成一个新的段。组合方式 NONE、PUBLIC、STACK、 COMMON、MEMORY 、AT典型格式 :STACK SEGMENT PARA STACK STACK 类别名必须用单引号括起来连接程序把类别名相同的段放在连续的存储区域,先出现的段在前,后出现的在后,但对各段不能重新组合4.4 8086/80884.4 8086/8088汇编语言的伪指令汇编语言的伪指令微机原理与接口技术NONE表示本段与其他段在逻辑上不发生关系,这是隐含的组合表示本段与其他段在逻辑上不发生关系,这是隐含的组合类型。类型。PUBLIC表示在不同程序模块中,凡是用表示在不同程序模块中,凡是用P
30、UBLIC说明的同名同说明的同名同类别的段在汇编时将被连接成一个大的逻辑段,而运行时又将它们装类别的段在汇编时将被连接成一个大的逻辑段,而运行时又将它们装入同一物理段中,并使用同一段基址。入同一物理段中,并使用同一段基址。STACK在汇编连接时,将具有在汇编连接时,将具有STACK类型的同名段连接成一个类型的同名段连接成一个大的堆栈段,由各模块共享,而运行时,堆栈段地址大的堆栈段,由各模块共享,而运行时,堆栈段地址SS和堆栈指针和堆栈指针SP指向堆栈段的开始位置。指向堆栈段的开始位置。COMMON表示本段与其他模块中由表示本段与其他模块中由COMMON说明的所有同名说明的所有同名同类别的其他段
31、连接时,将被重叠地放在一起,其长度是同名段中最同类别的其他段连接时,将被重叠地放在一起,其长度是同名段中最长的那个段的长度。长的那个段的长度。MEMORY表示当几个逻辑段连接时,由表示当几个逻辑段连接时,由MEMORY说明的本逻说明的本逻辑段被放在所有段的最后(高地址端)。辑段被放在所有段的最后(高地址端)。AT表达式表达式表示本逻辑段以表达式指定的地址值来定位表示本逻辑段以表达式指定的地址值来定位16位段地位段地址,连接程序将把本段装入由该段地址所指定的存储区内。例如,址,连接程序将把本段装入由该段地址所指定的存储区内。例如,AT 0C16H表示本段从物理地址表示本段从物理地址0C160H开
32、始装入。但要注意,这一组合类开始装入。但要注意,这一组合类型不能用来指定代码段。型不能用来指定代码段。4.4 8086/80884.4 8086/8088汇编语言的伪指令汇编语言的伪指令微机原理与接口技术 DS、ES内容的填装内容的填装例:例:CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX (DATA、STACK设置已省略。)设置已省略。)用用MOV指令填装段寄指令填装段寄存器存器DS、ES的值的值4.4 8086/80884.4 8086/8088汇编语言的
33、伪指令汇编语言的伪指令微机原理与接口技术DATA ENDSSTACK1 SEGMENT PARA STACK STACK DW 200DUP(0) TOP LABEL WORDSTACK1 ENDSCODE SEGMENTSTART: MOV AX,STACK1 MOV SS,AX MOV SP,OFFSET TOP 设置定位类型:PARA 组合类型:STACKSS SP 的内容自动填充指令填装SP指令填装SS类似于DS、ES的填装2、SS段寄存器的填装 4.4 8086/80884.4 8086/8088汇编语言的伪指令汇编语言的伪指令微机原理与接口技术4.4 8086/80884.4 80
34、86/8088汇编语言的伪指令汇编语言的伪指令过程定义伪指令过程定义伪指令过程名过程名 PROC 类型类型 . . . RET过程名过程名 ENDPNEARFAR微机原理与接口技术基本结构有:顺序结构(线性结构) 选择结构(分支结构) 循环结构 三种结构可以任意组合和嵌套构成复杂的程序。4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术这三种结构可归纳为五种逻辑结构:(1)顺序结构(2)双分支结构(3)多分支结构YN条件条件4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机
35、原理与接口技术YN(5)先执行后判断循环结构NY(4)先判断后执行循环结构4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术开始设置数据段和堆栈段地址设置堆栈指针取数据截取高四位右移四位 例:设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制数, 并存入HEX和HEX+1单元的低4位,HEX存放高位十六进制数, HEX+1单元存放低位十六进制数 解 : 分析命题确定算法画流程图取原数据结束保留高位十六进制数截取低四位保存低位十六进制数保存结果4.5 8086/80884.5 8086/8088汇编语言程序设
36、计基本方法汇编语言程序设计基本方法微机原理与接口技术 MOV SS,AX MOV SP,LENGTH STK MOV AL,DATA MOV AH,AL AND AL,0F0H MOV CL,04 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AX,4C00H INT 21HCSEG ENDS END DISC 例:设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制数, 并存入HEX和HEX+1单元的低4位,HEX存放高位十六进制数, HEX+1单元存放低位十六进制数 解 : 分析命题确定算法画流程图编写程序上机调试 SS
37、EGSEGMENT STACKSTK DB 20 DUP(0)SSEG ENDSDSEGSEGMENTDATADB0B5HHEX DB0,0DSEGENDSCSEGSEGMENTASSUME CS:CSEG,DS:DSEG SS:SSEGDISC: MOV AX,DSEGMOV DS,AX MOV AX,SSEG4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术条件转移条件转移和和无条件转移无条件转移JMP指令用于实现程序的分支结构。指令用于实现程序的分支结构。分支程序设计分支程序设计单分支单分支if-then双分支双分支if
38、-then-else判定:判定:程序的逻辑根据某程序的逻辑根据某一条一条件表达式件表达式为真或假时,执行两个不同处理之为真或假时,执行两个不同处理之一时,便是双分支结构形式一时,便是双分支结构形式判定判定:有其中一个处理为空时,就是单分有其中一个处理为空时,就是单分支形式;如果分支处理中又嵌套有分支形式;如果分支处理中又嵌套有分支,或者说具有多个分支走向时,即支,或者说具有多个分支走向时,即为逻辑上的为逻辑上的多分支多分支形式。形式。4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术例:写一个实现把例:写一个实现把一位一位十六
39、进制数转化为对应十六进制数转化为对应ASCII码的程序。码的程序。 分析命题分析命题确定算法确定算法十六进制数码与对应的关系:十六进制数码与对应的关系:0123 BCDEF30H 31H 32H 33H42H 43H 44H 45H 46H这种对应关系可表示为一个分段函数:这种对应关系可表示为一个分段函数:YX+30H(0=X=9)X+37H(0A=X=0FH)4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术分析命题分析命题确定算法确定算法画流程图画流程图开始开始取十六进制数取十六进制数X+30H0=X=9YN0A=X=0F
40、HX+37H结束结束YN例:写一个实现把一位十六进制数转化为对应例:写一个实现把一位十六进制数转化为对应ASCII码的程序。码的程序。 4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试 JMP LAB2 LAB1: ADD AL,37H LAB2: MOV ASCII,AL MOV AH,4CH INT 21H CODE ENDS END START DATA SEGMENT XX DB 4 ASCII DB ? DATA ENDS DATA D
41、B0B5H CODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX, DATA MOV DS, AX MOV BX,OFFSET XX MOV AL,BX AND AL,0FH CMP AL,9 JA LAB1 ADD AL,30H例:写一个实现把一位十六进制数转化为对应例:写一个实现把一位十六进制数转化为对应ASCII码的程序。码的程序。 4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术循环程序都可由如下四部分组成:循环程序都可由如下四部分组成:(1)循环初始化部分循环初始化部分(2
42、)循环体循环体(3)循环修改循环修改(4)循环控制循环控制最常见的循环结束有:最常见的循环结束有: 用计数器控制循环;用计数器控制循环; 按问题的条件控制循环;按问题的条件控制循环; 用开关量控制循环;用开关量控制循环;4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术DATA SEGMENT SUM DW ?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0;工作寄存器清零;工作寄存器清零MOV CX,50;计数器赋初值;计数器赋初
43、值 MOVBX,0LP:INCBX;循环体入口;循环体入口ADDAX,BXDECCX;循环计数器修改;循环计数器修改JNZLP ;循环控制;循环控制MOVAH,4CHINT21HCODE ENDSENDSTART例例5-8 设计程序,完成从设计程序,完成从1累加到累加到50(即即1+2+.+49+50),结果保存在数据段,结果保存在数据段SUM单元。单元。微机原理与接口技术例:试编写程序,实现如下符例:试编写程序,实现如下符号函数号函数 1 当当X0 Y = 0 当当X=0 -1 当当X0例例微机原理与接口技术DATASEGMENTXXDW 12 ;定义存放;定义存放X值的存储单元值的存储单元
44、YYDW ? ;定义存放结果;定义存放结果Y的存储单元的存储单元DATAENDSSTACK SEGMENT STACK STACKDB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:PUSH DSXOR AX, AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX, XX ; AX XX例例微机原理与接口技术 CMPAX,0;X与与0比较比较JGEBIGPR;X0,转,转BIGPRMOVYY,0FFFF;X0,(,(YY) -1JMPEXIT;退出;退出BIGPR: JE EQU
45、PR;X=0,转,转EQUPR MOVYY,1;X0,(,(YY) 1JMPEXITEQUPR: MOVYY,0;X=0,(,(YY) 0EXIT:MOV AX,YY ;将结果送;将结果送AXRET ;DOS返回返回; MOV AX,4C00H; INT21HCODEENDSENDSTART例例微机原理与接口技术例:给定一个例:给定一个16位二进制数,统计其中位二进制数,统计其中1的个数。的个数。DATA SEGMENTNUMBER DW 156AHCOUNT DW ?DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE
46、SEGMENT ASSUME CS:CODE ,DS:DATA , SS:STACKMAIN PROC FAR PUSH DS MOV AX, 0 PUSH AX 微机原理与接口技术 MOV AX, DATA MOV DS, AX MOV CX, 0 MOV AX, NUMBERREPEAT: TEST AX, 0FFFFH JZ EXIT JNS SHIFT INC CX SHIFT: SHL AX,1 JMP REPEATEXIT: MOV COUNT,CX RET MAIN ENDPCODE ENDS END MAIN例:给定一个例:给定一个16位二进制数,统计其中位二进制数,统计其中1
47、的个数。的个数。微机原理与接口技术子程序的定义子程序的定义 程序设计中程序设计中,把多次重复出现、具有通用性、能够完成把多次重复出现、具有通用性、能够完成特定处理任务的程序段编写成独立的程序模块。特定处理任务的程序段编写成独立的程序模块。 特性:特性: (1)重复性;重复性;(2)通用性通用性; (3)浮动性浮动性;(;(4)模块化模块化;4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术主程序与子程序调用关系主程序与子程序调用关系主程序主程序K:调用子程序调用子程序ADK:J:调用子程序调用子程序ADJ:子程序子程序A 返回
48、主程序返回主程序4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术例例5-12 调用程序和子程序在同一代码段中。调用程序和子程序在同一代码段中。MAINPROC FAR ;主程序;主程序 CALLSUBR1 RETMAINENDPSUBR1PROC NEAR ;子程序;子程序(NEAR可省略可省略) RETSUBR1ENDPMAIN及其子程序及其子程序SUBR1在同一代码段中,在同一代码段中,SUBR1定义为定义为NEAR属性。属性。如果调用程序和子程序不在同一个代码段中,如果调用程序和子程序不在同一个代码段中,则使用则使用F
49、AR属性属性 程序的主程序看作程序的主程序看作DOS调用的一个子程序,调用的一个子程序,因而因而DOS对对MAIN的调用以及的调用以及MAIN中的中的RET就是就是FAR属性。属性。CALL和和NEAR为为调用指令调用指令基本功能:基本功能:将子程序的返回地址将子程序的返回地址(即即CALL指令的下一条指指令的下一条指令的地址,简称断点地址,令的地址,简称断点地址,包括段地址和偏移地址)包括段地址和偏移地址)压压入堆栈,以便执行完子程序入堆栈,以便执行完子程序后能返回主程序,并从断点后能返回主程序,并从断点处继续往下执行,然后按照处继续往下执行,然后按照某种寻址方式转向子程序的某种寻址方式转向
50、子程序的入口地址去执行子程序。入口地址去执行子程序。子程序定义的语法格式:子程序定义的语法格式: PROC Attribute RET ENDP4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术SUBTPROCPUSHAX;现场保护;现场保护PUSHBXPUSHCXPUSH DX ;子程序体;子程序体POP DX;现场恢复;现场恢复POP CXPOP BXPOP AXRETSUBTENDPPUSH指令把指令把子程序所需要子程序所需要使用的寄存器使用的寄存器内容保存在堆内容保存在堆栈中栈中POP指令把寄指令把寄存器内容恢复存器内
51、容恢复原状原状注意注意:子程序中用到的寄存:子程序中用到的寄存器是应该保护的。器是应该保护的。如果使用寄存器在主程序和如果使用寄存器在主程序和子程序之间传送参数,这种子程序之间传送参数,这种寄存器就不一定需要保护,寄存器就不一定需要保护,特别是向主程序回送结果的特别是向主程序回送结果的寄存器,更不应该因保存和寄存器,更不应该因保存和恢复寄存器而破坏了应该向恢复寄存器而破坏了应该向主程序传送的信息。主程序传送的信息。4.5 8086/80884.5 8086/8088汇编语言程序设计基本方法汇编语言程序设计基本方法微机原理与接口技术4938,交换位置原数据和序号第一趟排序的步骤:4965, 保持
52、不变6576, 交换位置9713, 交换位置9727, 交换位置9749, 交换位置冒泡排序冒泡排序微机原理与接口技术DSEGMENTVARDB -1,-10,-100,27H,0AH,47HNEQU $-VARDENDSCSEGMENT ASSUME CS:C,DS:D;说明代码段、数据段;说明代码段、数据段 B : MOV AX,DMOV DS,AX;给;给DS赋段值赋段值MOV CX,N-1;设置;设置N-1轮比较次数轮比较次数MOV DX,1;比较轮次计数,输入子程序;比较轮次计数,输入子程序AG: CALL SUBPINC DXLOOP AGMOV AH,4CHINT 21H冒泡排序冒泡排序微机原理与接口技术冒泡排序冒泡排序SUBP PROC PUSH CX MOV CX,N SUB CX,DX MOV SI,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高二年级上册期末考试汇编:文言文
- 《威尼斯镰刀菌蛋白等3种新食品原料》介绍2025
- 年产13.2万台变速箱改建项目可行性研究报告模板-备案审批
- 2019-2021年北京重点区高一(上)期末化学试卷试题汇编:物质的量
- 清远消防员笔试题目及答案
- 2025年长沙卫校单招题库及答案
- 关于帽子的测试题及答案
- 2025年机电实务考试真题及答案
- 音标对听力测试题及答案
- 2025年大学教育数学题库及答案
- GB/T 12643-2025机器人词汇
- 药物外渗和渗出的预防和处理
- Unit5 What does he do?A lets talk(说课稿)-2024-2025学年人教PEP版英语六年级上册
- 《食品仪器分析技术》课程标准
- DB63-T 2382-2024 天然林保护修复标准体系
- 《斯蒂芬·库里》课件
- 鞋企年度经营目标规划
- 2020年度加油站施工施工组织设计方案
- 风电项目审批、开发、建设、运营所需手续全流程
- 尊重学术道德遵守学术规范学习通超星期末考试答案章节答案2024年
- 理财产品合同样本
评论
0/150
提交评论