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

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值