汇编语言变量累加

我想在汇编语言中定义一个变量,在我执行完一段程序后,这个变量的值加1
就像c语言中的 i++语句一样。

Code Segment
Assume CS:Code,DS:Code

s1 db 129,78,99,72,63,51,49,37,253,199
Odd_Num equ 1 ;奇数
Even_Num equ 0 ;偶数
Parity equ Odd_Num ;相与结果存于奇数字节

Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段

cld
lea si,s1 ;变量s1首地址装入源变址寄存器si
mov cx,5 ;循环次数(10个字节,两两相与,循环5次)
.IF Parity==Odd_Num ;若把相与结果存于奇数字节
L1: lodsb ;读入偶数字节至累加器AL(这条指令执行后,si自动增1)
and [si],al ;相与的结果存于奇数字节
inc si ;准备处理后面的两个字节
loop L1
.ELSEIF Parity==Even_Num ;若把相与结果存于偶数字节
L2: inc si ;si增1,准备读取奇数字节
lodsb ;读入奇数字节至累加器AL
and [si-2],al ;相与的结果存于偶数字节
loop L2
.ENDIF

Exit_Proc: mov ah,4ch ;结束程序
int 21h

Code ENDS
END Start ;编译到此结束

用伪指令实现分支结构

为了改善汇编语言源程序的结构,减少显式转移语句所带来混乱,在宏汇编MASM 6.11系统中,增加了表达分支结构的伪指令。该伪指令的书写格式与高级语言的书写方式相类似,汇编程序在汇编时会自动增加转移指令和相应的标号。理解并掌握该知识,对将来学习《编译原理》课程也有一定的帮助。

分支伪指令的具体格式如下:

格式1:

.IF condition ;以英文“句号”开头
指令序列 ;条件"condition"成立时所执行的指令序列
.ENDIF

格式2:

.IF condition
指令序列1
.ELSE
指令序列2 ;条件"condition"不成立时所执行的指令序列
.ENDIF

格式3:

.IF condition1
指令序列1
.ELSEIF condition2
指令序列2 ;条件"condition2"成立时所执行的指令序列
.ENDIF

其中:条件表达式“condition”的书写方式与C语言中条件表达式的书写方式相似,也可用括号来组成复杂的条件表达式。

条件表达式中可用的操作符有:==(等于)、!=(不等)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、&(位操作与)、!(逻辑非)、&&(逻辑与)、||(逻辑或)等。

若在条件表达式中检测标志位的信息,则可以使用的符号名有:CARRY?(相当于CF==1)、OVERFLOW?(OF==1)、PARITY?(PF==1)、SIGN?(SF==1)、ZERO?(ZF==1)等。例如:

.IF CARRY? && AX != BX ;检测CF==1且AX!=BX是否成立
;汇编语言指令序列
.ENDIF

在指令序列中,还可再含有其它的.IF伪指令,即:允许嵌套。伪指令.ELSEIF引导出另一个二叉分支,但它不能作伪指令块的第一个伪指令。

汇编程序在对“条件表达式”进行代码转换时将进行代码优化处理,以便尽可能生成最好的指令代码。如:

.IF ax == 0

汇编程序会把它转换为指令“OR ax, ax”,而不是“CMP ax, 0”,因为前者比后者更好,而不是简单直接地转换为后者。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-08
DATA SEGMENT
INPUT DB 'INPUT NUM:','$'
BUF DB 10
N DB ?
CHAR DB 10 DUP(0)
SUM DB 0
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET INPUT
MOV AH,9
INT 21H

MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H

MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H

MOV SI,OFFSET CHAR
MOV AL,0
MOV CL,N
LOP: ADD AL,[SI]
INC SI
LOOP LOP
MOV AH,4CH
INT 21H

CODE ENDS
END START
本回答被提问者和网友采纳
第2个回答  2011-09-23
INC
第3个回答  2011-09-23
inc ax
相似回答