您的位置:首页 > 其它

汇编语言四 产生随机数,统计奇数的个数,并计算所有奇数的和

2018-02-07 17:19 1171 查看
1.题目要求:

用同余法产生200个小于256的伪随机数,统计其中奇数的个数,并计算所有奇数的和,将奇数个数存入名为CNT的字节单元,和存入名为SUMODD的字存储单元中。

2.编写代码:

STACK SEGMENT STACK'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
CNT DB 0          ;CNT储存奇数的个数
SUMODD DW 0       ;SUMODD储存奇数的和
VAR1 DB 1         ;
VAR2 DB 255       ;同余法产生小于256的随机数:AX=(AX*7+1) mod 255
VAR3 DB 200       ;要产生200个随机数,就循环200次
VAR4 DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
MOV AL,VAR1
MOV BL,VAR2
MOV CL,VAR3
L1:
PUSH CX       ;因为循环中还嵌套了循环,先将外层循环次数压入堆栈
MOV CX,6
MOV VAR4,AX
L2:
ADD AX,VAR4
LOOP L2       ;求得AX*7
ADD AX,1
DIV BL        ;求得(AX*7+1) mod 255,余数在AH中
ROR AH,1
JNC OU        ;将AH最低位移入CF中,如果是奇数,CF=1,如果是偶数CF=0
ROL AH,1
MOV CL,8
SHR AX,CL     ;如果是奇数:将AX更新为(AX*7+1) mod 255
ADD DX,AX     ;奇数和 DX+AX
INC BH        ;奇数个数 BH+1
JMP NEXT
OU:
ROL AH,1      ;如果是偶数
MOV CL,8
SHR AX,CL     ;更新AX,DX和BH不变
JMP NEXT
NEXT:
POP CX        ;将循环次数弹出堆栈到CX
LOOP L1
MOV CNT,BH       ;将个数保存到CNT
MOV SUMODD,DX    ;将和保存到SUMODD
MOV AH,4CH
INT 21H
CODE ENDS
END START
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: