1编程计算z=(X2-3y)/2,设x,y为单字节正整数,结果Z用两个字节来存放。
• DATA SEGMENT • X DB 25 • Y DB 32 • Z DW ? • DATA ENDS • ;
• CODE SEGMENT
• ASSUME CS:CODE,DS:DATA • EXPRE PROC FAR • START:PUSH DS
• SUB AX,AX
• PUSH AX • MOV AX,DATA • MOV DS,AX • MOV AL,X
• MUL AL ;X2 • MOV BL,Y • ADD BL,BL
ADD BL,Y ;3Y • SUB AX,BX ; X2-3Y
• SHR AX,1 ; (X2-3Y)/2 • MOV Z,AX ;存放结果 • EXPRE ENDP • CODE ENDS • END START
2编程求S=∑i,并将S存入SUM单元
• DATA SEGMENT • SUM DW ? DATA ENDS
• • • • • • • • • • • • • •
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ;
START:MOV AX,DATA
MOV DS,AX
MOV AX,0;和清零
MOV CX,100;设计数初值 ADD AX,CX;求和 DEC CX ;计数 JNZ AGAIN
MOV SUM,AX;存和 MOV AH,4CH INT 21H CODE ENDS
• END START
3在内存的字单元X中有一个16位的二进制数。试编写一程序统计出X单元中含1的个数,并存入RESULT单元
• DATA SEGMENT
• X DW 31A0H • RESULT DW ? • DATA ENDS • CODE SEGMENT
• ASSUME CS:CODE,DS:DATA • START PROC FAR
• PUSH DS • XOR AX,AX • PUSH AX
• MOV AX,DATA • MOV DS,AX
• MOV CX,0; 初始化cx=0 • MOV AX,X ;取X到AX • AGAIN: AND AX,AX;X=0
• JZ EXIT ;X=0.退出 • SHL AX,1
• JNC NEXT ;CF=1?
• JNC CX ;是,计数 • NEXT:JMP AGAIN • EXIT: JMP AGAIN
• EXIT: MOV RESULT,CX;存结果 • RET • START ENDP • CODE ENDS
• END START
4在40个元素组成的数组中寻找第一个非0元素 • MOV CX,28H • MOV SI.0FFH • NEXT:INC SI
• CMP BYTE PTR[SI],0
• LOOPZ NEXT • JNZ OKK
• CALL DISPLAY1 • RET • OKK: CALL DISPLAY2 • RET
5.PAGE 60,132;指定每页60行,132列
TITLE 对两个字数据求和;为源程序指定标题
• • • • • • • • • • • • • • • • • • • •
SSEG SEGMENT ;堆栈段开始
DW 20H ;定义堆栈段空间 SSEG ENDS ;堆栈段结束 DSEG SEGMENT ;数据段开始 AGRX DW 1234H ;定义被加数 AGRY DW 5678H ;定义加数
SUM DW ? ;定义存放结果的空单元 DSEG ENDS ;数据段结束 CSEG SEGMENT ;代码段开始
ASSUME CS:CSEG,DS:DSEG SS:SSEG MOV AX,DSEG;初始化DS寄存器 MOV DS,AX
MOV AX,AGRX;取被加数到AX寄存器 MOV BX,AGRY;取加数到BX寄存器 ADD AX,BX; 两个数相加 MOV SUM,AX;存放结果 MOV AX,4C00H
INT 21H;程序正常退出 CSEG ENDS;代码段结束
END MAIN ;源程序结束