《基本程序控制结构》PPT课件

上传人:san****019 文档编号:21587292 上传时间:2021-05-05 格式:PPT 页数:43 大小:277.51KB
收藏 版权申诉 举报 下载
《基本程序控制结构》PPT课件_第1页
第1页 / 共43页
《基本程序控制结构》PPT课件_第2页
第2页 / 共43页
《基本程序控制结构》PPT课件_第3页
第3页 / 共43页
资源描述:

《《基本程序控制结构》PPT课件》由会员分享,可在线阅读,更多相关《《基本程序控制结构》PPT课件(43页珍藏版)》请在装配图网上搜索。

1、第 五 章 顺 序 、 分 支 、 循 环 程 序 设 计(P160) 1.概 述一 .汇 编 语 言 程 序 设 计 的 基 本 步 骤1.分 析 题 意 , 确 定 算 法 (抽 象 出 描 述 问 题 的 数 学 模 型 或 整 理 出 若个 条 规 律 , 找 出 合 理 的 解 法 。 )2.绘 出 程 序 流 程 图3.编 制 程 序 (采 用 分 段 结 构 , 合 理 分 配 存 储 单 元 , 合 理 分 配 寄 存器 )4.调 试 程 序 判 断 程 序 质 量 的 标 准 (1)程 序 的 执 行 时 间 (2)程 序 所 占 用 的 内 存字 节 数 (3)程 序 的

2、语 句 行 数 二 .程 序 的 基 本 结 构 顺 序 、 分 支 、 循 环 , 每 种 结 构 只 有 一 个 入 口 和 一 个 出 口 , 三种 结 构 任 意 组 合 和 嵌 套 , 可 构 成 任 何 复 杂 的 程 序 。 1.顺 序 结 构 的 程 序 设 计1.顺 序 结 构 先 执 行 A操 作 , 再 执 行 B操 作 。 A B AB 流 程 图N-S图Ex1:按 公 式 Y=X*X-50 mov al,mulbuf; (al) x mul al ; (ax) x*x sub ax,50 ; (ax) x*x-50 mov dstbuf,ax; (desbuf) y

3、Ex:写 一 个 把 压 缩 存 放 的 BCD码 , 转 换 为 对 应 的 十 进 制 数字 ASCII码 的 程 序 。Data segmentBcd DB 86HASCII DB 2 dup(0)Data endsCode segment assume cs:code,ds:dataMain proc far start: mov ax,data mov ds,ax mov al,bcd and al, 0fh add al,30h mov ASCII+1,al Mov al,bcdMov cl,4Shr al,clAdd al,30hMov ASCII,alMov ah,4chInt

4、 21h Main endpCode ends end start 863836 ASCIIASCII+1 2.分 支 程 序 设 计分 支 结 构 : 根 据 条 件 判 断 决 定 程 序 的 走 向一 .转 移 指 令 (P85)1.无 条 件 转 移 指 令 格 式 : JMP 说 明 : 常 用 标 号 表 示 。 EX: jmp lab1 mov ax,0 Lab1: mov ax,0ffh (1)段 内 转 移 -只 改 变 IP, 转 移 地 址 由 新 的 IP取 代 。 1)段 内 直 接 短 转 移 格 式 : JMP SHORT OPR 操 作 : (IP) (IP)+

5、D8 说 明 : (1)Opr是 一 个 带 补 码 的 带 符 号 的 数 , 以 満 足 向 前 、向 后 转 移 (一 般 用 符 号 地 址 ), 只 允 许 在 -128+127字 节 内转 移 。 (2)两 字 节 指 令Ex: jmp short hello Hello: mov al,3 Jmp指 令 E8 08老 IP B0 03新 IP MOV指 令D8D8Cs:0100CPU一 旦 执 行 JMP,(IP)=0102H(老 IP) D8=08H新 的 (IP)=0102+D8=010AH 2)段 内 直 接 近 转 移 格 式 : JMP near ptr opr 操 作

6、 : (IP) (IP)+D16 说 明 : Opr是 一 个 带 符 号 数 , 32K内 转 移 , 3字 节 指 令3)段 内 间 接 转 移 格 式 : JMP Word ptr opr 操 作 : (IP) (EA) 说 明 :有 效 地 址 来 自 内 存 单 元 中 的 内 容 , 或 一 个 16位 通 用寄 存 器 中 的 内 容 。Ex: JMP bx (IP) (BX) JMP WORD PTR BP+TABLE JMP BXSI 先 计 算 PA, 找 出 MEM中 的 内 容 送 给 IP (2)段 间 转 移 从 一 个 代 码 段 转 移 到 另 一 个 代 码

7、段 同 , JMP同 时 修 改CS和 IP内 容 。1)段 间 直 接 (远 )转 移 格 式 : JMP FAR PTR OPR 操 作 : (IP) OPR的 段 内 偏 移 地 址 (CS) OPR的 所 在 的 段 地 址 说 明 : 指 令 中 直 接 指 定 要 转 向 的 IP和 CS ex: JMP far ptr next_prog 50EA 02 00 20JMP 新 IP新 CS(IP)=0250H,(CS)=2000H 2)段 间 间 接 转 移 格 式 : JMP DWORD PTR OPR 操 作 : (IP) (EA) (CS) (EA+2) ex: JMP D

8、WORD PTR ALPHASPDI (EA)=(sp)+(di)+alpha 把 (EA)单 元 中 的 内 容 送 入 (IP) 把 (EA+2)单 元 中 的 内 容 送 入 (CS) 2.条 件 转 移 指 令 以 某 些 标 志 位 的 逻 辑 运 算 作 依 据 , 满 足 规 定 的 条 件 转 移 , 否 则 顺 序 执 行 , 转 向 的 目 标 地 址 必 须 在 -128+127之 间 。 (1)格 式 : Jxx (2)说 明 : JXX-转 移 条 件 -标 号 指 令 为 2字 节 使 用 条 件 转 移 指 令 之 前 , 必 须 选 择 影 响 标 志 位 的

9、指 令 (CMP、 TEST等 )。 指 令 转 移 条 件 含 义 JC JNC CF=1 CF=0 有 进 位 (借 位 )转 移无 进 位 (借 位 )转 移JE/JZJNE/JNZ ZF=1 ZF=0 相 等 (等 于 0)转 移不 相 等 (不 等 于 0)转 移 JS JNS SF=1 SF=0 负 数 转 移 正 数 转 移 JO JNO OF=1 OF=0 有 溢 出 转 移 无 溢 出 转 移JP/JPEJNP/JPO PF=1 PF=0 有 偶 数 个 “ 1 转 移 有 奇 数 个 “ 1 转 移(3)单 条 件 转 移 指 令 1)单 一 标 志 位 2)JCXZ格 式

10、 : JCXZ 操 作 : 若 (CX)=0, 转 至 , 否 则 顺 序 执 行 。(4)无 符 号 数 比 较 用 来 判 断 无 符 号 数 的 大 小 , 判 断 条 件 : CF、 ZF指 令 转 移 条 件 含 义JA/JNLE CF=0 AND ZF=0 AB转 移JAE/JNB CF=0 OR ZF=1 A=B转 移JB/JNAE CF=1 AND ZF=0 AB转 移JBE/JNA CF=1 OR ZF=1 AB转 移JGE/JNL SF=OF OR ZF=1 A=B转 移JL/JNGE CF=OF AND ZF=0 AB转 移JLE/JNG A0 if: (ax) x0 x

11、=0 (bx) y -1 x=0?NY=-1 Y=0 Y=1X=0?Y Y N流 程 图 . mov ax,x cmp ax,0 jge biger mov bx,-1 jmp nextBiger:jz equl mov bx,1 jmp nextEqul: mov bx,0Next: ex:已 知 两 个 整 数 变 量 A和 B, 编 程 : (1)若 两 个 数 中 有 一 个 奇 数 , 则将 奇 数 存 入 ABUF单 元 , 偶 数 存 入 BBUF单 元 。(2)若 两 个 数 中 均 为 奇 数 , 则 两 数 分 别 加 1, 并 存 回 原 变 量 处 。(3)若 两 个

12、数 中 均 为 偶 数 ,则 两 数 不 变A、 B同类 ?N Y B偶 ? NB+1 BA+1 AB偶 ? YY A B Data segmentAbuf db x1Bbuf db x2Data endsCode segmentAssume cs:code,ds:dataMain proc farStart: mov ax,data mov ds,ax mov al,abuf mov bl,bbuf xor al,bl test al,01h jz class test bl,01h jz exit xchg bl,abuf mov bbuf,bl jmp exitClass: test b

13、l,01h jz exit inc abuf inc bbufExit: mov ah,4cH int 21H Main endpCode ends end start 3.循 环 程 序 设 计 (P160) 在 应 用 中 , 往 往 要 求 某 一 段 程 序 重 复 执 行 多 次 , 这 时 要 用 循 环 结 构 。一 .循 环 控 制 命 令 (P95) 1 .LOOP指 令 格 式 : LOOP OPR 测 试 条 件 (CX) 0,循 环 操 作 : (1)(CX) (CX)-1 (2)检 测 条 件 , 若 满 足 , 转 移 至 标 号 , 否 则 , 顺 序 执 行 说

14、 明 : (1) 使 用 LOOP前 , 循 环 次 数 送 入 CX (2)本 命 令 等 价 于 : DEC CX JNZ 2 . LOOPZ/LOOPE指 令 (为 0或 相 等 时 循 环 ) 格 式 : LOOPZ/LOOPE OPR 测 试 条 件 ZF=1且 (CX) 0,循 环 操 作 同 上 。 本 指 令 可 以 提 前 结 束 循 环 。 3. LOOPNZ/LOOPNE指 令 (不 为 0或 不 相 等 时 循 环 ) 格 式 : LOOPNZ/LOOPNE OPR 测 试 条 件 ZF=0且 (CX)0,循 环 操 作 同 上 。 本 指 令 可 以 提 前 结 束

15、循 环 。 二 .循 环 程 序 的 结 构1.循 环 程 序 的 组 成(1)初 始 化 : 设 置 循 环 计 数 值 , 设 置 变 量 等(2)循 环 体 : 程 序 的 处 理 部 分(3)循 环 控 制 部 分 : 对 循 环 是 否 结 束 加 以 判 定 ,修 改 变 量 、 指 针 , 为 下 一 次 循 环 作 准 备 。(4)结 束 处 理 : 分 析 、 存 放 程 序 的 结 果 。 2.循 环 程 序 有 两 种 结 构 形 式 (1)DOwhile (当 型 )循 环 初 始 状 态循 环 控 制条 件 ?循 环 体 结 束 处 理NY 循 环 体条 件 ? 先

16、判 断 条 件 , 可 能 循 环体 一 次 也 不 执 行 , 又 称“ 零 迭 代 次 循 环 ” (2)DOUntil (直 到 型 )循 环 初 始 状 态循 环 控 制条 件 ?循 环 体结 束 处 理N Y 循 环 体条 件 ? 先 执 行 后 判 断 , 循 环 体至 少 执 行 一 次 。 三 .循 环 程 序 的 设 计 方 法1. 计 数 器 控 制 循 环 (若 循 环 次 数 有 可 能 为 0, 用 DO WHILE结 构 )(可 正 计 数 或 负 计 数 !)ex5.1(P161): 把 BX寄 存 器 内 的 二 进 制 数 用 十 六 进制 形 式 在 屏 幕

17、 上 显 示 出 来 。(1)算 法 分 析 : BX内 容 从 左 向 右 每 四 位 为 一 组 在 屏幕 上 显 示 (循 环 ), 循 环 次 数 为 4(四 位 二 进 制 数一 组 ), 屏 幕 上 显 示 的 是 ASCII码 。 (AL)(BL),保 留 低 四 位(AL) (AL)+30H(AL)=3A (AL) (AL)+7形 成 AF的 ASCII码Y(DL) (AL), 调 DOS功 能 显 示 初 始 化Bx循 环 左 移 四 位(CH)(CH)-1(CH)=0?N endYN (CH)=4,赋 值 给 BX(负 计 数 )(2)流 程 图 Data segment

18、Number dw 0111011101011111BData endsCode segment assume cs:code,ds:dataMain proc farStart: mov ax,data mov ds,ax lea si,number mov bx,si mov ch,4Rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah Jl printit add al,7hPrintit: mov dl,al mov ah,2 int 21h dec ch jnz rotate mov ah,4ch

19、int 21hMain endpCode ends end start Mov cx,4Rotate:push cx mov cl,4POP CXLOOP ROTATE 2.条 件 控 制 法(循 环 次 数 不 能 确 定 , 満 足 某 个 条 件 可 继 续 循 环 。 )ex: 设 在 内 存 某 一 数 据 区 以 string地 址 开 始 存 放 了 一 字符 串 , 其 最 后 一 个 字 符 为 “ $” (24H), 要 求 检 查 该 字符 串 中 所 有 字 符 的 奇 偶 性 , 规 定 每 个 字 符 对 应 的 一 个字 节 中 必 须 有 偶 数 个 “ 1”

20、, 则 为 正 确 。 若 奇 偶 性 正确 , 结 果 为 0, 否 则 结 果 为 -1。分 析 : 循 环 结 束 的 条 件 有 两 个 (“ 或 ” 的 关 系 ) (1)只 要 有 一 个 字 符 奇 偶 性 错 , 就 退 出 循 环 并 置 结果 单 元 为 -1。 (2)测 试 到 结 束 标 志 “ $” 时 也 退 出 循 环 。 此 时 所有 字 符 奇 偶 性 正 确 , 结 果 为 0。 取 串 首 址 送 BX结 果 单 元 地 址 送 DI取 一 字 符 送 AL(BX) (BX)+1(AL)=“$”PF=0?(奇 )N Y (AH) 0(AH) 1RESULT

21、 (AH) ENDYN Data segmentString db This is a string,$ Result db ?Data ends;Code segment assume cs:code,ds:dataMain proc far Start: mov ax,data mov ds,ax lea bx,string lea di,resultLop1: mov al,bx inc bx cmp al,24h jz done or al,al jpo error jmp lop1 Done: mov ah,0 jmp next Error: mov ah,-1Next: mov d

22、i,ah mov ah,4ch int 21hMain endpCode ends end start 3.逻 辑 尺 控 制 法 在 实 际 应 用 的 循 环 程 序 中 , 有 时 循 环 体 内 具 有 多分 支 结 构 的 循 环 程 序 , 每 执 行 循 环 一 次 , 程 序 应 按 照规 定 好 的 次 序 去 执 行 其 他 分 支 或 重 复 执 行 某 个 分 支 。 对 于 这 种 结 构 的 循 环 程 序 , 我 们 采 用 逻 辑 尺 控 制方 法 来 实 现 。 逻 辑 尺 控 制 法 首 先 应 设 计 一 把 逻 辑 “ 尺 ” , 即 将字 节 、 字

23、或 双 字 甚 至 将 根 据 需 要 所 设 置 的 多 字 节 中 的各 位 表 示 不 同 的 操 作 。 若 在 循 环 中 执 行 更 多 分 支 , 也可 采 用 多 位 组 合 , 如 : 2位 组 合 表 示 4个 分 支 , 3位 组 合表 示 8个 分 支 。 最 简 单 的 逻 辑 尺 是 用 一 位 “ 0” 和 “ 1”表 示 两 种 不 同 的 分 支 。 P167. ex5.5 设 有 数 组 X和 Y, X中 有 X1, ,X10,Y中 有Y1, ,Y10,试 编 程 计 算 ,结 果 存 入 Z中 . z1=x1+y1 z5=x5-y5 z8=x8-y8 z2

24、=x2+y2 z6=x6+y6 z9=x9+y9 z3=x3-y3 z7=x7-y7 z10=x10+y10 z4=x4-y4 分 析 : 可 用 循 环 十 次 , 每 次 取 数 , 操 作 加 、 减 为 了 区 别 , 设 立 标 志 位 0: 加 1: 减 逻 辑 尺 : 0000000011011100(前 6位 无 意 义 !) 置 循 环 计 数 值I=0 (下 标 )测 试 尺第 i位 ?Xi-Yi Xi+Yi结 果 送 ZiI=I+1计 数 值 -1 计 数 值 为 0N ENDY data segment x dw 1,2,3,4,5,6,7,8,9,10Y dw 10,

25、6,7,4,5,3,2,1,7,3Z dw 10 dup(?)Logic_rule dw 00dcHData endsCode segment assume cs:code,ds:dataMain proc farStart:mov ax,data mov ds,ax mov bx,0 mov cx,10 mov dx,logic_ruleNext:mov ax,xbx shr dx,1 jc subs add ax,ybx jmp short result Subs: sub ax,ybxResult: mov zbx,ax add bx,2 loop next Mov Ax,4c00H I

26、nt 21HMain:endpCode ends end satrt采 用 静 态逻 辑 尺 ! (P170)ex5.6 从 键 盘 上 输 入 一 行 字 符 , 要 求 第 一 个 字 符为 空 格 , 不 是 , 退 出 。 若 是 , 开 始 接 受 字 符 , 并 存入 BUFFER为 首 址 的 缓 冲 区 (空 格 符 不 存 入 ), 直 至 第二 个 空 格 符 时 , 退 出 程 序 。分 析 : (1)是 第 一 个 字 符 , 不 是 空 格 , flag=0,退 出 。 (2)是 第 一 个 字 符 , 是 空 格 , flag=1, 输 入 下 一个 字 符 。 (

27、3)不 是 第 一 个 字 符 , 是 空 格 , flag=1, 退 出 。 (4)不 是 第 一 个 字 符 , 不 是 空 格 , flag=1,存 入Buffer。 falg: 是 一 逻 辑 尺 , 开 始 时 flag=0,空 格 开 始时 ,flag=1,空 格 结 束 时 ,flag=1。 (动 态 逻 辑 尺 ) 置 缓 冲 区 首 址 及 标 志 位接 受 一 字 符首 字 符 ?Space? YYENDSpace?YN存 入 , 接 受 下 一 字 符N N Flag=1Data segmentBuffer db 80 dup(?)Flag db ?Data endsCo

28、de segment assume cs:code,ds:dataMain proc far start: mov ax,data mov ds,ax lea bx,buffer mov flag,0Next:mov ah,01 int 21h test flag,01h jnz follow cmp al,20h jnz exit mov flag,1 jmp nextFollow: cmp al,20h jz exit mov bx,al inc bx jmp nextExit:mov ah,4ch int 21hMain endpCode ends end start 四 .多 重 循

29、环 程 序 设 计 一 个 循 环 程 序 的 循 环 体 中 又 包 含 着 循 环 结 构 这 就 是 多 重 循 环 。Ex:5.8 附 加 段 有 一 个 字 数 组 , 首 址 在 DI中 , 第 一 个 字 为 数 组 长 度 , 使 数组 整 序 (从 大 到 小 )。分 析 : (用 冒 泡 法 ) 原 算 法 为 : 从 第 一 个 数 开 始 依 次 对 相 邻 两 个 数 比 较 ,次 序 不 对 交 换 位 置 , 次 序 对 , 不 作 任 何 操 作 , N个 数 , 进 行 N-1次 比 较 ,最 小 的 数 已 放 到 最 后 。 (要 比 较 N-1遍 ) 比

30、 较 遍 数 1 2 3 N-3 N-2 N-1 比 较 次 数 : (N-1)+(N-2)+(N-3)+3 +2 + 1=O(n2) EX: 8 5 16 84 32 一 遍 8 16 84 32 5 二 遍 16 84 32 8 5 三 遍 84 32 16 8 5 缺 陷 : 大 多 数 情 况 , 数 组未 比 较 N-1遍 已 达 到 目 的 ,而 程 序 必 须 进 行 N-1遍 操 作 。 改 进 : 设 一 个 标 志 位 ,外 循 环 为 1, 进 入 内 循环 时 , 每 交 换 一 次 置 0,每 次 内 循 环 结 束 , 标志 位 若 为 0, 进 入 下 一次 外

31、循 环 , 若 为 1, 表示 已 有 序 , 立 即 结 束外 循 环 。 外 循 环 SAVE_CNT N标 志 1SAVE_CNT SAVE_CNT-1SAVE_CNT=0?CX SAVE_CNT,DI 首 址Ai+1=AiAi Ai+1,标 志 0 (CX)-1=0? 标 志 =0?ENDYNN NYY N data segmentSave_cnt dw ?Start_addr dw ?Data endsExtra segmentX dw 10,34,45,67,21,38,98,120,31,53,44Extra endsCode segment assume cs:code,ds:

32、data,es:extraMain proc farStart: push bx mov ax,data mov ds,ax mov ax,extra mov es,ax lea di,x mov start_addr,di mov cx,es:di mov save_cnt,cxInit: mov bx,1 dec save_cnt jz stored mov cx,save_cnt mov di,start_addr next: add di,2 mov ax,es:di cmp es:di+2,ax jle cont xchg es:di+2,ax mov es:di,ax sub bx

33、,bxCont: loop next cmp bx,0 je initStored: mov di,start_addr pop bx mov ah,4ch int 21hMain endpCode ends end start Lesson: 5.1,5.7,5.17,5.24,3.38 补 充 作 业1 .有 以 下 程 序 段FIBONA DW 40H DUP(?)NUM DB 10 . MOV CX,0 MOV CL,NUM MOV AX,0 MOV BX,1 MOV DI,0LOP: MOV FIBONADI,AX ADD AX,BX XCHG AX,BX ADD DI,TYPE FIBONA LOOP LOP上 述 程 序 段 执 行 后 , 试 给 出 FINONA前 10个 单 元 的 内 容 2.有 以 下 程 序 段 aryb db 3 dup(1,3,5,7) mov si,offset aryb mov cx,10 mov ax,0Again: add al,si and al,0Fh cmp al,9 jbe le1 inc ah sub al,9Le1: loop again上 述 程 序 段 执 行 后 ,(AX)=? , 若 用 指 令loopne代 替 LOOP, 那 么上 述 程 序 段 (AX)=? , (CX)=?

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!