版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 汇编语言程序设计顺序程序设计顺序程序设计分支程序设计分支程序设计循环程序设计循环程序设计子程序子程序软中断和软中断和BIOSBIOS调用调用1.设计步骤: 根据实际问题抽象出数学模型 确定算法 画程序流程图 分配内存工作单元和寄存器 程序编码 调试2.2.绘制程序流程图绘制程序流程图(1)(1)用方框表示工作框用方框表示工作框 NY?(4)(4)各框之间用直线连起来表示程序走向。各框之间用直线连起来表示程序走向。 。 3. 源程序的基本结构:源程序的基本结构: 顺序、分支、循环、子程序顺序、分支、循环、子程序程序流程图符号起始:起始:功能:功能:判断:判断:子过程:子过程:顺序程序设计
2、,又叫直接程序设计。它是相对顺序程序设计,又叫直接程序设计。它是相对于分支程序和循环程序设计而言的。因此,可于分支程序和循环程序设计而言的。因此,可以说顺序程序是既不包含分支,又不包含循环以说顺序程序是既不包含分支,又不包含循环的程序,顺序程序是从第一条指令开始,按其的程序,顺序程序是从第一条指令开始,按其自然顺序,一条指令一条指令地执行,在运行自然顺序,一条指令一条指令地执行,在运行期间,期间,CPU既不跳过某些指令,也不重复执行既不跳过某些指令,也不重复执行某些指令,一直执行到最后一条指令为止。某些指令,一直执行到最后一条指令为止。4.1 顺序结构程序顺序结构程序例:例:将某段中的字符串将
3、某段中的字符串“Hello!”传送到另一段中(内传送到另一段中(内存数据块的传送)。存数据块的传送)。开始开始建立传送方向建立传送方向 DS: SI 源串首地址源串首地址 ES: DI 目的串首地址目的串首地址CX 串长度串长度串传送串传送返回返回 DOS4.1 4.1 顺序结构程序顺序结构程序( (顺序执行,无转移、无循环顺序执行,无转移、无循环) )aa SEGMENT ;数据段;数据段1xx DB Hello! ;定义源串;定义源串aa ENDSbb SEGMENT ;数据段;数据段2yy DB 6 dup (?) ; 定义目的串定义目的串bb ENDScc SEGMENT ;代码段;代
4、码段 ASSUME CS:cc, DS:aa, ES:bb ;分配段寄存器;分配段寄存器start : CLD ;设置传送方向;设置传送方向 MOV AX , aa ;DS: SI 源串首地址源串首地址 MOV DS , AX LEA SI , xx MOV AX , yy ;ES:DI 目的串首地址目的串首地址 MOV ES , AX MOV DI , OFFSET yy MOV CX , 6 ;CX 串的长度串的长度 REP MOVSB ;串传送;串传送 MOV AH , 4CH ;调用调用4CH系统功能,返回系统功能,返回DOS INT 21H cc ENDS END start ;程序
5、结束;程序结束4.1 顺序程序设计顺序程序设计 例例411 把在字节存储单元AA和BB中的两个压缩BCD数相加,结果存到字节单元CC中。 分析:实现BCD码相加,要通过二进制数加法指令实现。然后再用十进制调整指令进行调整,以获得正确的BCD结果。因为是单字节相加,只用一条二进制加法指令即可。如果考虑相加结果有进位,则可以将表示进位的CF标志位存入单元CC+1中。为此,在存储单元CC处留有两个字节,用来存放相加的结果。程序程序: :DATA SEGMENTDATA SEGMENTAA DB 23H ; AA DB 23H ; 被加数被加数BB DB 18H BB DB 18H ;加数;加数CC
6、DB 2 DUP(?) ;CC DB 2 DUP(?) ;结果单元结果单元DATA ENDSDATA ENDSBCDADD SEGMENTBCDADD SEGMENT ASSUME CS:BCDADD,DS:DATA ASSUME CS:BCDADD,DS:DATASTART: MOV AX, DATASTART: MOV AX, DATA MOV DS, AX MOV DS, AX MOV AL, AA ; MOV AL, AA ;取被加数取被加数 ADD AL, BB ;ADD AL, BB ;二数相加二数相加 DAA ;DAA ;调整为十进制结果调整为十进制结果 MOV CC, AL M
7、OV CC, AL LAHF ; LAHF ;取标志位取标志位 AND AH, 01 ;AND AH, 01 ;取取CFCF位位 MOV CC+1, AH ;MOV CC+1, AH ;存进位到存进位到C+1C+1单元单元 MOV AH, 4CHMOV AH, 4CH INT 21H INT 21HBCDADD ENDSBCDADD ENDS END START END START 例例414 在内存地址SQREA起有015的平方数表。在ABB单元任给-个小于等于15的整数,求其平方值。 分析:因为平方表已顺序排放在内存中。又已知首地址为SQREA,只要把给定单元的内容作位移量与表首址相加,就
8、指向了表中要求值的地址,取其内容即为该数的平方值。源程序源程序: DATA SEGMENTSQREA DB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,225ABB DB 8DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START PROCFAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV BL,ABB ;取给定单元中数取给定单元中数 MOV BH,0 MOV SI,OFFSET SQREA ;平方表首地址指针平方表首地址指针 MOV AL
9、,SI+BX ;取给定数的平方值取给定数的平方值 MOV ABB,AL ;存回原单元存回原单元 RETFSTART ENDPCODE ENDS END START 条件满足条件满足?处理处理P1处理处理P2标号标号1:标号标号2:NY1. 简单分支结构简单分支结构4.2 分支程序分支程序分支结构程序设计的关键在于准确地知道分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正确地使用操作结果影响的标志位状态和正确地使用条件转移指令。根据对条件的判断而选择条件转移指令。根据对条件的判断而选择不同的处理方法是人的基本智能体现。不同的处理方法是人的基本智能体现。2. 多种分支结构多种分支结
10、构标号标号1:条件条件1成立成立?P1NY条件条件2成立成立?条件条件n成立成立?Pn+1标号标号2:标号标号n:标号标号n+1:P2PnNNYY 用比较指令用比较指令 CMP DEST,SRC JE EQUL EQUL: 用测试指令用测试指令 TEST DEST,SRC JNZ NEXT NEXT: 用逻辑指令用逻辑指令 SHR DEST,CL JC NEXT NEXT:例:例:。YXYXYXZ101程程 序序;- 数据段定义数据段定义 -DATSEGMENTXDB242YDB67ZDB?DATENDS ;- 代码段定义代码段定义 -COD SEGMENT ASSUME DS: DAT, C
11、S: CODSTART:MOV AX, DAT MOV DS, AX; 初始化初始化DS MOV AL, X MOV BL, Y;-CMP AL, BLJEC1; (AL)(BL) 则跳转至则跳转至C1 JAC2; (AL) (BL) 则跳转至则跳转至C2 MOV AL, -1 JMP EXT C1:MOV AL, 0 JMPEXT C2:MOV AL, 1 EXT: MOV Z, AL MOV AH, 4CH INT 21H ; 返回返回DOS;-COD ENDSENDSTART 4.2 分支程序设计分支程序设计例例4.2.1 设在A、B两个存贮单元各有一个无符号数,比较两个无符号数的大小,
12、并根据判断结果,在屏幕显示AB或BA或A=B。 分析:两个无符号数比较大小,使用比较指令CMP,产生标志位,然后根据标志位,使用无符号条件转移指令实现转移。源程序: DATA SEGMENT A DB 3BH B DB 8EH ASTR DB AB $ BSTR DB BA $ CSTR DB A=B $ DATA ENDS CODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX MOV AL MOV AL,A ;A ;
13、取取A A中数中数 CMP B,AL ;ACMP B,AL ;A与与B B比较比较 JAE BGA JAE BGA ;BA,BA,转转BGA BGA MOV DX,OFFSET ASTR ; MOV DX,OFFSET ASTR ;显示显示ABAB MOV AH,9 MOV AH,9 INT 21H INT 21H JMP COM JMP COM BGA: JZ AEBBGA: JZ AEB MOV DX,OFFSET BSTR ; MOV DX,OFFSET BSTR ;显示显示BABA MOV AH,9 MOV AH,9 INT 21H INT 21H JMP COM JMP COMAEB
14、: MOV DX,OFFSET CSTR ;AEB: MOV DX,OFFSET CSTR ;显示显示A=BA=B MOV AH,9 MOV AH,9 INT 21H INT 21HCOM: MOV AH,4CHCOM: MOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS 例例4.2.2 在一个字符串中,找出其ASCII码值最大的字符,并显示在屏幕上。分析:可以把每个字符的ASCII码,看做是一个无符号数。这样,就转化为在一组数中查找一个最大数的操作。通常使用逐个比较法,即把第一个数作比较标准,与其后的数比较。如标准数大,则再与下一个数比较。如标准数小,则
15、将大数做为新的标准数,再与下一个数比较。依此类推,逐个比较,直到最后一个标准的数,就是要找的最大数,即值为最大的字符。源程序: DATA SEGMENT BLOK DB Search a character to have ;字符串 DB the largest value$ COUNT EQU $-BLOK ;串长 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BLOK MOV CX,COUNT-1 MOV AL,SI ;取一个字符, INC SI ;调整指针CO
16、MP: CMP AL,SI ;字符比较 JA NEXT ;若AL值大,转NEXT MOV AL,SI ;否则,取大值到AL NEXT: INC SI ; 调整指针 LOOP COMP ;循环查找 MOV DL,AL ;显示所找到的最大字符 MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 循环程序的组成:循环程序的组成:循环程序是在满足某些条件时对一段程循环程序是在满足某些条件时对一段程序的重复执行,一般由四部分组成。序的重复执行,一般由四部分组成。 4.3 循环程序循环程序(1)循环初值部分:这是为了保证循环程序能正常)循环初值部
17、分:这是为了保证循环程序能正常进行循环操作而必须做的准备工作。循环初值分两进行循环操作而必须做的准备工作。循环初值分两类:一类是循环工作部分的初值,别一类是控制循类:一类是循环工作部分的初值,别一类是控制循环结束条件的初值。环结束条件的初值。(2)工作部分:即需要重复执行的程序段。这是循)工作部分:即需要重复执行的程序段。这是循环的中心,称之为循环体。环的中心,称之为循环体。(3)修改部分:按一定规律修改操作数地址及控制)修改部分:按一定规律修改操作数地址及控制变量,以便每次执行循环体时得到新的数据。变量,以便每次执行循环体时得到新的数据。(4)控制部分:用来保证循环程序按规定的次数或)控制部
18、分:用来保证循环程序按规定的次数或特写条件正常循环。特写条件正常循环。循环体循环体循环控制循环控制继续循环?继续循环?初始化初始化YN(2) 先判断后执行先判断后执行循环体可能一次都不循环体可能一次都不执行执行初始化初始化循环体循环体循环控制循环控制继续循环?继续循环?YN2. 基本结构形式基本结构形式(1) 先执行后判断先执行后判断(dowhile) 至少执行一次循环体至少执行一次循环体 MOV CX,COUNT AGAIN: LOOP AGAIN MOV CX,COUNT AGAIN: DEC CX JNZ AGAIN MOV CX,COUNT AGAIN: JCXZ NEXT DEC C
19、X JMP AGAIN NEXT:2、循环程序设计、循环程序设计(1)循环的控制方法)循环的控制方法下面介绍最常见的两种控制方法:计数控制和条件控制。下面介绍最常见的两种控制方法:计数控制和条件控制。计数控制计数控制当循环次数已知时,通常使用计数控制法。假设循环次数为当循环次数已知时,通常使用计数控制法。假设循环次数为n,常常用以下三种方法实现计数控制和条件控制常常用以下三种方法实现计数控制和条件控制先将循环次数先将循环次数n送入循环体计数器中,然后,每循环一次,计数送入循环体计数器中,然后,每循环一次,计数器减器减1,直至循环计数器中的内容为,直至循环计数器中的内容为0时结束循环。如:时结束
20、循环。如: MOV CX,n ;循环初值部分;循环初值部分LOOPA: ;工作部分;工作部分 ;修改部分;修改部分 DEC CX ;控制部分;控制部分 JNZ LOOPA:其中工作部分、修改部分被重复执行其中工作部分、修改部分被重复执行n次,即当(次,即当(CX)=n,n-1,1时,重复执行循环体,当(时,重复执行循环体,当(CX)=0时,结束循环。时,结束循环。先将循环次数的负值送入循环计数器中,然后每循环先将循环次数的负值送入循环计数器中,然后每循环一次,计数器加一次,计数器加1,直至计数器中的内容为零时结,直至计数器中的内容为零时结束循环。例如:束循环。例如: MOV CX,n ;循环初
21、值部分;循环初值部分LOOPA: ;工作部分;工作部分 ;修改部分;修改部分 INC CX ;控制部分;控制部分 JNZ LOOPA其中工作部分、修改部分被重复执行其中工作部分、修改部分被重复执行n次,即当(次,即当(CX)=n,(n1),1时重复执行,当(时重复执行,当(CX)=0时时结束循环。结束循环。先将先将0送入循环计数器中,然后每循环一次,计数器加送入循环计数器中,然后每循环一次,计数器加1,直到循环计数器的内容与循环次数直到循环计数器的内容与循环次数n相等时退出循环。相等时退出循环。例如:例如: MOV CX,0 ;循环初值部分;循环初值部分 LOOPA: ;工作部分;工作部分 ;
22、修改部分;修改部分 INC CX ;修改部分;修改部分 CMP CX,n JNE LOOPA其中工作部分、修改部分重复执行其中工作部分、修改部分重复执行n次,即当(次,即当(CX)=0,1,n1时重复执行,当(时重复执行,当(CX)=n时结束循环。时结束循环。条件控制条件控制有些情况下,循环次数事先无法确定,但它与问题的某有些情况下,循环次数事先无法确定,但它与问题的某些条件有关。这些条件可以通过指令来测试。若测试比些条件有关。这些条件可以通过指令来测试。若测试比较的结果表明满足循环条件,则继续循环,否则结束循较的结果表明满足循环条件,则继续循环,否则结束循环。环。 例例:统计:统计AX寄存器
23、中寄存器中1的个数,并将结果存放在的个数,并将结果存放在CL寄存寄存器中。器中。 MOV CL,0 L: AND AX,AX JZ EXIT SAL AX,1 ;将;将AX中的最高位移入中的最高位移入CF中中 JNC L ;如果;如果CF=0,转,转L INC CL ;如果;如果CF=1,则(,则(CL)+1CL JMP L ;转;转L处继续循环处继续循环 EXIT:2、单重循环程序设计、单重循环程序设计所谓单重循环指循环体内不再包含循环结构。下面所谓单重循环指循环体内不再包含循环结构。下面分循环次数已知和未知两种情况讨论其程序设计方分循环次数已知和未知两种情况讨论其程序设计方法。法。(1)循
24、环次数已知的循环程序设计)循环次数已知的循环程序设计对于循环次数已知的情况,通常采用计数控制方法对于循环次数已知的情况,通常采用计数控制方法来实现循环。来实现循环。(2)最大循环次数未知的循程序设计)最大循环次数未知的循程序设计对于循环次数未知的情况,常用条件来控制循环。对于循环次数未知的情况,常用条件来控制循环。3、多重循环程序设计、多重循环程序设计多重循环即循环体内套有循环。设计多重循环程序多重循环即循环体内套有循环。设计多重循环程序时,可以从外层循环到内层循环一层一层地进行。时,可以从外层循环到内层循环一层一层地进行。 4.3 4.3 循环程序设计循环程序设计例例4.3.1 在BUFFE
25、R开始的地址处,有一组有符号数。要求统计其中负数的个数。程序:DATA SEGMENTBUFFER DB 2,-3,18,-24,87,-98N EQU $-BUFFERRESLT DB ? DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART PROCFARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AX MOV BX,OFFSET BUFFER MOV CX,N MOV DL,0LOP:MOV AL,BX AND AL,AL JNS NEXT INC DLNEXT:INC BX LOOP LOP MOV R
26、ESLT,DL ADD DL,30H MOV AH,2 INT 21H RETSTART ENDPCODE ENDSEND START例例4.3.2 在地址ADDR开始处,存放有100个无序的无符号数。要求按降序排列(大数在前、小数在后),结果仍存放到原地址区。分析:在前面的例子中,已讨论过求最大值的问题,现在要求是在找到最大值后再找次大数,且置于最大数后,以此类推,直到将所有的数都按降序排列完为止。所以,这是一个重复寻找最大数问题。每找一个最大数,要逐个与数列比较,将其作为内循环处理。当找到一个最大数后,还要在数列中找下一个次大的数,要重复使用循环程序,用控制重复执行内循环的程序部分作为外循
27、环程序,这是一个二重循环程序。 源程序:DATA SEGMENTADDR DB 4AH,63H,27H,48H,22H,39H,DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV CX,100-1 ;置计数器初值 MOV SI,OFFSET ADDR ;取数据序列首指针 LP1: MOV DX,CX ;置内循环计数器 MOV DI,SI ;置内循环地址指针 MOV AL,DI ;取数 LP2: INC DI ;指向下一个数地址
28、 CMP AL,DI ;判大小 JAE NEXT ;AL大,转NEXT MOV BL,AL ;否则,交换数据 MOV AL,DI MOV DI,BL NEXT: DEC DX ;本遍比较完? JNZ LP2 ;未完,转LP2 MOV SI,AL ;完,存最大数 INC SI ;调整外循环地址指针 LOOP LP1 ;未排完队列,转LP1 RET ;排完,返回 CODE ENDS END START子程序:重复使用的程序段或具有通用性便于共享的子程序:重复使用的程序段或具有通用性便于共享的 程序段程序段1.1.调用子程序用调用子程序用CALLCALL指令,返回调用程序用指令,返回调用程序用RET
29、RET指令指令2. 现场的保护和恢复现场的保护和恢复 现场:现场:指转向子程序执行时主程序的状态,包括当指转向子程序执行时主程序的状态,包括当时标志寄存器、段寄存器、通用寄存器的内容时标志寄存器、段寄存器、通用寄存器的内容退出子程序前要退出子程序前要恢复现场恢复现场。 现场的保护和恢复分别用现场的保护和恢复分别用PUSH和和POP指令实现指令实现 调用前要预先确定子程序中要调用前要预先确定子程序中要使用哪些寄存使用哪些寄存器,并定义入口参数和出口参数器,并定义入口参数和出口参数。 参数传递的方法:参数传递的方法:(1)使用约定的寄存器传递)使用约定的寄存器传递 (2)使用约定的存储单元传递)使
30、用约定的存储单元传递 (3)使用堆栈传递)使用堆栈传递 (要用(要用BP寻址)寻址)4.4 4.4 子程序子程序例例4.4.2 对存于ADD1地址起的20个非压缩的十进制数,要求用十进制数转ASCII码的子程序完成代码转换,并存于ADD2地址起的单元中,转换后的字符在屏幕上进行显示。十进制数转ASCII码子程序使用段间调用。源程序: NAME SUBPROG EXTRN ADD1:BYTECODE2 SEGMENT PARA PUBLIC CODESPRG PROC FAR ASSUME CS:CODE2 PUBLIC SPRGSTT: MOV AL,ADD1SI ADD AL,30H RET
31、SPRG ENDPCODE2 ENDS END NAME EXDATA SEGMENTADD1 DB 04H,05H,06H,02H,07H,05H,02H,03H,05H,08H DB 08H,07H,09H,04H,09H,08H,05H,06H,07H,06H ADD2 DB 20 DUP(?)ADD3 EQU 20DATA ENDSSTACK SEGMENT PARA STACK STACK DW 100 DUP(?)STACK ENDS PUBLIC ADD1 EXTRN SPRG:FARCODE1 SEGMENT PARA PUBLIC CODE ASSUME CS:CODE1,D
32、S:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV DI,0 MOV SI,0 MOV CX,ADD3LP: CALL SPRG ;段间调用 MOV ADD2DI,AL INC DI INC SI MOV DL,AL MOV AH,02 INT 21H MOV DL, INT 21H LOOP LP MOV AH,4CH INT 21HCODE1 ENDS END START4.4.4 4.4.4 调用程序和子程序间的参数传递调用程序和子程序间的参数传递一、子程序说明文件一、子程序说明文件 子程序说明文件子程序说明文件主要信息:()子程序的名称及其功能
33、;()子程序的入口参数说明;()子程序的出口参数说明;()子程序所使用的寄存器及存储区;()子程序调用其它子程序的方式及名称。 二、主程序和子程序之间的参数传递方式二、主程序和子程序之间的参数传递方式1利用寄存器传递参数利用寄存器传递参数 2利用存储器传递参数利用存储器传递参数 3利用堆栈传递参数利用堆栈传递参数 利用存储器传递参数举例利用存储器传递参数举例例例4.4.4 在ABCD地址起有N位带符号十进制数,其首字符表示为符号(用全0、全1码分别表示正和负)。数的高位在低地址,低位在高地址,将其转为对应的二进制数(负数用补码表示),并存于ABIN起的地址单元中,限定十进制数在士65535范围
34、之中。 分析:为实现N 位带符号的十进制数转换为二进制数,将十进制数表示为下式: d0、d1、d2、d3、d4、d(n-1),其中d0为符号位。考虑相邻位数权值相差10倍,则该十进制数的二进制数值可用下式表示:(d1*1O+d2)*1O+d3)*10+)*10+d(n-1)若符号位为正,则该值即为二进制正数值。若符号位为负,则应将该数转为负数的补码。 为了实现存储器参数传递,由SI作十进制数地址指针,DI作二进制数地址指针,CX指示十进制数位长。子程序返回参数由AX提供, AX=0,表示十进制数有错或结果溢出。AX0,表示其内容为正确的二进制数结果。 源程序:STACK SEGMENTPARA
35、 STACK STACK DB 200 DUP(?)STACK ENDSDATA SEGMENT ABCD DB 0,0,0,3,4,5ABIN DB 3 DUP(O)N EQU 6 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME SS:STACK START: MOV AX,DATA MOV DS,AXLEA SI,ABCD ;置数据地址指针(含符号位) LEA DI,ABIN ;置结果数据地址指针 (含符号位) MOV CX,N-1 ;置计数器初值 CALL DTOB ;调用 DTOB子程序 CMP AX,O ;返回码表错? JNE
36、 FIN ;无错,转 FIN MOV DL,0 ;显示 0,表示结果有错。 MOV AH,02H INT 21H FIN: MOV AH,4CH INT 21H CODE ENDS ;子程序名:DTOB ;功能:把由SI指出的存储单元中的有符号十进制数转换为二进制数,结果存于AX寄存器中。;入口参数: SI指向十进制数(非压缩BCD数)首址; DI指向二进制数存储区首址; CX十进制数位长(含符号位);出口参数:AX返回码,AX=0,十进制数有错或结果溢出; AX0, AX中为转换后的二进制数。;使用寄存器:BX为存放各十进制数位运算值,DX存放乘积运算的高位值。DTOB PROC PUSH
37、DX ;保护寄存器 PUSH BX MOV BL,SI ;取符号 CMP BL,0 JZ PLUS ;为正,转PLUS CMP BL,OFFH ;为负吗? JNZ EROR ;非负非正转EROR处 PLUS:MOV DI,BL ;存结果的符号DEC CXINC SIMOV AL,SI ;取十进制数高位存AX中MOV AH,0MOV DX,10 NEXT:PUSH DXMUL DX ;AX*10AXPOP DXINC SIMOV BL,SI ;取低位十进制数MOV BH,0ADD AX,BX ;AX加上低位数JC EROR ;进位,转ERORLOOP NEXT ;未处理完循环 CMP BYTE
38、PTR DI,OFFH ;判结果符号 JNZ DONE ;非负数,结束 NEG AX ;负数,取补 MOV WORD PTR DI,AX ;补码送回 JMP DONEEROR:MOV AX,0 ;置错误返回码DONE:POP BX POP DX RETDTOB ENDPCODE ENDS END START利用堆栈传递参数举例利用堆栈传递参数举例例例4.4.5 NUMB 开始的地址处,有5个压缩型BCD码,将它们相加,其和在屏幕上显示。源程序: STACK SEGMENT PARA STACK STACK DW 50 DUP (?) TOP LABEL WORDSTACK ENDSDATA S
39、EGMENTNUMB DB 25H,36H,78H,49H,07H NOUT DB 5 DUP(?)N EQU 5 DATA ENDS EXTRN ADDS:FAR DIS MACRO X MOV DL,X OR DL,30H MOV AH,02 INT 21H ENDM MCODE SEGMENT PARA PUBLIC CODE ASSUME CS:MCODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,OFFSET TOPMOV AX,OFFSET NUMBPUSH AXMOV AX,NPU
40、SH AXCALL ADDSCALL DISPMOV AH,4CHINT 21HDISP PROC MOV BX,AX ;存累加和MOV CL,4SHR AH,CL ;右移叫工DIS AH ;显示高位值MOV AH,BHAND AH,OFH ;取低位数 DIS AH ;显示低位数 SHR AL,CL DIS AL MOV AL,BLAND AL,0FHDIS ALRETDISP ENDPMCODE ENDSEND STARTNAME ADDSRSCODE SEGMENT PARA PUBLIC CODE ASSUME CS:SCODEADDS PROC FARPUBLIC ADDSPUSH B
41、PMOV BP,SPPUSH CXPUSH BXMOV CX,BP+6 ;取数据项数NMOV BX,BP+8 ;取数据首地址 MOV AX,0ADER:ADD AL,BXDAAADC AH,0INC BXLOOP ADERPOP BXPOP CXPOP BPRET 4 ;退回到本例使用前的栈顶 ADDS ENDP SCODE ENDSEND 45 软中断和软中断和BIOS调用调用 4 45 51 8088/80861 8088/8086的中断系统的中断系统一、一、8088/80868088/8086的中断源的中断源 软中断软中断 软中断指令格式:INT nn为中断类型号, n 0 256。 0
42、7中断类型号做为内部中断不可屏蔽中断的类型号。80FH做为外部硬中断。内部中断(1)除法溢出中断)除法溢出中断 (2)溢出中断)溢出中断 (3)单步中断)单步中断 二、二、 中断矢量表中断矢量表 1中断矢量表结构与功能中断矢量表结构与功能 中断矢量表中断矢量表 存256个中断处理程序入口地址的表,共占用1024个字节,位于物理(0段)地址OOO0OH-003FFH 。 每个入口地址占四个字节,高两个字节存放中断处理程序的段地址,低两个字节存放中断处理程序的段内偏移量。4.5.2 4.5.2 软中断程序设计及执行过程软中断程序设计及执行过程 一、一、用户软中断设置的内容用户软中断设置的内容1.确
43、定一个允许用户使用的中断类型号n。 2.编写软中断的处理程序,明确其入口参数及出口参数的规定。 3.将中断处理程序入口地址写入中断矢量表。 二、中断处理程序的结构二、中断处理程序的结构 1.保护现场保护现场 2.中断处理程序的主要内容中断处理程序的主要内容 3.恢复现场恢复现场 4.中断返回中断返回 中断处理程序的一般结构:INTPRG PROC FAR/NEARSTI ;开中断,适合嵌套方式PUSH DS ;保护现场PUSH DXPUSH AXPUSH BXPUSH DI ;中断处理指令序列(略)POP DI ;恢复现场POP BXPOP AXPOP DXPOP DSIRET ;中断返回IN
44、TPRG ENDP 三、三、 填写中断矢量表填写中断矢量表 中断处理程序的入口地址,存放在中断矢量表中的4n地址处。 DOS系统25H调用填写中断矢量表的填写中断矢量表的方法:(1)AH25H,AL中断类型号n; (2) DS:DX中断处理程序的入口地址(段地址:段内偏移量); (3) 执行INT 21H指令,即可将中断处理程序的入口地址写入中断矢量表。例:例:将中断处理程序的入口地址写入中断矢量表 CODE SEGMENTASSUME CS:CODE ST: MOV AX,SEG INTP ;取中断处理子程序段地址MOV DS,AXMOV AX,OFFSET INTP ;取中断处理子程序偏移量MOV DX, AXMOV AL,n ;置中断类型号MOV AH,25H ;置DOS调用功能号INT 21H INTP PROC ;中断处理程序 IRETINTP ENDP CO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储区域防潮改造工程启动确认函4篇范本
- 招聘工作合规保证承诺书4篇
- 心灵驿站抒情散文(11篇)
- 健康养生领域产品品质保证承诺书7篇
- 社区物业管理服务升级承诺书7篇
- 2025 八年级地理下册三江源地区生态保护的生态补偿机制完善课件
- 2025 八年级地理上册黄河流域的生态保护与经济转型耦合模型课件
- Unit3+语法专项课件-+频率副词-2025-2026学年冀教英语七年级下册
- 采购管理标准化流程与采购单模板
- 护理临床教学查房:患者安全与风险管理
- 月子中心消防管理制度
- 人工智能导论第五版课件
- 概念验证项目协议书
- 工程造价预算编制服务方案(技术方案)
- 调饮技术大赛考试题库400题(含答案)
- 读书的力量:因声求气以读悟读-《孙权劝学》课件
- 2025人教鄂教版(2024)小学科学一年级下册教学计划、教学设计及教学反思(附目录)
- 军事化管理实施方案
- T-NMSP 8-2024 农用废旧地膜回收与再生利用技术规范
- DB37 T 2320-2013 海洋大气区钢筋混凝土构筑物涂装防腐 技术规程
- 投诉管理制度及流程
评论
0/150
提交评论