鱼C论坛

 找回密码
 立即注册
查看: 2222|回复: 4

[技术交流] 支持汇编 这是我学习的零汇编后的进阶部分,支持的话就继续。

[复制链接]
发表于 2013-5-30 10:54:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
   第一天:这是我学习的零汇编后的进阶部分(在某个学习网站),支持的话就继续
      条件控制伪指令的格式

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-30 12:07:57 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-30 12:41:10 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-31 09:47:47 | 显示全部楼层
第二天   循环控制伪指令的格式
    条件表达式中的操作符
操作符        功能        操作符        功能        操作符        功能
==        等于        &&        逻辑与        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 [bx] >= 0
                   add ax,[bx]
               .else
                   .break
               .endif
               inc bx
               inc bx
           .untilcxz
           mov result,ax
           .exit 0
           end

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-31 10:47:29 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表