版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.3第第7 7章章汇编语言程序设计汇编语言程序设计 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.17.1 顺序结构程序设计顺序结构程序设计 7.27.2 分支结构程序设计分支结构程序设计 7.37.3 循环结构程序设计循环结构程序设计 第第7 7 章章 汇汇编编语语言言程程序序设设计计7.47.4 子程序与宏子程序与宏 7.57.5 系统功能调用系统功能调用 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.3本章要点本章要点l结构化程序设计的基本结构及结构化程序
2、设计的基本结构及程序设计方法。程序设计方法。l子程序与宏的程序设计方法子程序与宏的程序设计方法第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.1 7.1 顺序结构程序设计顺序结构程序设计 顺序结构顺序结构第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.1 7.1 顺序结构程序设计顺序结构程序设计 例例7.1 编程实现编程实现123*456MM DD ?MOV AX , 123MOV BX , 456MUL BXMOV M , AXMOV M+2 , DX第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37
3、.1 7.1 顺序结构程序设计顺序结构程序设计 例例7.2 从键盘上键入从键盘上键入0至至9中任一个自然数,求其立中任一个自然数,求其立方值。方值。数据段定义如下:数据段定义如下:DATA SEGMENT INPUT DB PLEASE INPUT X(09):$ TAB DW 0,1,8,27,64,125,216,343,512,729 X DB ? XXX DW ?DATA ENDS第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.1 7.1 顺序结构程序设计顺序结构程序设计 程序段如下:程序段如下: INT 21H ; 用用9号功能显示字符串号功能显示字符
4、串 MOV AH,1 INT 21H ; 从键盘输入一个字符从键盘输入一个字符AL AND AL,0FH MOV X,AL ; 将将ASCII码转换成真值码转换成真值 ADD AL,AL MOV BL,AL MOV BH,0 ; 计算在表中的偏移量送计算在表中的偏移量送BX MOV AX,TABBX ; 查表获得立方值查表获得立方值 MOV XXX,AX ; 将立方值保存在将立方值保存在XXX单元单元 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2 7.2 分支结构程序设计分支结构程序设计 7.2.17.2.1 利用比较与条件转移实现分支利用比较与条件转移实
5、现分支 7.2.27.2.2 利用跳转表实现分支利用跳转表实现分支 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.1 7.2.1 利用比较与条件转移实现分支利用比较与条件转移实现分支 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.1 7.2.1 利用比较与条件转移实现分支利用比较与条件转移实现分支 例例7.3 求两个无符号数差的绝对值,结果存放在求两个无符号数差的绝对值,结果存放在D1单元中。单元中。DATA SEGMENT D1 DB ? D2 DB 0F5H,68HDATA ENDSCODE SEGMENT ASS
6、UME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA BX,D2 MOV AL,BX ;取第取第1个数个数 INC BX第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.1 7.2.1 利用比较与条件转移实现分支利用比较与条件转移实现分支 MOV CL,BX ;取第取第2个数个数 CMP AL,CL ;两个数比较两个数比较 JAE BIGR ; 大于等于,则转大于等于,则转BIGR SUB CL,AL ;否则,第否则,第2个数减第个数减第1个数个数 MOV D1,CL ;两数差的绝对值存两数差的绝对值存D1单元
7、单元 JMP RSTBIGR:SUB AL,CL ;第第1个数减去第个数减去第2个数个数 MOV D1,ALRST: MOV AH,4CH INT 21HCODE ENDS END START第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.1 7.2.1 利用比较与条件转移实现分支利用比较与条件转移实现分支 例例7.4 设在设在A、B、C字型变量中存放着字型变量中存放着3个数,若个数,若3个个数均不为数均不为0,则求出它们的和(不考虑溢出)存入,则求出它们的和(不考虑溢出)存入D单单元。元。DATA SEGMENT A DW 108 B DW 0 C DW
8、45 D DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.1 7.2.1 利用比较与条件转移实现分支利用比较与条件转移实现分支 MOV BH, 0 ;BH淸淸0 MOV D, 0 ;变量变量D淸淸0 CMP A, 0 ;判断变量判断变量A是否为是否为0 JNE NT1 ;A非非0则转去判断变量则转去判断变量B INC BH ;A为为0则则BH加加1NT1: CMP B, 0 ;判断变量判断变量B是否为是否为0 J
9、NE NT2 ;B非非0则转去判断变量则转去判断变量C INC BH ;B为为0则则BH加加1NT2: CMP C, 0 ;判断变量判断变量C是否为是否为0 JNE NT3 ;C非非0则转去判断寄存器则转去判断寄存器BH第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.1 7.2.1 利用比较与条件转移实现分支利用比较与条件转移实现分支 INC BH ;C为为0则则BH加加1NT3: CMP BH,0 ;判断寄存器判断寄存器BH是否为是否为0 JNE EXIT ;BH非非0则程序结束则程序结束 MOV AX, A ;BH为为0则求和并存入则求和并存入D单元单元
10、 ADD AX, B ADD AX, C MOV D, AXEXIT:MOV AH, 4CH INT 21HCODE ENDS END START第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.2 7.2.2 利用跳转表实现分支利用跳转表实现分支 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.2 7.2.2 利用跳转表实现分支利用跳转表实现分支 例例7.5 某工厂有某工厂有n+1种产品种产品R0、R1、R2、.、Rn的加工程序,分别存放在的加工程序,分别存放在PR0、PR1、PR2、.PRn为首地址的内存区域中。而这为首
11、地址的内存区域中。而这n+1个首地址个首地址的偏移量连续存放在以的偏移量连续存放在以BASE为基地址的跳转表为基地址的跳转表中。已知产品编号存放在中。已知产品编号存放在NUM单元中,要求编写单元中,要求编写程序,能够根据产品编号转至相应的处理程序。程序,能够根据产品编号转至相应的处理程序。DATA SEGMENTBASE DW PR0,PR1,PR2,.,PRn ;定义;定义跳转表跳转表NUM DB 4DATA ENDS第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.2 7.2.2 利用跳转表实现分支利用跳转表实现分支 CODE SEGMENT ASSUME
12、 CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX XOR AX,AX ;清;清AX MOV AL,NUM ;取加工的产品编号;取加工的产品编号i ADD AX,AX ;2*i,获得偏移量,获得偏移量 MOV BX,OFFSET BASE ;获得跳转表首地址;获得跳转表首地址 ADD BX,AX ;获得对应的单元地址;获得对应的单元地址 JMP BX ;转入相应的加工子程序;转入相应的加工子程序 MOV AH,4CH ;程序结束;程序结束 INT 21H第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.2 7.2.2 利用跳
13、转表实现分支利用跳转表实现分支 PRO PROC NEAR ;加工子程序;加工子程序 .PR0 ENDP ;PR1 PROC NEAR .PR1 ENDP ; .PRn PROC NEAR .PRn ENDPCODE ENDS END START第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.2.2 7.2.2 利用跳转表实现分支利用跳转表实现分支 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3 7.3 循环结构程序设计循环结构程序设计 7.3.17.3.1 循环程序结构循环程序结构 7.3.3 7.3.3 循环程序设计举例循
14、环程序设计举例 7.3.2 7.3.2 循环的控制方法循环的控制方法 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.1 7.3.1 循环程序结构循环程序结构 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.1 7.3.1 循环程序结构循环程序结构 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.2 7.3.2 循环的控制方法循环的控制方法 (1)计数控制)计数控制用于循环次数已知的情况。通常采用用于循环次数已知的情况。通常采用CX寄存器为寄存器为循环计数器。循环计数控制一般用循环计数器
15、。循环计数控制一般用LOOP指令实现。指令实现。(2)条件控制)条件控制用于循环次数未知,但却已知一些循环或不循环的用于循环次数未知,但却已知一些循环或不循环的条件。条件。(3)逻辑尺控制)逻辑尺控制这是汇编语言循环程序设计独有的方式。所谓逻辑这是汇编语言循环程序设计独有的方式。所谓逻辑尺,是指具有一定长度的一串二进制数。该方式按尺,是指具有一定长度的一串二进制数。该方式按照逻辑尺的指示,决定对循环体中某一部分的执行照逻辑尺的指示,决定对循环体中某一部分的执行或不执行。或不执行。 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举
16、例循环程序设计举例 例例7.6 编程计算编程计算Y=a1+a2+a100。(其中。(其中ai为为16位位二进制整数,设和值不大于二进制整数,设和值不大于16位二进制整数表数范位二进制整数表数范围)围) DATA SEGMENT TAB DW a1,a2,.,a100 Y DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX 单重循环程序设计举例单重循环程序设计举例 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例
17、 XOR AX,AX ; 初始化部分,累加和清初始化部分,累加和清0 LEA BX,TAB ;BX指向加数首地址指向加数首地址 MOV CX,100 ;设置减计数初值设置减计数初值 LP:ADD AX,BX ;循环体开始,累加循环体开始,累加 INC BX ;修改部分,修改修改部分,修改BX INC BX LOOP LP ;控制部分,控制部分,CX减计数减计数 MOV Y,AX ;结束部分,存放结果结束部分,存放结果 MOV AH,4CH INT 21H CODE ENDS END START第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循
18、环程序设计举例循环程序设计举例 例例7.7 写一个把字符串中的所有大写字母改写为小写一个把字符串中的所有大写字母改写为小写字母的程序。设字符串以写字母的程序。设字符串以$结尾。结尾。DATA SEGMENT STRING DB I am A Student!,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV SI,OFFSET STRING ;取串首地址取串首地址 AGAIN:MOV AL, SI ;取一字符取一字符 CMP AL, $ ;是否到字符串尾是否到字符串尾第第7 7章章 汇编语言
19、程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 JE OK ;到字符串尾到字符串尾,跳出循环跳出循环 CMP AL, A ;否则否则,判断是否为大写字母判断是否为大写字母 JB NEXT ;否,转继续否,转继续 CMP AL, Z JA NEXT ;否,转继续否,转继续 OR AL, 20H ;是大写字母,改为小写字母是大写字母,改为小写字母NEXT: INC SI ;调整指针调整指针 JMP AGAIN ;继续循环继续循环OK: MOV AH, 4CH ;结束结束 INT 21HCODE ENDS END START第第7 7章章
20、 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 例例7.8 设计一个程序判断无符号字型数组设计一个程序判断无符号字型数组BUFFER的若干个元素中是否含有数字的若干个元素中是否含有数字0,如有则把第一个,如有则把第一个0元素所在存储单元的偏移地址送字型变量元素所在存储单元的偏移地址送字型变量ADDR,如没有则将该变量的值置为如没有则将该变量的值置为0FFFFH。数据段定义如下:数据段定义如下:DATA SEGMENT BUFFER DW 23, 65, 89, COUNT EQU $-BUFFER ; 元素个数元素个数 A
21、DDDR DW ?DATA ENDS第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 程序段如下:程序段如下: MOV BX,OFFSET BUFFER ;数组地址到数组地址到BX MOV CX, COUNT ;置循环最大次数置循环最大次数AGAIN:MOV AX, BX ;取一元素取一元素 CMP AX, 0 ;与与0比较比较 JZ YES ;相等则跳出循环相等则跳出循环 ADD BX, 2 ;修改地址指针修改地址指针 LOOP AGAIN ;循环控制循环控制 MOV ADDR, 0FFFFH ;没找到没找到
22、 JMP EXITYES: MOV ADDR, BX ;找到找到EXIT: . ;结束结束第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 例例7.9 设字型数组设字型数组X、Y分别有分别有12个元素,试形成个元素,试形成一个一个Z数组,使该数组的各元素满足以下关系:数组,使该数组的各元素满足以下关系:Z0=X0+Y0 Z1=X1+Y1 Z2=X2-Y2 Z3=X3+Y3 Z4=X4+Y4 Z5=X5+Y5Z6=X6+Y6 Z7=X7-Y7 Z8=X8-Y8Z9=X9+Y9 Z10=X10+Y10 Z11=X1
23、1-Y11 逻辑尺的定义:用逻辑尺的定义:用0表示加运算,用表示加运算,用1表示减运算,表示减运算,则则12个式子的运算操作按个式子的运算操作按Z11,Z10,Z9,Z0的的顺序可表示为二进制数顺序可表示为二进制数100110000100。为存放这个。为存放这个二进制数,可在内存中定义一个字变量,将二进制二进制数,可在内存中定义一个字变量,将二进制数作为该变量的低数作为该变量的低12位,变量的高位,变量的高4位无意义。位无意义。 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 数据段定义如下:数据段定义如下:
24、DATA SEGMENT X DW 3,65,96,45,86,8,50,7,76,45,75,5 Y DW 9,45,23,6,74,8,21,45,12,4,64,87 Z DW 12 DUP(?) RULER DW 0000100110000100BDATA ENDS主要程序段如下:主要程序段如下: MOV BX,0 ;置地址指针置地址指针 MOV CX, 12 ;置循环次数置循环次数 MOV DX, RULER第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 AGAIN:MOV AX, XBX ;取数组
25、取数组X一元素一元素 SHR DX, 1 ;逻辑尺右移一位逻辑尺右移一位 JC SUBS ;移出位为移出位为1则相减则相减 ADD AX, YBX ;否则相加否则相加 JMP NEXTSUBS: SUB AX, YBXNEXT: MOV ZBX, AX ;将结果存入将结果存入Z数组数组 ADD BX, 2 ;修改地址指针修改地址指针 LOOP AGAIN ;循环控制循环控制EXIT: MOV . . ;结束结束第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 例例7.11 用冒泡排序法对有符号字型数组用冒泡排序
26、法对有符号字型数组ARY按升按升序排列。序排列。下面是对有下面是对有7个元素的无序表进行冒泡排序:个元素的无序表进行冒泡排序:表的初始状态:表的初始状态: 36 48 66 98 75 13 28 第一遍比较之后:第一遍比较之后: 36 48 66 75 13 28 98第二遍比较之后:第二遍比较之后: 36 48 66 13 28 75 98第三遍比较之后:第三遍比较之后: 36 48 13 28 66 75 98第四遍比较之后:第四遍比较之后: 36 13 28 48 66 75 98第五遍比较之后:第五遍比较之后: 13 28 36 48 66 75 98第六遍比较之后:第六遍比较之后:
27、 13 28 36 48 66 75 98第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 数据段定义如下:数据段定义如下:DATA SEGMENT ARY DW n1, n2, n3, N EQU ($-ARY)/2 ;数组元素个数数组元素个数DATA ENDS主要程序段定义如下:主要程序段定义如下: MOV CX, N-1 ;置外循环次数置外循环次数LOOP1:PUSH CX ;保存外循环计数器的值保存外循环计数器的值 MOV BX, 0 ;置地址指针置地址指针第第7 7章章 汇编语言程序设计汇编语言程序设
28、计 7.27.1作业作业7.37.3.3 7.3.3 循环程序设计举例循环程序设计举例 LOOP2:MOV AX, ARYBX ;取前面元素到取前面元素到AX CMP AX, ARYBX+2 ;与后面元素比较与后面元素比较 JLE OK ;次序正确则转到下一步次序正确则转到下一步 XCHG AX, ARYBX+2 ;否则否则,交换位置交换位置 MOV ARYBX, AX OK: ADD BX, 2 ;修改地址指针修改地址指针 LOOP LOOP2 ;内循环控制内循环控制 POP CX ;将将CX恢复为外循环计数器值恢复为外循环计数器值 LOOP LOOP1 ;外循环控制外循环控制 第第7 7章
29、章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4 7.4 子程序与宏子程序与宏 7.4.17.4.1 子程序子程序 7.4.27.4.2 宏宏 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 子程序的调用和返回子程序的调用和返回 SP返回地址偏移返回地址偏移CSIP返回地址偏移返回地址偏移IPCSSP返回地址段值返回地址段值返回地址段值返回地址段值CALL指令执行后指令执行后 RET指令执行后指令执行后 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程
30、序子程序 要实现子程序的正确调用返回,必须注意:要实现子程序的正确调用返回,必须注意:(1) 正确定义子程序的类型。正确定义子程序的类型。(2) CALL和和RET指令必须成对出现。指令必须成对出现。(3) 正确使用堆栈。正确使用堆栈。 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 典型的保护和恢复寄存器编程举例如下:典型的保护和恢复寄存器编程举例如下:子程序名子程序名 PROC NEAR(或(或FAR)PUSH AX ;保护现场保护现场PUSH BXPUSH CXPUSH DXPUSHF.第第7 7章章 汇编语言程序设计汇编
31、语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 .POPF ;恢复现场恢复现场POP DXPOP CXPOP BXPOP AXRET子程序名子程序名 ENDP第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 参数传送的主要方法有以下几种:参数传送的主要方法有以下几种:(1)通用寄存器传送参数。主程序调用子程)通用寄存器传送参数。主程序调用子程序时,将要传送的参数装入某些指定寄存器;序时,将要传送的参数装入某些指定寄存器;子程序返回时也将结果装入指定的寄存器。子程序返回时也将结果装入指定的寄存器。(2)
32、存储单元传送参数。指定某些存储单元)存储单元传送参数。指定某些存储单元存放主程序与子程序之间要传递的参数。存放主程序与子程序之间要传递的参数。(3)堆栈传送参数。主程序把参数或参数地)堆栈传送参数。主程序把参数或参数地址压入堆栈,子程序通过访问堆栈取得参数。址压入堆栈,子程序通过访问堆栈取得参数。第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 子程序的说明信息至少应该包含下面几个部分:子程序的说明信息至少应该包含下面几个部分:;子程序名:;子程序名:;功;功 能:能:;入口参数:;入口参数:;出口参数:;出口参数:;其它说明:;
33、其它说明:第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 例例7.12 编写一个对字型数组各元素求和的子程序编写一个对字型数组各元素求和的子程序(不考虑进位不考虑进位),并在主程序中调用该子程序分别求字,并在主程序中调用该子程序分别求字型数组型数组A1和和A2的各元素之和。的各元素之和。(1)使用通用寄存器传递参数)使用通用寄存器传递参数DATA SEGMENT A1 DW 30H,20H,10,30H,6BH N1 EUQ ($-A1)/2 ;获得获得A1元素的个数元素的个数 SUM1 DW ? ;存放数组存放数组A1的和的和
34、 A2 DW 45,12,-4,89,6CH,0DH,35 N2 EUQ ($-A2)/2 ;获得获得A2元素的个数元素的个数 SUM2 DW ? ;存放数组存放数组A2的和的和 DATA ENDS第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 主要程序如下:主要程序如下:.LEA BX, A1 ;传送数组传送数组A1的地址到的地址到BXMOV CX, N1 ;传送传送A1的元素个数到的元素个数到CXLEA SI, SUM1 ;传送传送SUM1的地址到的地址到SICALL ARY_SUM ;调用子程序对数组调用子程序对数组A1求
35、和求和LEA BX, A2 ;传送数组传送数组A2的地址到的地址到BXMOV CX, N2 ;传送传送A2的元素个数到的元素个数到CXLEA SI, SUM2 ;传送传送SUM2的地址到的地址到SICALL ARY_SUM ;调用子程序对数组调用子程序对数组A2求和求和MOV AH, 4CHINT 21H第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 ;子程序名:子程序名:ARY_SUM ;功能:求字型数组各元素之和。功能:求字型数组各元素之和。 ;入口参数:入口参数:BX=数组地址;数组地址;CX=数组元数组元素个数;素个数;
36、SI=存和地址存和地址 ;出口参数:无出口参数:无ARY_SUM PROC NEAR PUSH AX XOR AX, AX ;AX清零清零第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 AGAIN: ADD AX, BX ; 对数组求和对数组求和 ADD BX, 2 LOOP AGAIN MOV SI, AX ;存和存和 POP AX RETARY_SUM ENDPCODE ENDSEND START第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 (2)使用存储单
37、元传递参数)使用存储单元传递参数数据段定义如下:数据段定义如下:DATA SEGMENT A1 DW 30H,20H,10,30H,6BH N1 EUQ ($-A1)/2 ;获得获得A1数组元素的个数数组元素的个数 SUM1 DW ? A2 DW 45,12,-4,89,6CH,0DH,35 N2 EUQ ($-A2)/2 ;获得获得A2数组元素的个数数组元素的个数 SUM2 DW ? TABLE DW 3 DUP(?) ;定义参数表定义参数表DATA ENDS第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 调用子程序对数组调用
38、子程序对数组A1求和:求和: LEA BX, TABLE ;将参数表地址传送将参数表地址传送BX LEA AX, A1 ;将数组将数组A1参数填入参数表参数填入参数表 MOV BX, AX MOV AX, N1 MOV BX+2, AX LEA AX, SUM1 MOV BX+4, AX CALL ARY_SUM ;调用子程序对数组调用子程序对数组A1求和求和第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 ;子程序名:子程序名:ARY_SUM ;功能:求字型数组各元素之和。功能:求字型数组各元素之和。 ;入口参数:入口参数:BX
39、=参数表地址;参数表地址; ;参数参数1=数组地址;参数数组地址;参数2=元素个数;参数元素个数;参数3=存和地址存和地址 ;出口参数:无出口参数:无ARY_SUM PROC NEAR PUSH AX PUSH CX PUSH SI MOV SI, BX ;取参数取参数1到到SI MOV CX, BX+2 ;取参数取参数2到到CX XOR AX, AX第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 AGAIN: ADD AX, SI ; 对数组求和对数组求和 ADD SI, 2 LOOP AGAIN MOV SI, BX+4 ;
40、取参数取参数3到到SI MOV SI, AX ; 存和存和 POP SI POP CX POP AX RETARY_SUM ENDPCODE ENDSEND START第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 (3)使用堆栈传递参数)使用堆栈传递参数调用子程序对数组调用子程序对数组A1求和:求和: LEA AX, A1 ;数组数组A1的相关参数入栈的相关参数入栈 PUSH AX MOV AX, N1 PUSH AX LEA AX, SUM1 PUSH AX CALL ARY_SUM第第7 7章章 汇编语言程序设计汇编语言程
41、序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 ;子程序名:子程序名:ARY_SUM ;功能:求字型数组各元素之和。功能:求字型数组各元素之和。 ;入口参数:使用堆栈传递参数。入口参数:使用堆栈传递参数。 ;参数入栈顺序:参数入栈顺序:1、数组地址;、数组地址;2、数组元素个数;、数组元素个数;3、存和地址、存和地址 ;出口参数:无出口参数:无ARY_SUM PROC NEAR PUSH AX PUSH CX PUSH SI PUSH BP MOV BP, SP MOV SI, BP10 ;取数组地址到取数组地址到SI MOV CX, BP+12 ;取元素个数到取元素个
42、数到CX 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 XOR AX, AX AGAIN: ADD AX, SI ;用循环语句对数组求和用循环语句对数组求和 ADD SI, 2 LOOP AGAIN MOV SI, BP+14 ;取存和地址到取存和地址到SI MOV SI, AX ;将数组和存入指定地将数组和存入指定地址址 POP BP POP SI POP CX POP AX RET 6第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.1 7.4.1 子程序子程序 数组地址数组地址数组元素个
43、数数组元素个数存和地址存和地址IPIPAXAXCXCXSISIBPBPSPSPBPBPBP+10BP+10BP+12BP+12BP+14BP+14第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.27.4.2 宏宏 宏定义宏定义 定义格式: 宏指令名宏指令名 MACRO 形式参数形式参数,形式参数,形式参数,. 宏体宏体 ENDM例如:例如:ADD3 MACRO X,Y,Z ADD X, Y ADD X, Z ENDM第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.27.4.2 宏宏 宏调用宏调用 宏调用的格式: 宏指令名宏
44、指令名 注意宏指令的参数没有类型,只是一种符注意宏指令的参数没有类型,只是一种符号替换,如果替换后的语句有错误,则宏号替换,如果替换后的语句有错误,则宏扩展时系统会给出提示。扩展时系统会给出提示。 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.2 7.4.2 宏宏 宏扩展宏扩展 宏扩展由汇编程序在汇编的过程中在宏调用宏扩展由汇编程序在汇编的过程中在宏调用的地方用宏体代替宏指令,实参代替形参。的地方用宏体代替宏指令,实参代替形参。例如:已定义了宏指令例如:已定义了宏指令ADD3,在源程序中进,在源程序中进行如下调用:行如下调用:ADD3 AX, BX, CX
45、宏扩展后的形式为:宏扩展后的形式为:+ ADD AX,BX+ ADD AX,CX符号符号“+”用于标志宏扩展的语句。用于标志宏扩展的语句。第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.2 7.4.2 宏宏 例例7.13 调用宏指令实现运算调用宏指令实现运算102030,并,并将结果存放于变量将结果存放于变量SUM中。中。ADD3 MACRO X,Y,Z ADD X, Y ADD X, Z ENDMDATA SEGMENT SUM DW ?DATA ENDS第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.4.2 7.4.2 宏
46、宏 CODE SEGMENT ASSUME CODE:CS,DS:DATASTART: MOV AX, 10 ADD3 AX, 20, 30 ;调用宏指令计算三数之和调用宏指令计算三数之和 MOV SUM AX MOV AH, 4CH INT 21HCODE ENDS END START第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.5 7.5 系统功能调用系统功能调用 7.5.17.5.1 概述概述 7.5.27.5.2 常用的常用的DOSDOS输入输入/ /输出系统功能调用输出系统功能调用 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.5.1 7.5.1 概述概述 第第7 7章章 汇编语言程序设计汇编语言程序设计 7.27.1作业作业7.37.5.2 7.5.2 常用的常用的DOSDOS输入输入/ /输出系统功能调用输出系统功能调用 调用格式:调用格式:MOV AH,lINT 21H功功 能:等待从键盘输入一个字符并将能:等待从键盘输入一个字符并将输入字符的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 艺术修养:提高小学生审美能力的小学主题班会课件
- 寓教于乐润物无声:小学主题班会课件的魅力与应用
- 护士三基三严考试试题(附答案)-1
- 一年级钟表镜面题目及答案
- 一年级下楼题目及答案图片
- 小学生心理健康辅导主题班会课件关爱成长护航
- 守护绿色校园共建文明风尚小学主题班会课件
- 企业培训师演讲技巧培训指导书
- 智慧灯杆智能共享数据线施工方案及技术措施
- 远离心理疾病科学预防小学生心理健康主题班会课件
- DB51T 2498-2018 冬水稻田土壤改良技术规程
- DB62-T 4909-2024餐饮服务提供者操作现场色标化管理规范
- 乙方和甲方对赌协议书范本
- HG∕T 5248-2017 风力发电机组叶片用环氧结构胶粘剂
- 河北省石家庄市正定县2023-2024学年八年级下学期期末教学质量检测物理试卷
- 中国大学mooc《儿童语言康复学(华东师范大学) 》章节测试答案
- 产科新生儿疫苗接种课件
- 个人分析报告优势与劣势
- 深圳市安全文明施工方案
- 重庆市2023年中考道德与法治试卷(AB合卷)【含答案】
- 中国茶文化英文-PPT
评论
0/150
提交评论