「第4章汇编语言程序设计 【本章重点】熟练掌握汇编语言的四种程序设计方法: 顺序程序设计,分支程序设计,循环程序 设计以及子程序设计 【本章难点】确定算法,合理分配内存工作单元
【本章重点】熟练掌握汇编语言的四种程序设计方法: 顺序程序设计,分支程序设计,循环程序 设计以及子程序设计。 【本章难点】确定算法,合理分配内存工作单元。 第4章 汇编语言程序设计
§4.1汇编语言程序设计概述 4.1.1汇编语言程序设计步骤 使用汇编语言设计一个程序大致上可分为以下几个步 骤。 (1)分析问题,明确要求。解决问题之前,首先要明确 所要解决的问题和要达到的目的、技术指标等。 (2)确定算法。根据实际问题的要求、给出的条件及特 点,找出规律性,最后确定所采用的计算公式和计算方 法,这就是一般所说的算法。算法是进行程序设计的依 据,它决定了程序的正确性和程序的指令。 (3)画程序流程图,用图解来描述和说明解题步骤
§4.1 汇编语言程序设计概述 4.1.1 汇编语言程序设计步骤 使用汇编语言设计一个程序大致上可分为以下几个步 骤。 (1) 分析问题,明确要求。解决问题之前,首先要明确 所要解决的问题和要达到的目的、技术指标等。 (2) 确定算法。根据实际问题的要求、给出的条件及特 点,找出规律性,最后确定所采用的计算公式和计算方 法,这就是一般所说的算法。算法是进行程序设计的依 据,它决定了程序的正确性和程序的指令。 (3) 画程序流程图,用图解来描述和说明解题步骤
(4)分配内存工作单元,确定程序与数据区的存 放地址。 (5)编写源程序。 (6)程序优化。 (7)程序调试、修改和最后确定源程序。只有通过 上机调试并得出正确结果的程序,才能认为是正确的 程序。没有调试过的程序,很难保证程序无错误,程 序调试是不可缺省的
(4) 分配内存工作单元,确定程序与数据区的存 放地址。 (5) 编写源程序。 (6) 程序优化。 (7)程序调试、修改和最后确定源程序。只有通过 上机调试并得出正确结果的程序,才能认为是正确的 程序。没有调试过的程序,很难保证程序无错误,程 序调试是不可缺省的
§42顺序程序设计 对于一些简单的数据处理,只要把完成处理的各个步骤用 汇编语言描述清楚,让计算机按指令编写的次序从头到尾 条条执行即可,这样的程序结构称为顺序结构 【例4-1】已知X和Y是数据段中的两个无符号字节单元 用程序完成表达式Z=(X2+Y2)/2的计算。 编制程序如下:
§4.2顺序程序设计 对于一些简单的数据处理,只要把完成处理的各个步骤用 汇编语言描述清楚,让计算机按指令编写的次序从头到尾 一条条执行即可,这样的程序结构称为顺序结构。 【例4-1】已知X和Y是数据段中的两个无符号字节单元, 用程序完成表达式Z=(X2+Y2)/2的计算。 编制程序如下:
DATA SEGMENT DB 15 DB 34 DW? DATA ENDS CODE SEGMENT ASSUME S: CODE, DS: DATA START MOv AX, DATA MOV DS,AX;初始化数据段 MOV AL,X;X中的内容送AL MUL AL ;计算X×X MOV BX,AX;Ⅹ×X乘积送BX MOV AL,Y;Y中的内容送AL MUL AL ;计算Y×Y ADD AX,BX;计算X2+Y2 SHR AX,1;计算(X2+Y2)/2 MOVZ,AX;结果送Z单元 MOV AH, 4CH INT 21H 返回DOS CODE ENDS END START;汇编结束
DATA SEGMENT X DB 15 Y DB 34 Z DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;初始化数据段 MOV AL,X ;X中的内容送AL MUL AL ;计算X×X MOV BX,AX ;X×X乘积送BX MOV AL,Y ;Y中的内容送AL MUL AL ;计算Y×Y ADD AX,BX ;计算X2+Y2 SHR AX,1 ;计算(X2+Y2)/2 MOV Z,AX ;结果送Z单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END START ;汇编结束
【例4-2】从键盘读入两个一位数(按键时保证按下的是数 字键),显示它们的积。 先后从键盘上读取两个按键,分别减去30H得到它们对应的 数值,然后相乘分解成十位数字与个位数字,转换成ASCI 码后依次输出即可。为了输入输出效果的直观,有必要在每 次按键后回车换行。 CODE SEGMENT ASSUME CODE MAIN: MOV AH, 1 INT 读入第1个数字 MOV BL,AL;保存在BL中 MOV AH, 2 MOV DL, 13 VT2H;回车 MOV DL, 10 换行
【例4-2】从键盘读入两个一位数(按键时保证按下的是数 字键),显示它们的积。 先后从键盘上读取两个按键,分别减去30H得到它们对应的 数值,然后相乘分解成十位数字与个位数字,转换成ASCⅡ 码后依次输出即可。为了输入输出效果的直观,有必要在每 次按键后回车换行。 CODE SEGMENT ASSUME CS:CODE MAIN: MOV AH,1 INT 21H ;读入第1个数字 MOV BL,AL ;保存在BL中 MOV AH,2 MOV DL,13 INT 21H ;回车 MOV DL,10 INT 21H ;换行
MOV AH INT21H;读入第2个数字 SUB AL, 30H ;第2个数字转换成十进制数 SUB BL, 30H 第1个数字转换成十进制数 MUL BL ;两个数相乘,积在AX中 MOV BL, 10 DIV BL 积除以10取商送AL,余数在AH中 ADD AX,3030H;转换成相应的ASCⅡ码 MOV BX,AX;保存在BX中 MOV AH, 2 MOV DL, 13 INT 21H 回车 MOV DL, 10 21H 换行 MOV DL, BL MOV AH, 2 2H;输出十位数 MOV DL, BH INT 21H 输出个位数 MOV AH, 4CH INT21H;返回DOS CODE ENDS END MAIN;程序结束
MOV AH,1 INT 21H ;读入第2个数字 SUB AL,30H ;第2个数字转换成十进制数 SUB BL,30H ;第1个数字转换成十进制数 MUL BL ;两个数相乘,积在AX中 MOV BL,10 ; DIV BL ;积除以10取商送AL,余数在AH中 ADD AX,3030H ;转换成相应的ASCⅡ码 MOV BX,AX ;保存在BX中 MOV AH,2 MOV DL,13 INT 21H ;回车 MOV DL,10 INT 21H ;换行 MOV DL,BL MOV AH,2 INT 21H ;输出十位数 MOV DL,BH INT 21H ;输出个位数 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END MAIN ;程序结束
§4.3分支程序设计 分支程序是利用条件转移指令,使程序执行到某 指令后,根据条件是否满足,来改变程序执行的次 序。在程序设计中经常会遇到各种判断和比较,例 如“相等”和“不相等”;“正”和“负”;“大 于”和“小于”;“满足条件”和“不满足条件” 等等,这些判断和比较在程序中都可以组成各种不 同的逻辑框,并产生相应的分支程序
§4.3分支程序设计 分支程序是利用条件转移指令,使程序执行到某一 指令后,根据条件是否满足,来改变程序执行的次 序。在程序设计中经常会遇到各种判断和比较,例 如“相等”和“不相等” ; “正”和“负” ; “大 于”和“小于” ; “满足条件”和“不满足条件” 等等,这些判断和比较在程序中都可以组成各种不 同的逻辑框,并产生相应的分支程序
条件 是 条件2 分支程序段2 分支程序段3 分支程序段1 结束
分支程序段2 分支程序段3 分支程序段1 结束 条件1 条件2 是 否 是 否
【例43】已知AX中放有一个带符号数,编写程序 段,计算它的绝对值 CMP AX, 0 JGE LOOP AL<0? MOV BX, AX AX←0-AX MOV AX, 0 sub AX, BX LOOP
【例4-3】已知AX中放有一个带符号数,编写程序 段,计算它的绝对值。 AX←0-AX AL<0 ? Y N ┇ CMP AX,0 JGE LOOP MOV BX,AX MOV AX,0 SUB AX,BX LOOP: ┇ ┇