第5章 高级汇编语言程序设计
第 5 章
教学重点 在掌握基本的汇编语言程序 设计方法之后,进一步学习 如何提高编程效率的各种实 用方法: 高级汇编语言猩序设计 √高级语言特性 √宏结构 √模块化
教学重点 在掌握基本的汇编语言程序 设计方法之后,进一步学习 如何提高编程效率的各种实 用方法: ✓高级语言特性 ✓宏结构 ✓模块化
第5章 5.1高级语言特性 >MASM60引入高级语言的程序设计 特性 条件控制伪指令 IF ELSE ENDIF ■循环控制伪指令 WHILEENDW REPEAT UNTIL ■过程声明和过程调用伪指令 PROTO NVOKE
第 5 章 5.1 高级语言特性 ➢MASM 6.0引入高级语言的程序设计 特性 ◼条件控制伪指令 .IF .ELSE .ENDIF ◼循环控制伪指令 .WHILE .ENDW .REPEAT .UNTIL ◼过程声明和过程调用伪指令 .PROTO .INVOKE
第5章 5.1.1条件控制伪指令 类似高级语言中、THEN、ELSE和 ENDF的相应功能 >在汇编时要展开,自动生成相应的比较和条 件转移指令序列,实现程序分支 F条件表达式;条件为真(值为非0) 分支体 执行分支体 ELSE ;前面条件为假 分支体 执行分支体] ;分支结束 条件 ENDIF
第 5 章 5.1.1 条件控制伪指令 ➢类 似 高 级 语 言 中 IF 、 THEN 、 ELSE 和 ENDIF的相应功能 ➢在汇编时要展开,自动生成相应的比较和条 件转移指令序列,实现程序分支 .IF 条件表达式 ;条件为真(值为非0) 分支体 ;执行分支体 [ .ELSE ;前面IF条件为假 分支体 ;执行分支体 ] .ENDIF ;分支结束 条件
;单分支结构 ∝例题 工FAx<0 ;双分支结构 工Eax==5 neg ax END工 cmp ax,05h 大 mov result ax Jne @C0001 ;双分支结构 mov ox ax 工Fax==5 mov ax, o ELSE mov bx ax mov ax, o jmp @C0003 ELSE ★⑧C0001: dec ax dec ax 。END工E END工F ★C0003:
;单分支结构 .IF AX < 0 neg ax .ENDIF mov result,ax ;双分支结构 .IF ax==5 mov bx,ax mov ax,0 .ELSE dec ax .ENDIF ;双分支结构 .IF ax==5 * cmp ax,05h * jne @C0001 mov bx,ax mov ax,0 .ELSE * jmp @C0003 *@C 0001 : dec ax .ENDIF *@C0003: 例题
data 例5.1-1/2 sbyte sbyte sbyte tag byte startup mov al, b imul al mov x ax ;bx中为b2 mov al a imul mov Cx, 4 imul Cx ;ax中为4ac
.data _a sbyte ? _b sbyte ? _c sbyte ? tag byte ? .code .startup mov al,_b imul al mov bx,ax ;bx中为 b 2 mov al,_a imul _c mov cx, 4 imul cx ;ax中为 4ac 例5.1 -1/2
例5.1-2/2 .主 f sword ptr bx>ax;比较二者大小 mov tag, 1 第一分支体:条件满足,tag-1 else mov tag o 第二分支体:条件不满足,tag0 endif exit o
.if sword ptr bx >= ax ;比较二者大小 mov tag,1 ;第一分支体:条件满足,tag←1 .else mov tag,0 ;第二分支体:条件不满足,tag←0 .endif .exit 0 例5.1-2/2
第5章 5.1.2循环控制伪指令 >WHLE结构的循环控制伪指令 WHLE条件表达式;条件为真 循环体 执行循环体 ENDW 循环体结束 UNTL结构的循环控制伪指令 REPEAT 重复执行循环体 循环体 UNTL条件表达式;直到条件为真
第 5 章 5.1.2 循环控制伪指令 ➢WHILE结构的循环控制伪指令 .WHILE 条件表达式 ;条件为真 循环体 ;执行循环体 .ENDW ;循环体结束 ➢UNTIL结构的循环控制伪指令 .REPEAT ;重复执行循环体 循环体 .UNTIL 条件表达式 ;直到条件为真
(求1~10之和 ;WHIE结构 ;UI结构 XO a, a xor ax, ax moV Cx 100 mOv Cx, 100 while cxI=0 repeat add ax, cx add ax, Cx dec cx dec cx end 。un七i1cx==0 mov su a mov Su a
;WHILE结构 xor ax, ax mov cx,100 .while cx!=0 add ax,cx dec cx .endw mov sum,ax 求1~100之和 ;UNTIL结构 xor ax, ax mov cx,100 .repeat add ax,cx dec cx .until cx==0 mov sum,ax
mov Cx 100 0 add ax, [bx] else break endif inc bx inc bx un七i1cxz moy result ax
mov cx,100 xor ax,ax lea bx,array .repeat .if sword ptr [bx] >= 0 add ax,[bx] .else .break .endif inc bx inc bx .untilcxz mov result,ax 例5.2