支持汇编 这是我学习的零汇编后的进阶部分,支持的话就继续。
第一天:这是我学习的零汇编后的进阶部分(在某个学习网站),支持的话就继续条件控制伪指令的格式
MASM 6.0引入.IF、.ELSEIF、.ELSE和.ENDIF伪指令,它们类似高级语言中IF、THEN、ELSE和ENDIF的相应功能。 .IF 条件表达式 ;条件为真(值为非0),执行分支体 分支体 [.ELSEIF 条件表达式 ;前面IF [以及前面ELSEIF] 条件为假(值为0), ;并且当前ELSEIF条件为真,执行分支体 分支体 ] [.ELSE ;前面IF [以及前面ELSEIF] 条件为假, ;执行分支体 分支体 ] .ENDIF ;分支结束 条件表达式中的中操作符
操作符功能操作符功能操作符功能
==等于&&逻辑与CARRY?CF=1?
!=不等于||逻辑或OVERFLOW?OF=1?
> 大于!逻辑非PARITY?PF=1?
>=大于等于 SIGN?SF=1?
< 小于&位测试ZERO?ZF=1?
<=小于等于()改变优先级
实例1
这些伪指令在汇编时自动生成相应的比较和条件转移指令序列,实现程序分支。 对于采用条件控制伪指令编写的双分支结构的源程序段: .IF ax==5 mov bx,ax mov ax,0 .ELSE dec ax .ENDIF查看其形成的列表.LST文件,如下所示(带有*号的语句是有汇编程序产生的): .IF ax==5* cmp ax,05h* jne @C0001 mov bx,ax mov ax,0 .ELSE* jmp @C0003*@C0001: dec ax .ENDIF*@C0003:实例2
例5.1:用条件控制伪指令实现有根判断的源程序 .model small .stack .data _a sbyte ? _b sbyte ? _c sbyte ? tag byte ? .code .startup mov al,_b imul al mov bx,ax ;bx中为b2 mov al,_a imul _c mov cx,4 imul cx ;ax中为4ac .if sword ptr bx >= ax ;比较二者大小 mov tag,1 ;第一分支体:条件满足,tag←1 .else mov tag,0 ;第二分支体:条件不满足,tag←0 .endif .exit 0 end
强烈支持楼主ing…… 无回帖,不论坛,这才是人道。 第二天 循环控制伪指令的格式
条件表达式中的操作符
操作符 功能 操作符 功能 操作符 功能
== 等于 && 逻辑与 CARRY? CF=1?
!= 不等于 || 逻辑或 OVERFLOW? OF=1?
> 大于 ! 逻辑非 PARITY? PF=1?
>= 大于等于 SIGN? SF=1?
< 小于 & 位测试 ZERO? ZF=1?
<= 小于等于 () 改变优先级
WHILE结构的循环控制伪指令的格式为:
.WHILE 条件表达式 ;条件为真,执行循环体
循环体
.ENDW ;循环体结束
UNTIL结构的循环控制伪指令的格式为:
.REPEAT ;重复执行循环体
循环体
.UNTIL 条件表达式 ;直到条件为真
UNTIL结构还有一种格式:
.REPEAT ;重复执行循环体
循环体
.UNTILCXZ [条件表达式] ;cx←cx-1,直到cx=0或条件为真
例题实现1 ~ 100求和。
使用WHILE结构,可以编写为:
xor ax, ax ;被加数AX清0
mov cx,100
.while cx!=0
add ax,cx ;从100,99,...,2,1倒序累加
dec cx
.endw
mov sum,ax ;将累加和送入指定单元
使用UNTIL结构,循环体部分也可以编写为:
.repeat
add ax,cx
dec cx
.until cx==0
使用UNTIL结构,循环体部分还可以编写为:
.repeat
add ax,cx
.untilcxz
例:设array是100个字元素的数组,试计算其中前若干个非负数之和,直到出现第一个负数为止,并将结果存入result单元(不考虑进位和溢出)。
分析:由于已知array中最多有100个非负数,所以可以采用计数循环。循环开始前置循环计数器 CX为100,累加和清零。依题意,循环体内每取一个元素,都要判断其是否大于等于0,若是则累加,否则应立即退出整个循环。循环出口后将累加和存入result单元。
.model small
.stack
.data
array sword 100 dup(?)
result sword ?
.code
.startup
mov cx,100
xor ax,ax
lea bx,array
.repeat
.if sword ptr >= 0
add ax,
.else
.break
.endif
inc bx
inc bx
.untilcxz
mov result,ax
.exit 0
end
强烈支持楼主ing……
页:
[1]