● 例题5,6设某程序具有8种功能,它们的入口地址分别为SUBR1一SUB8, 用表内存放入口地址的方法编程,执行第3种功能。 DATA SEGMENT ADD BX.AX BASE DW SUB1,SUB2,SUB3,SUB4, ;求功能3的有效地址 SUB5,SUB6,SUB7,SUB8 MOV AX,BX] BN DB3 ;取功能号3 JMP AX DATA ENDS ;转SUB3执行 STACK SEGMENT PARA STACK SUB1: ! DW 30 DUP (0) JMP EXⅫT STACK ENDS COSEG SEGMENT SUB2: ASSUME CS:COSEG,DS: JMP EXIT DATA,SS:STACK SUB3: ! BEGIN:MOV AX,DATA JMP EXIT MOV DS,AX MOV AL,BN SUB8: MOV AH,0 ;AX←-(BN) JMP EXIT DEC AL EXIT:MOV AH,4CH SHL AL,1 ;取功能3的表内 INT 21H 偏移 COSEG ENDS MOV BX,OFFSET BASE ENDS BEGIN 16
例题5.6 设某程序具有8种功能,它们的入口地址分别为SUBR1~SUB8, 用表内存放入口地址的方法编程 用表内存放入口地址的方法编程,执行第 3种功能。 DATA SEGMENT BASE DW SUB1, SUB2, SUB3, SUB4, ADD BX, AX ;求功能3的有效地址 SUB5, SUB6, SUB7, SUB8 BN DB 3 ;取功能号3 DATA ENDS STACK SEGMENT PARA STACK MOV AX, [BX] JMP AX ;转SUB3执行 STACK SEGMENT PARA STACK ┆ DW 30 DUP (0) STACK ENDS COSEG SEGMENT SUB1: ┆ JMP EXIT ┆ COSEG SEGMENT SUB2 ┆ ASSUME CS:COSEG,DS: DATA,SS:STACK BEGIN: MOV AX, DATA SUB2: ┆ JMP EXIT SUB3: ┆ JMP EXIT BEGIN: MOV AX, DATA MOV DS, AX MOV AL, BN MOV AH, 0 ;AX← (BN ) JMP EXIT ┆ SUB8: ┆ JMP EXIT , ; ( ) DEC AL SHL AL, 1 ;取功能3的表内 偏移量 T JMP EXIT EXIT: MOV AH, 4CH INT 21H COSEG ENDS MOV BX, OFFSE T BASE COSEG ENDS ENDS BEGIN 16
●● 例题5.7对于例题5.6,采用表内存放无条件转移指令的方法编程,●执 行功能3。程序如下: JMP SUB2 DATA SEGMENT JMP SUB3 BN JMP SUB4 DATA ENDS JMP SUB5 STACK SEGMENT PARA STACK JMP SUB6 DW 30 DUP (0) JMP SUB7 STACK ENDS JMP SUB8 BEGIN:MOV AX,DATA SUB1: MOV DS,AX JMP NEXT MOV BH,O SUB2: MOV BL,BN BL)=3 JMP NEXT DEC BL ;BL)=2 SUB3: MOV AL,BL ;(AL)=2 JMP NEXT SHL BL,1 BL)=4 ADD BL,AL SUB8: ;BL)乘3,取功能3的表内偏移量 JMP NEXT ADD BX,OFFSET BASE JMP BX NEXT:MOV AH,4CH BASE:JMP SUB1 INT 21H ;表首地址为BASE COSEG ENDS END BEGIN 17
例题5.7 对于例题5.6,采用表内存放无条件转移指令的方法编程,执 行功能 3。程序如下: JMP SUB2 3。程序如下: DATA SEGMENT BN DB 3 DATA ENDS JMP SUB2 JMP SUB3 JMP SUB4 DATA ENDS JMP SUB5 STACK SEGMENT PARA STACK DW 30 DUP (0) STACK ENDS JMP SUB5 JMP SUB6 JMP SUB7 JMP SUB8 BEGIN: MOV AX, DATA MOV DS, AX MOV BH, O JMP SUB8 SUB1: ┆ JMP NEXT SUB2: ┆ MOV BL, BN ;(BL) = 3 DEC BL ;(BL) = 2 MOV AL, BL ;(AL) = 2 ┆ JMP NEXT SUB3: ┆ JMP NEXT SHL BL, 1 ;(BL) = 4 ADD BL, AL ;(BL)乘3,取功能3的表内偏移量 J ┆ SUB8: ┆ JMP NEXT ADD BX, OFFSET BASE JMP BX BASE: JMP SUB1 表首地址为BASE ┆ NEXT: MOV AH, 4CH INT 21H ; 表首地址为BASE COSEG ENDS END BEGIN 17
3)根据关健字实现多路分支 在跳转表的每一个字地,址或指令前开辟一个关健字单元,用于存放该字地址 ● 或指令的 DATA SEGMENT READ:MOV AH,1 ;读功能号 BASE DB1;关键字 INT 21H DW SUB1;外设服务程序入口 SUB AL,30H DB 2 JE READ DW SUB2 MOV BX,OFFSET BASE DB 4 RSH:CMP AL,[B:凶;与关键字比较 DW SUB3 JE BRCH INC BX INC BX DB 80H INC BX ;进下一关键字 DW SUB8 JMP RSH DATA ENDS BRCH:MOV CX,[BX+1] STACK SEGMENT PARA JMP CX STACK STACK' DB 100 DUP ? SUB1:… STACK ENDS CODE SEGMENT SUB2:...... ASSUME CS:CODE,DS:DATA, SS:STACK MAIN ENDP CODE ENDS MAIN PROC FAR END BEGIN BEGIN:MOV AX,DATA MOV DS,AX 18
3)根据关键字实现多路分支 在跳转表的每一个字地址或指令前开辟一个关键字单元,用于存放该字地址 或指令的 DATA SEGMENT BASE DB 1 ;关键字 DW SUB1 ;外设服务程序入口 READ: MOV AH, 1 ;读功能号 INT 21H DW SUB1 ;外设服务程序入口 SUB AL 30H DB 2 DW SUB2 DB 4 SUB AL, 30H JE READ MOV BX, OFFSET BASE RSH: CMP AL, [BX] ;与关键字比较 DW SUB3 ┆ DB 80H JE BRCH INC BX INC BX INC BX ;进下 一关键字 DW SUB8 DATA ENDS STACK SEGMENT PARA STACK‘STACK’ INC BX ;进下 关键字 JMP RSH BRCH: MOV CX, [BX+1] JMP CX STACK‘STACK’ ┆ DB 100 DUP (?) STACK ENDS CODE SEGMENT SUB1:…… ┆ SUB2:…… CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS:STACK MAIN PROC FAR SUB2: ┆ MAIN ENDP CODE ENDS END BEGIN MAIN PROC FAR BEGIN: MOV AX, DATA MOV DS, AX END BEGIN 18
5.3循环结构程序设计 在程序中,能有规则重复执行的程序段称为循环。包含循环。 程序段的程序称为循环结构程序。循环结构是程序设计的 又一种基本结构。在设计程序时采用循环结构,不仅能缩 短代码长度,而且能简化设计。 循环程序结构一般包括以下4个组成部分: (1)初始化部分 (2)循环体 (3)循环控制部分 (4)循环结束部分 循环控制是循环程序设计的关键问题。每个循环程序 ●d 必须选择恰当的循环条件来控制循环的运行和结束。如果 处理不当就不能完成循环功能,甚至会陷入“死循环”。 常用的循环控制方法有:计数器控制法、条件控制法逻 辑尺控制法等。 19
5.3 循环结构程序设计 在程序中,能有规则重复执行的程序段称为循环。包含循环 程序段的程序称为循环结构程序。循环结构是程序设计的 又一种基本结构。在设计程序时采用循环结构,不仅能缩 短代码长度,而且能简化设计。 循环程序结构一般包括以下 4个组成部分: (1)初始化部分 (2)循环体 (3)循环控制部分 (4)循环结束部分 循环控制是循环程序设计的关键问题。每个循环程序 必须选择恰当的循环条件来控制循环的运行和结束 。如果 处理不当就不能完成循环功能,甚至会陷入“死循环”。 常用的循环控制方法有 常用的循环控制方法有:计数器控制法 、条件控制法 、 逻 辑尺控制法等。 19
循环结构分当型和直到型两种结构,如图5.5所示。当型结 ● 构只有在满足循环条件时才进入循环,否则不执行循环体。 而直到型结构则首先执行循环体,然后再进行循环条件的● 判断,因此至少要执行一次循环体。循环初始化循环条件 循环体NY(a)当型循环结构循环初始化循环条件循环体 NY(b)直到型循环结构图5.5循环结构程序流程图 循环初始化 循环初始化 N 循环体 循环 条件 Y 循环 循环体 条件 (a)当型循环结构 (b)直到型循环结构 图5.5循环结构程序流程图 20
循环结构分当型和直到型两种结构,如图5.5所示。当型结 构只有在满足循环条件时才进入循环,否则不执行循环体 。 而直到型结构则首先执行循环体,然后再进行循环条件的 判断,因此至少要执行一次循环体 。循环初始化循环条件 循环体NY(a)当型循环结构循环初始化循环条件循环体 NY(b)直到型循环结构图5.5循环结构程序流程图 循环初始化 循环初始化 N 循环体 循环 条件 循环体 Y 循环 条件 Y 条件 (a)当型循环结构 N (b)直到型循环结构 图5.5循环结构程序流程图 20