微机原理第五章精品文稿.ppt
微机原理第五章1第1页,本讲稿共17页过程名常用作过程名常用作CALL调用指令的操作数调用指令的操作数,子程的最后安排子程的最后安排RET返回指令,使执行完子程后能返回调用处返回指令,使执行完子程后能返回调用处。过程有两种类型:过程有两种类型:NEAR和和FAR 无类型项时,无类型项时,默认为默认为NEAR类型类型。当过程与调用指令不在同一段时,应将过程定义为当过程与调用指令不在同一段时,应将过程定义为FAR 类型。类型。过程类型决定子程中过程类型决定子程中RET的返回类型的返回类型2第2页,本讲稿共17页例例1 display PROC 、C3H 、RET ;NEAR 属性的过程对应段内返回属性的过程对应段内返回display ENDP例例2 display PROC FAR 、CBH 、RET ;FAR属性的过程对应段间返回属性的过程对应段间返回display ENDP3第3页,本讲稿共17页汇编语言程序汇编语言程序举例举例三三4第4页,本讲稿共17页;利用汇编语言程序结构例二(子程结构)利用汇编语言程序结构例二(子程结构);用二进制显示中断向量表中数据用二进制显示中断向量表中数据D0H的个数的个数key EQU 0D0H ;用符号表示常量用符号表示常量(关键字关键字)code SEGMENT ;代码段开始代码段开始ASSUME CS:code begin:MOV AX,0000H MOV DS,AX MOV SI,0000H MOV CX,0400H MOV BX,0 MOV AL,key next:CMP SI ,AL JNZ point INC BX point:INC SI LOOP next CALL display ;调用显示子程调用显示子程MOV AH,4CH ;返回返回DOS INT 21H;用二进制显示用二进制显示BX内容子程内容子程display PROC MOV CX,16 rotate:ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP rotate RET ;子程返回子程返回display ENDP code ENDS ;代码段结束代码段结束END begin ;指示程序结束和指示程序结束和;程序入口程序入口5第5页,本讲稿共17页七、等值定义伪操作七、等值定义伪操作格式格式符号名符号名EQU 需等值的表达式需等值的表达式作用是用符号名等值指定的表达式作用是用符号名等值指定的表达式其中其中:表达式可以是任何有效的操作数表达式可以是任何有效的操作数汇编时用语句中的表达式代替程序中符号所在的地方。汇编时用语句中的表达式代替程序中符号所在的地方。应用:应用:1.定义符号常量,方便修改程序。定义符号常量,方便修改程序。2.某表达式多次出现时,用等值伪操作可以方便编程。某表达式多次出现时,用等值伪操作可以方便编程。6第6页,本讲稿共17页;利用汇编语言程序结构例二(子程结构)利用汇编语言程序结构例二(子程结构);用二进制显示中断向量表中数据用二进制显示中断向量表中数据D0H的个数的个数key EQU 0D0H ;用用符符号号表表示示常常量量(关关键键字字)code SEGMENT ;代码段开始代码段开始ASSUME CS:code begin:MOV AX,0000H MOV DS,AX MOV SI,0000H MOV CX,0400H MOV BX,0 MOV AL,key next:CMP SI ,AL JNZ point INC BX point:INC SI LOOP next CALL display ;调用显示子程调用显示子程MOV AH,4CH ;返回返回DOS INT 21H;用二进制显示用二进制显示BX内容子程内容子程display PROC MOV CX,16 rotate:ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP rotate RET ;子程返回子程返回display ENDP code ENDS ;代码段结束代码段结束END begin ;指示程序结束和指示程序结束和;程序入口程序入口7第7页,本讲稿共17页实现实现用二进制显示中断向量表中数据用二进制显示中断向量表中数据D0H的个数。的个数。分析:分析:中断向量表指内存中断向量表指内存0:00:3FFH大小大小400H(即即1K)字节空间字节空间;查找关键字查找关键字D0H;将关键字的个数,存放在将关键字的个数,存放在BX中中,采用二进制显示采用二进制显示BX内容,内容,16个字符;个字符;采用子程调用结构。采用子程调用结构。8第8页,本讲稿共17页主程序流程图主程序流程图子程序流程图子程序流程图9第9页,本讲稿共17页;利用汇编语言程序结构例二(子程结构)利用汇编语言程序结构例二(子程结构);用二进制显示中断向量表中数据用二进制显示中断向量表中数据D0H的个数的个数key EQU D0H ;用符号表示常量用符号表示常量(关键字关键字)code SEGMENT ;代码段开始代码段开始ASSUME CS:code begin:MOV AX,0000H MOV DS,AX MOV SI,0000H MOV CX,0400H MOV BX,0 MOV AL,key next:CMP SI ,AL JNZ point INC BX point:INC SI LOOP next CALL display ;调用显示子程调用显示子程MOV AH,4CH ;返回返回DOS INT 21H;用二进制显示用二进制显示BX内容子程内容子程display PROC MOV CX,16 rotate:ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP rotate RET ;子程返回子程返回display ENDP code ENDS ;代码段结束代码段结束END begin ;指示程序结束和指示程序结束和;程序入口程序入口10第10页,本讲稿共17页;利用汇编语言程序结构例二(子程结构)利用汇编语言程序结构例二(子程结构);用二进制显示中断向量表中数据用二进制显示中断向量表中数据D0H的个数的个数key EQU 0D0H ;用符号表示常量用符号表示常量(关键字关键字)code SEGMENT ;代码段开始代码段开始ASSUME CS:code begin:MOV AX,0000H MOV DS,AX MOV SI,0000H MOV CX,0400H MOV BX,0 MOV AL,key next:CMP SI ,AL JNZ point INC BX point:INC SI LOOP next CALL display ;调用显示子程调用显示子程MOV AH,4CH ;返回返回DOS INT 21H;用二进制显示用二进制显示BX内容子程内容子程display PROC MOV CX,16 rotate:ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP rotate RET ;子程返回子程返回display ENDP code ENDS ;代码段结束代码段结束END begin ;指示程序结束和指示程序结束和;程序入口程序入口思考:思考:如何用如何用SCANSB改写此程序?改写此程序?11第11页,本讲稿共17页例例:用:用CMP指令指令在中断向量表中在中断向量表中查找从键盘输入的字符查找从键盘输入的字符,并并 将将 其其 个个 数数 用用 二二 进进 制制 形形 式式 显显 示示 出出 来来。(scanskey.asm)code SEGMENT ;代码段开始代码段开始ASSUME CS:code begin:MOV AX,0000H ;设设置置查查找找首首地地址址MOV DS,AX MOV SI,0000H MOV CX,0400H ;设置查找长度设置查找长度MOV BX,0 ;计算值初值计算值初值MOV AH,01H ;从键盘输入从键盘输入INT 21H ;输入关键字在输入关键字在AL中中next:CMP SI ,AL JNZ point INC BX point:INC SI CALL display ;调调用用显显示示子子程程MOV AH,4CH ;调用调用4CH功能功能INT 21H ;返回返回DOS;用二进制显示用二进制显示BX内容子程内容子程display PROC MOV CX,16 ;显示位数显示位数rotate:ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP rotate RET ;子程返回子程返回display ENDP code ENDS ;代码段结束代码段结束END begin12第12页,本讲稿共17页例:用例:用LODSB 在中断向量表中在中断向量表中查找从键盘输入的字符查找从键盘输入的字符,并并 将将 其其 个个 数数 用用 二二 进进 制制 形形 式式 显显 示示 出出 来来。(scanskey.asm)code SEGMENT ;代码段开始代码段开始ASSUME CS:code begin:MOV AX,0000H ;设置查找首地址设置查找首地址MOV DS,AX MOV SI,0000H MOV CX,0400H ;设置查找长度设置查找长度MOV BX,0 ;计算值初值计算值初值MOV AH,01H ;从键盘输入从键盘输入INT 21H ;输入关键字输入关键字MOV DL,AL ;保存在保存在DL中中next:LODSB ;从串取从串取CMP AL,DL ;与关键字比较与关键字比较JNZ point INC BX ;计算值加计算值加1 point:LOOP next ;查找结束?查找结束?CALL display ;调用显示子程调用显示子程MOV AH,4CH ;调用调用4CH功能功能INT 21H ;返回返回DOS;用二进制显示用二进制显示BX内容子程内容子程display PROC MOV CX,16 ;显示位数显示位数rotate:ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP rotate RET ;子程返回子程返回display ENDP code ENDS ;代码段结束代码段结束END begin用用LODSB改写程序改写程序13第13页,本讲稿共17页八八、数值数值回送操作符回送操作符:TYPE,LENGTH,SIEE,OFFSET,SEG5种。种。把一些特征或存贮器地址的一部分作为数值回送。把一些特征或存贮器地址的一部分作为数值回送。TYPE格式:格式:TYPEvariable变量变量或或label标号标号回送该变量的以字节数表示的类型回送该变量的以字节数表示的类型(DB为为1,DW为为2,DD为为4,DQ为为8,DT为为10)回送标号类型数值(回送标号类型数值(NEAR为,为,FAR为为2)例:例:ARRAYDW1,2,3ADDSI,TYPEARRAY汇编程序其形式:汇编程序其形式:ADDSI,214第14页,本讲稿共17页LENGTH格式:格式:LENGTHvariable对于变量中使用对于变量中使用DUP,汇编回送分配给变量单元数,其他情况回送,汇编回送分配给变量单元数,其他情况回送1。例:例:FESSDW100DUP(0)对于对于MOVCX,LENGTHFEES汇编程序将其形式:汇编程序将其形式:MOVCX,100其他情况:其他情况:例:例:ARRAYDW1,2,3对于指令对于指令 MOVCX,LENGTHARRAY汇编程序将使其形式为:汇编程序将使其形式为:MOVCX,1例:例:TABLEDBABCD对于指令对于指令MOVCX,LENGTHTABLE汇编程序使其形式为:汇编程序使其形式为:MOVCX,115第15页,本讲稿共17页SIZE格式:格式:SIZEvariable回送分配给该变量的字节数回送分配给该变量的字节数LENGTH*TYPE例:例:FEESDW100DUP(0)MOVCX,SIZEARRAY将形成:将形成:MOVCX,200例:例:TABLEDBABCDMOVCX,SIEETABLE将形成:将形成:MOVCX,1例:例:ARRAYDW1,2,3MOVCX,SIEEARRAY形式:形式:MOVCX,2LENGTH*TYPE=216第16页,本讲稿共17页小小小结:小结:TYPE变量的返回值是类型的字节数变量的返回值是类型的字节数:DB为为1,DW为为2,DD为为4,DQ为为8,DT为为10;TYPE标号的返回值是:标号的返回值是:NEAR为为-1,FAR为为-2。LENGTH变量返回:变量返回:DUP分配的单元数,对于其他情况则返回分配的单元数,对于其他情况则返回1。SIZE返回返回值是:值是:LENGTH和和TYPE值的乘积,即变量的字节数。值的乘积,即变量的字节数。17第17页,本讲稿共17页