汇编语言编写随机数1
dos下使用汇编产生一个随机数方法
assume cs:code
code segment
start:
mov ax,0h ;间隔定时器
out 43h,al ;通过端口43h
in al,40h ;对端口40h访问2次
in al,40h ;一个随机数已经在al中了,如果你觉得访问2次还不够随机,你可以多访问几次,一般2次就已经很随机了
mov ax,4c00h ;退出程序
int 21h
code ends
end start
问题提出
有7位数,每一位是0-9自然数,只要按动一个键,就显示一位随机数,按动7次,显示出7个数值。
提示:每次收取的号码,显示到屏幕上,抽取结束后,用英文提示:END。
题意分析
该题目为随机数输出,要求每按一次键盘,出现一个随机数,范围是0~9。首先需要写出随机数的程序,再让随机程序运行7次即可,并在运行满7次后自动输出字符“END”。
程序框图
4.程序及结果
STACK SEGMENT STACK
DW 256 DUP(?)
STACKENDS
DATASEGMENT
MESDB 'END',0AH,0DH,'$'
DATAENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START PROC FAR
MOV AX,DATA
MOV DS,AX
MOV CX,10
LOOP1:
KEY: SAHF
MOV AH,0
LAHF
MOV AH,0H
INT 16H
JZ KEY
CALL RAND
ADD BL,30H
MOV DL,BL
MOV AH,02H
INT 21H
MOV DL,' '
MOV AH,02H
INT 21H
LOOP LOOP1
NEXT:MOV DX,OFFSET MES
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
START ENDP
RAND PROC
PUSH CX
PUSH DX
PUSH AX
STI
MOV AH,0
INT 1AH
MOV AX,DX
AND AH,3
MOV DL,10
DIV DL
MOV BL,AH
POP AX
POP DX
POP CX
RET
RAND ENDP
CODE ENDS
END START结果: